我使用leaflet构建了一个地图,其中包含由多个“较小”GeoJSON区域组成的大GeoJSON区域。
我使用Leaftet-Ajax这样调用它们:
var Rennes = new L.GeoJSON.AJAX("src/js/DI_Rennes.geojson", {onEachFeature: onEachFeature}, {style: style}).addTo(map);
这里,Rennes.geojson由3个较小的geojson组成。我使用geojson-merge将它们合并到一个geojson文件中。我还尝试了用L.layergroup重新组合较小区域的方法:
var Bordeaux1 = new L.GeoJSON.AJAX("src/js/DI_Bordeaux_1.json");
var Bordeaux2 = new L.GeoJSON.AJAX("src/js/DI_Bordeaux_2.json");
var Bordeaux3 = new L.GeoJSON.AJAX("src/js/DI_Bordeaux_3.json");
var Bordeaux = L.layerGroup([Bordeaux1, Bordeaux2, Bordeaux3], {onEachFeature: onEachFeature}, {style: style}).addTo(map);
(我不知道哪种方式是最好的)
因此,下一步,当用户单击时,我需要放大他选择的大区域。我使用这个很棒的教程来做这件事:http://leafletjs.com/examples/choropleth.html。
除了使用e.target方法,更改只影响较小的区域之外,其他一切都很正常。
我迷路了,我不知道如何同时瞄准大的geojson或所有的小geojson…
发布于 2016-03-15 18:25:22
onEachFeature
和style
选项在L.GeoJSON
构造函数中可用,而不是在L.LayerGroup
构造函数中可用,并且它们必须在相同的选项哈希表中指定。换句话说:
var Bordeaux1 = new L.GeoJSON.AJAX("src/js/DI_Bordeaux_1.json", {onEachFeature: onEachFeature, style: style});
var Bordeaux2 = new L.GeoJSON.AJAX("src/js/DI_Bordeaux_2.json", {onEachFeature: onEachFeature, style: style});
var Bordeaux3 = new L.GeoJSON.AJAX("src/js/DI_Bordeaux_3.json", {onEachFeature: onEachFeature, style: style});
var Bordeaux = L.layerGroup([Bordeaux1, Bordeaux2, Bordeaux3]).addTo(map);
发布于 2016-03-15 18:34:48
为了能够拟合一组层的边界,不要使用L.LayerGroup
,而是使用L.FeatureGroup
:它有一个.getBounds()
method,用于计算其中所有层的范围。
然后,您可能需要小心将侦听器(实现单击时缩放到边界的侦听器)附加到哪些对象上。通过在GeoJSON组上使用onEachFeature
,您可以为每个子层附加一个侦听器,因此event.target
是单独单击的功能。
如果您将侦听器附加到GeoJSON组本身或功能组,则event.target
将成为该组(因此event.target.getBounds()
将给出所有子项的范围,而不是单个单击的子项的范围)。
如果你想知道哪个层最初是被点击的,event.layer
会给出单独的点击层。
https://stackoverflow.com/questions/36007088
复制相似问题