我尝试使用Leafet的mapbox和杂食动物插件制作地图,以便使用教程搜索数据。我不知道如何在我的案例中整合来自杂食插件的代码。我使用geojson url import multiprocessing as mp
#prepare stuff
if __name__=="__main__":
p = mp.Pool()
function_results = list(p.imap_unorderd(fun,df.iterrows())) #unordered
#function_results = p.map(fun,df.iterrows()) #ordered
p.close()
作为我的数据,使用Leaflet的MarkerCluster聚类标记。
感谢您的回复。
最好的问候。
和Sandrine
修改
我尝试使用Mapbox js工具过滤标记群集组。
它工作得很好,但我想将此功能插入到我的项目中。但我不知道如何使用其他功能:杂食插件,搜索数据,显示弹出窗口,标记群集组。你能帮帮我吗?
My js Fiddle"过滤标记群组" :https://jsfiddle.net/sduermael78/rgoxpxwq/4/
答案 0 :(得分:0)
您目前通过jQuery $.getJSON
直接从地图集帐户加载数据。
如果我的理解是正确的,您想使用leaflet-omnivore插件替换这些方法吗?
直接替换非常简单,因为您可以直接使用:
var geojsonLayer = omnivore.geojson("filePath", null, L.mapbox.featureLayer());
geojsonLayer.addTo(map);
现在,当您想要对标记进行聚类时(在您的情况下使用Leaflet.markercluster插件),它会变得稍微复杂一些。但它类似于$.getJSON
,因为它们都执行异步AJAX请求,你必须在回调中进行转换。
使用leaflet-omnivore,您可以使用.on("ready", callback)
语法:
var geojsonLayer = omnivore.geojson("filePath", null, L.mapbox.featureLayer())
.on("ready", function() {
var markers = L.markerClusterGroup();
markers.addLayer(geojsonLayer);
markers.addTo(mymap);
});
更新了JSFiddle:https://jsfiddle.net/1uuubmwb/39/
修改强>
好的,我错过了你想要搜索数据的部分,就像你指向的mapbox教程一样。
在您的情况下,由于您希望对标记进行聚类,因此它更复杂,因此您不直接拥有地图集要素图层,而是标记群集组。
解决方法是每次更改geojsonLayer
地图集要素图层上的过滤条件时替换该群集组的内容:
// 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);
然后,对于弹出窗口,您必须创建它并手动绑定它,因为mapbox要素图层需要您的GeoJSON数据才能使用title
属性(如果是这样,它会自动使用该信息来填充弹出窗口/“工具提示“内容”:
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>"
);
});
}
不幸的是,.setFilter()
似乎删除了该弹出广告,因此您需要在每attachPopups()
之后调用此setFilter
函数。
答案 1 :(得分:0)
感谢您的回答。事实上,我想使用leaflet-omnivore插件来搜索来自geojson的数据和url。 教程是:https://www.mapbox.com/mapbox.js/example/v1.0.0/filtering/ “使用setFilter作为快速搜索,根据用户查询筛选出标记”。
如何在这些新案例中使用url显示geojson的弹出窗口? layer.bindPopup(feature.properties.CODE);
我可以使用所有这些功能来构建我的地图(搜索标记,聚类标记......)?