4

我有一个 GeoJSON 简单数据,我需要使用 L.CRS.Simple crs 在传单地图上显示,因为它是反子午线数据,有时,坐标可以是 [450,389](超过 180)

这是非常简单的 GeoJSON:

{
  "type": "FeatureCollection",
  "name": "entities",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "Layer": "0",
        "SubClasses": "AcDbEntity:AcDbPolyline",
        "EntityHandle": "1F9",
        "style": "PEN(c:#FF0000)"
      },
      "geometry": {
        "type": "LineString",
        "coordinates": [
          [
            0,
            0
          ],
          [
            0,
            150
          ],
          [
            150,
            150
          ],
          [
            150,
            0
          ],
          [
            0,
            0
          ]
        ]
      }
    }
  ]
}

使用geojson-vt,(演示页面)我得到这个矩形: 在此处输入图像描述

我对 geojson-vt lib 做了一些修改:

投影功能:

function projectX(x, simple, projectionFactor) {
    return x / 256 + 1;
}

function projectY(y, simple, projectionFactor) {
    return - y / 256 + 0.5;
}

我添加了GeoJSONVT.prototype.getTile这一行:

y = y + (1 << (z - 1)); // xy map

结果是(标记放置在 [0,0],[150,0],[150,150],[0,150] 上):

在此处输入图像描述

有什么建议吗?为什么我在这里失去瓷砖?

4

1 回答 1

0

我建议您阅读以下内容:https ://macwright.org/2016/09/26/the-180th-meridian.html

引用 GeoJSON 规范推荐的解决方案:

在表示穿越反子午线的要素时,通过修改其几何形状来提高互操作性。任何穿过反子午线的几何体都应该通过将其分成两部分来表示,这样任何部分的表示都不会穿过反子午线。- GeoJSON 规范,3.1.9

于 2018-12-25T17:16:29.430 回答