Viac

Chyba s .eachLayer v leaflet.js


Snažím sa pridať vyskakovacie okná pre ikony bodov pomocou Leaflet.js a narazil som na túto chybu: „Uncaught TypeError: points.eachLayer nie je funkcia“

Tu je môj kód:

function addPoints (data) {for (var feature in data.features) {if (data.features [feature] .properties.activity == "hunting") {points = L.marker ([data.features [feature] .geometry .coordinates [1], data.features [feature] .geometry.coordinates [0]], {icon: L.mapbox.marker.icon ({'marker-color': '# FF5A5C', 'marker-symbol': 'bus'})}). addTo (map) .on ({mouseover: function (e) {this.openPopup ();}, mouseout: function (e) {this.closePopup ();}}); }}; drawPopup (dáta); } // ukončiť funkciu addPoints drawPopup (dáta) {points.eachLayer (funkcia (vrstva) {var popupContent = "park:" + data.features [funkcia] .properties.name + "
„+“ Činnosti: „+ data.features [funkcia] .properties.activity; layer.bindPopup (popupContent);});}

Už som použil takmer identický kód a nikdy som sa s týmto problémom nestretol, čo robím zle?


ÚPRAVA 1:

Kódujete pomocou skupiny vrstiev takto:

var points = L.layerGroup (); addPoints (údaje); function addPoints (data) {for (var feature in data.features) {if (data.features [feature] .properties.activity == "hunting") {var marker = L.marker ([data.features [feature]. geometry.coordinates [1], data.features [feature] .geometry.coordinates [0]], {icon: L.mapbox.marker.icon ({'marker-color': '# FF5A5C', 'marker-symbol') : 'bus'})}). addTo (map) .on ({mouseover: function (e) {this.openPopup ();}, mouseout: function (e) {this.closePopup ();}}); // Ponechanie odkazu na funkčný kľúč. značka.funkcia = vlastnosť; // Všetky údaje o vlastnostiach by ste mohli priamo uložiť do // značky namiesto ... // Nakoniec pridanie zabudovanej značky do skupiny vrstiev „bodov“. points.addLayer (značka); }}; drawPopup (údaje); } // ukončiť funkciu addPoints drawPopup (dáta) {points.eachLayer (funkcia (vrstva) {// Pravdepodobne chýba priradenie pre 'feature'? var feature = layer.feature; var popupContent = "Park:" + data.features [ funkcia] .vlastnosti.name + "
„+“ Činnosti: „+ data.features [feature] .properties.activity; layer.bindPopup (popupContent);});} layer.bindPopup (popupContent);});}

Ako je uvedené v komentároch, váš kód by sa dal pravdepodobne zjednodušiť používaním L.geoJsonskôr ako sa prechádzaťúdaje. Mala by však robiť prácu tak, ako je.


Vášbodovpremenná vyzerá ako iba naposledy vytvorená značka:

points = L.marker (…

Pravdepodobne budete chcieť vytvoriť skupinu vrstiev (ktorá máeachLayermetóda) a pridajte do nej svoje značky:

var points = L.layerGroup ();… points.addLayer (L.marker (/ * ... * /));… points.eachLayer (funkcia (vrstva) {/ * ... * /})


Pozri si video: Leaflet. Работа с плагинами (Október 2021).