使用横跨第180个子午线的传单显示GeoJSON

时间:2014-03-27 19:23:35

标签: map leaflet geojson topojson

我正在尝试显示跨越第180个子午线的geoJSON对象(在本例中为俄罗斯的轮廓)。目前,这部分国家/地区位于地图左侧,部分位于右侧:

russia and the 180th meridian

看一下传单,似乎有一个解决办法,但这似乎不起作用: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选项让这个显示"很好地"在地图上意味着它没有将地图右侧的点连接到地图的左侧。

有没有办法让它作为一个连续的物体显示而不会在子午线周围分裂?

1 个答案:

答案 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]);
         }
       }
     }
   }
 };