【问题标题】:Display GeoJSON with leaflet that spans the 180th meridian使用跨越 180 条子午线的传单显示 GeoJSON
【发布时间】:2014-03-27 19:23:35
【问题描述】:

我正在尝试显示跨越 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 选项,它可以在地图上“很好地”显示,这意味着它不会将地图右侧的点连接到地图的左侧。

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

【问题讨论】:

    标签: map leaflet geojson topojson


    【解决方案1】:

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

    【讨论】:

    • 我完全同意。我没有看到其他方法可以做到这一点。我绘制了从温哥华到日本的船舶航路图,所以反过来做:将 140E 到 180E 范围内的经度设为负值,而不是将负经度设为正值,但任何一种方式都有效。
    • 加载 GeoJSON 文件时如何使用它?
    猜你喜欢
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多