如何使用 L.CRS.Simple 在传单中显示由 geojson-vt 生成的(反子午线)矢量图块?

C.P*_*P.O 5 javascript geojson leaflet vector-tiles

我有一个 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
          ]
        ]
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

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

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

投影功能:

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

function projectY(y, simple, projectionFactor) {
    return - y / 256 + 0.5;
}
Run Code Online (Sandbox Code Playgroud)

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

y = y + (1 << (z - 1)); // xy map
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

有什么建议吗?为什么我这里的瓷砖掉了?

小智 0

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

\n

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

\n
\n

在表示跨越反子午线的要素时,通过修改其几何形状可以提高互操作性。任何穿过反子午线的几何图形都应该通过将其切成两半来表示,这样任何一个部分\xe2\x80\x99s 表示都不会穿过反子午线。- GeoJSON 规范,3.1.9

\n
\n