我正在尝试显示跨越第180个子午线的geoJSON对象(在本例中为俄罗斯的轮廓)。目前,这部分国家/地区位于地图左侧,部分位于右侧:
看一下传单,似乎有一个解决办法,但这似乎不起作用:https://github.com/Leaflet/Leaflet/issues/82。我还尝试添加coordsToLatLng function,但似乎无法让它发挥作用。平铺图层有一个continuousWorld
选项,我认为它不适用于geoJSON对象。
此数据位于:https://dl.dropboxusercontent.com/u/12085570/RUS.json。数据从shapefile生成到geojson,最后生成到topojson。转换topojson我使用--no-stitch-poles
选项让这个显示"很好地"在地图上意味着它没有将地图右侧的点连接到地图的左侧。
有没有办法让它作为一个连续的物体显示而不会在子午线周围分裂?
答案 0 :(得分:1)
我遇到了同样的问题,我的解决方案涉及利用以下几点: 1)Leaflet允许您放置超过180 / -180经度的元素。 2)穿过antimeridian的地理体主要包含所有负或正经度坐标。
我的解决方案是使用递归函数遍历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]);
}
}
}
}
};