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

Rob*_*Rob 10 map geojson leaflet topojson

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

俄罗斯和第180经络

看看传单,似乎有一个修复,但似乎不起作用:https://github.com/Leaflet/Leaflet/issues/82.我也试过添加一个coordsToLatLng函数,但似乎无法让它工作.平铺图层有一个continuousWorld我认为不适用于geoJSON对象的选项.

此数据位于:https://dl.dropboxusercontent.com/u/12085570/RUS.json.数据从shapefile生成到geojson,最后生成到topojson.转换topojson我使用的--no-stitch-poles选项让它在地图上显示"很好",这意味着它不会将右边的点连接到地图的左侧.

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

jca*_*pia 3

我遇到了同样的问题,我的解决方案涉及利用以下几件事: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]);
         }
       }
     }
   }
 };
Run Code Online (Sandbox Code Playgroud)