Faltblatt: Wie verwende ich einen benutzerdefinierten Marker auf einer Geojson-Ebene?


9

Ich versuche, eine Geojson-Karte auf eine Flugblattkarte zu setzen, und alles funktioniert einwandfrei, bis ich den Standard-Blu-Marker verwende.

Jetzt möchte ich einen benutzerdefinierten Marker (ein kleines PNG-Symbol) verwenden und habe meinen Code im Folgenden geändert

 var my_json;
 $.getJSON('../Dati/my-geojson.geojson', function(data) {
           my_json = L.geoJson(data, {
            pointToLayer: function(feature, latlng) {
                var smallIcon = L.Icon({
                    options: {
                        iconSize: [27, 27],
                        iconAnchor: [13, 27],
                        popupAnchor:  [1, -24],
                        iconUrl: 'icone/chapel-2.png'
                    }
                });
                return L.marker(latlng, {icon: smallIcon});
            },
           onEachFeature: function (feature, layer) {
                   layer.bindPopup(feature.properties.ATT1 + '<br />'
                                                 + feature.properties.ATT2);
           }
         });
 my_json.addTo(markers.addTo(map));
 TOC.addOverlay(my_json, "My layer name in TOC");
 map.removeLayer(my_json); 
 });

Der Fehler, den ich in Firebug sehen kann, ist

TypeError: this.options.icon is undefined
var anchor = L.point(this.options.icon.options.popupAnchor || [0, 0]);

etwas läuft schief, aber ich weiß nicht, wie ich es beheben soll.

Antworten:


7

Nur ändern

 var smallIcon = L.Icon({
   options: {
     iconSize: [27, 27],
     iconAnchor: [13, 27],
     popupAnchor:  [1, -24],
     iconUrl: 'icone/chapel-2.png'
   }
 });

zu

 var smallIcon = new L.Icon({
     iconSize: [27, 27],
     iconAnchor: [13, 27],
     popupAnchor:  [1, -24],
     iconUrl: 'icone/chapel-2.png'
 });

Siehe die offizielle Dokumentation zum Symbol und dieses Tutorial .

Sie verwenden es nicht newfür L.Icon (Es sollte nicht erforderlich sein, aber ohne es sind wir auf ein Problem gestoßen ...)

Sehen Sie sich eine Demo an, in der Ihr Beispiel wiederverwendet wird.

Ihre Syntax sollte beim Erweitern der L.IconKlasse funktionieren .


Danke ThomasG77 für die Antwort. Ich habe versucht, Sie Vorschlag, aber etwas funktioniert immer noch nicht. Firebug sagt mir immer noch ... "TypeError: this.options.icon ist undefiniert var anchor = L.point (this.options.icon.options.popupAnchor || [0, 0]);".
Cesare

L.Iconsollte seinnew L.Icon
ThomasG77

Weder das Dokument noch das Tutorial verwenden "neu". Ich glaube, es ist optional.
Ed Staub

Sie haben theoretisch Recht, aber kopieren Sie meinen Beispiel-Demo-Code und entfernen Sie ihn newohne ... Ich habe hier keine Erklärung :(
ThomasG77

1

Verzeihen Sie mir, wenn ich falsch liege, da ich ein bisschen neu darin bin, aber ich habe bemerkt, dass Sie es als L.Icon mit einem Großbuchstaben I geschrieben haben . Vielleicht ist die Version neuer oder so, aber es funktioniert nicht, wenn ich es so buchstabiere. L.icon mit einem kleinen ich funktioniert gut für mich.

Sie haben auch den kleinen Fallnamen in der return-Anweisung verwendet.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.