Sie derzeit Ihre Daten sowohl durch jQuery $.getJSON
und direkt von Ihrem MapBox Konto laden.
Dann, wenn mein Verständnis korrekt ist, möchten Sie diese Methoden ersetzen, indem Sie leaflet-omnivore Plugin verwenden?
Direkter Ersatz ist ziemlich geradlinig, wie Sie direkt verwenden:
var geojsonLayer = omnivore.geojson("filePath", null, L.mapbox.featureLayer());
geojsonLayer.addTo(map);
Jetzt wird es etwas komplizierter, wenn Sie Ihre Markierungen clustern möchten (mit Leaflet.markercluster Plugin in Ihrem Fall). Aber es ist ähnlich zu $.getJSON
, da beide eine asynchrone AJAX-Anfrage durchführen, und Sie die Umwandlung in einem Rückruf machen müssen.
Mit Faltblatt-Allesfresser verwenden Sie die .on("ready", callback)
Syntax:
var geojsonLayer = omnivore.geojson("filePath", null, L.mapbox.featureLayer())
.on("ready", function() {
var markers = L.markerClusterGroup();
markers.addLayer(geojsonLayer);
markers.addTo(mymap);
});
Aktualisiert JSFiddle: https://jsfiddle.net/1uuubmwb/39/
EDIT
OK ich deinen Teil verpasst, wo Sie „wollen Suchen Sie die Daten "wie im Tutorial aus der mapbox, auf die Sie zeigen.
In Ihrem Fall ist es komplizierter, da Sie Ihre Markierungen gruppieren möchten, so dass Sie nicht direkt Ihre Mapbox-Feature-Schicht, sondern eine Marker-Cluster-Gruppe haben.
wäre Eine Abhilfe den Inhalt dieser Clustergruppe jedes Mal wenn Sie die Filterbedingung auf Ihrer geojsonLayer
MapBox Feature-Layer ändern zu ersetzen: manuell
// this will "hide" markers that do not match the filter.
geojsonLayer.setFilter(showCode);
// replace the content of marker cluster group.
markers.clearLayers();
markers.addLayer(geojsonLayer);
dann für Ihr Popup, müssen Sie es es schaffen und binden als MapBox Feature-Layer benötigt Ihre GeoJSON Daten das title
Attribut zu verwenden (wenn ja, automatisch verwendet diese Informationen das Popup/„Tooltip“ Inhalt zu füllen):
function attachPopups() {
// Create popups.
geojsonLayer.eachLayer(function (layer) {
var props = layer.feature.properties;
layer.bindPopup(
"<b>Code unité :</b> " + props.CODE_UNITE + "<br />" +
"<b>Adresse web :</b> <a href='" + props.ADRESSE_WEB + "' target='_blank'>" + props.ADRESSE_WEB + "</a>"
);
});
}
Leider sieht es aus wie .setFilter()
löscht dieses Popup, so dass Sie diese attachPopups()
Funktion nach jeder setFilter
aufrufen müssen.
Demo: https://jsfiddle.net/1uuubmwb/40/
Danke, dass Sie Ihren Code in JSFiddle geteilt haben, er hilft Ihnen dabei, Unterstützung zu bieten. Bitte beachten Sie, dass bei SO der erste Schritt darin besteht, Ihr Problem zu ermitteln, um Ihren Code zu reduzieren und ihn in Ihrem Fragenkörper zu teilen, indem Sie ein "[minimales, vollständiges und überprüfbares Beispiel] erstellen (https://stackoverflow.com/help/mcve) ". Weitere Informationen finden Sie unter [Hilfe fragen] (https://stackoverflow.com/help/asking). JSFiddle ist ein zusätzlicher Bonus. – ghybs