2016-07-15 12 views
1

Ich habe einen GeoJSON, die ich den featuregroup wie dies in meiner MapBox Karte hinzugefügt:Zugang GeoJSON Eigenschaft einer Schicht in einem featuregroup in MapBox

var featureCollection = { 
    "type": "FeatureCollection", 
    "features": [{ 
    "type": "Feature", 
    "properties": { 
     "id": 1 
    }, 
    "geometry": { 
     "type": "Point", 
     "coordinates": [0, 0] 
    } 
    },{ 
    "type": "Feature", 
    "properties": { 
     "id": 2 
    }, 
    "geometry": { 
     "type": "Point", 
     "coordinates": [30, 30] 
    } 
    },{ 
    "type": "Feature", 
    "properties": { 
     "id": 3 
    }, 
    "geometry": { 
     "type": "Point", 
     "coordinates": [-30, -30] 
    } 
    }] 
}; 
var geojson = L.geoJson(featureCollection); 
var featureGroup = L.featureGroup().addTo(map); 
featureGroup.addLayer(geojson); 

Jetzt mag ich die ID-Eigenschaft jeder Schicht zuzugreifen während ich die Feature-Gruppe durchlaufe, damit ich sie als Argument an eine andere Funktion übergeben kann. Im Fall eines featurelayer, kann ich es einfach so etwas wie dies mit Zugang:

var featureLayer = L.mapbox.featureLayer(featureCollection).addTo(map); 
featureLayer.eachLayer(function (layer) { 
    layer.on('click', function (e) { 
    console.log('Clicked feature ID: ' + e.target.feature.properties.id); 
    }); 
}); 

Aber ich will darauf zugreifen können, während in einem featuregroup Looping und auch mag ich in der Lage sein, es zu tun, ohne ein "Klick" oder ein solches Ereignis. Zum Beispiel, im Idealfall würde ich so etwas wie folgt verwenden:

featureGroup.eachLayer(function (layer) { 
    var id = layer.feature.properties.id; 
    testfunction(id); 
}); 

Ich habe nicht in der Lage gewesen, um herauszufinden, wie das zu tun. Ich habe versucht, online zu suchen, aber weil ich neu bin, habe ich wahrscheinlich nicht die richtigen Keywords in meiner Suche verwendet.

+1

Kannst du eine jsfiddle oder eine andere Beispiel-Demo-Seite veröffentlichen, wenn wir das in Aktion sehen können, weil deine vorgeschlagene Schleife gut funktionieren sollte. – snkashis

+0

Dies ist ein [jsfiddle] (https://jsfiddle.net/r8rd1x3p/1/) von dem, was ich versuche zu tun. Aus irgendeinem Grund wird die Karte nicht angezeigt. Aber wenn ich das versuche, sagt es mir einfach, dass layer.feature nicht definiert ist. – Raj

Antwort

2

geojson innerhalb featureGroup verschachtelt, so dass, wenn Ihre eachLayer Funktion ausgeführt wird, wird es nicht auf den einzelnen Funktionen innerhalb geojson Betrieb, sondern auf geojson selbst. Um die Eigenschaft id jedes Features zu extrahieren, müssen Sie eine Ebene tiefer gehen und über die Features innerhalb von geojson iterieren.

Glücklicherweise unterstützt auch die the L.GeoJson classeachLayer Methode (weil es eine Erweiterung der L.FeatureGroup ist, die eine Erweiterung von L.LayerGroup ist selbst). Um die id jedes Feature zu drucken, könnten Sie einfach die eachLayer Methode verwenden, um direkt auf geojson:

geojson.eachLayer(function (layer) { 
    var id = layer.feature.properties.id; 
    testfunction(id); 
}); 

Oder, wenn Sie eine Reihe von L.GeoJson Objekte verschachtelt innerhalb featureGroup, können Sie verwenden:

featureGroup.eachLayer(function (layer) { 
    layer.eachLayer(function (layer) { 
    var id = layer.feature.properties.id; 
    testfunction(id); 
    }); 
}); 
+0

Das ist großartig! Danke vielmals! – Raj