我正在尝试显示跨越第 180 条子午线的 geoJSON 对象(在本例中为俄罗斯的轮廓)。目前,该国家/地区的一部分显示在地图的左侧,一部分显示在右侧:
看看传单,似乎有一个解决方案,但这似乎不起作用:https://github.com/Leaflet/Leaflet/issues/82 https://github.com/Leaflet/Leaflet/issues/82。我也尝试过添加coordsToLatLng 函数 http://leafletjs.com/reference.html#geojson-coordstolatlng但似乎也无法让它发挥作用。瓷砖层有一个continuousWorld
我认为该选项不适用于 geoJSON 对象。
该数据在这里:https://dl.dropboxusercontent.com/u/12085570/RUS.json https://dl.dropboxusercontent.com/u/12085570/RUS.json。数据从 shapefile 生成到 geojson,最后生成 topojson。转换我使用的topojson--no-stitch-poles
选项可以让其在地图上“很好地”显示,这意味着它不会将地图右侧的点连接到左侧。
有没有办法让它显示为连续对象而不在子午线周围分裂?
我遇到了同样的问题,我的解决方案涉及利用以下几件事:
1) Leaflet 允许您放置超出 180/-180 经度的元素。
2) 穿过反子午线的地理体几乎全部包含负经度坐标或正经度坐标。
我的解决方案是使用递归函数遍历 geoJSON 对象内的坐标数组,并且对于俄罗斯,将负坐标值转换为等效的正值。例如,值 -175 将转换为 185。
下面是我用来处理坐标数组的函数。我将其用于东半球的位置 - 您必须修改转换才能使用西半球的位置。
antimeridian(elem: any) {
if (Array.isArray(elem)) {
for (var i = 0; i < elem.length; i++) {
if (Array.isArray(elem[i][0])) {
this.antimeridian(elem[i]);
} else {
if (elem[i][0] < 0) {
elem[i][0] = 180 + (180 + elem[i][0]);
}
}
}
}
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)