小叶杂食动物+聚类标记+过滤标记聚类组

时间:2016-08-01 15:29:04

标签: javascript leaflet mapbox

我尝试使用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/

我的项目:https://jsfiddle.net/sduermael78/1uuubmwb/42/

2 个答案:

答案 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é&nbsp;:</b> " + props.CODE_UNITE + "<br />" +
        "<b>Adresse web&nbsp;:</b> <a href='" + props.ADRESSE_WEB + "' target='_blank'>" + props.ADRESSE_WEB + "</a>"
      );
    });
}

不幸的是,.setFilter()似乎删除了该弹出广告,因此您需要在每attachPopups()之后调用此setFilter函数。

演示:https://jsfiddle.net/1uuubmwb/40/

答案 1 :(得分:0)

感谢您的回答。事实上,我想使用leaflet-omnivore插件来搜索来自geoj​​son的数据和url。 教程是:https://www.mapbox.com/mapbox.js/example/v1.0.0/filtering/ “使用setFilter作为快速搜索,根据用户查询筛选出标记”。

如何在这些新案例中使用url显示geojson的弹出窗口? layer.bindPopup(feature.properties.CODE);

我可以使用所有这些功能来构建我的地图(搜索标记,聚类标记......)?