如何使用L.CRS.Simple在传单中显示geojson-vt生成的(后代)矢量图块?

时间:2018-12-18 16:28:58

标签: javascript leaflet geojson 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
          ]
        ]
      }
    }
  ]
}

使用geojson-vt(演示页面),我得到了这个矩形: enter image description here

我对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]上):

enter image description here

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

1 个答案:

答案 0 :(得分:0)

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

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

  

在表示跨越时空的要素时,通过修改其几何形状可提高互操作性。横越等轴线的任何几何图形都应通过将其切成两部分来表示,以使零件的表示都不会越过等轴线。 -GeoJSON Spec, 3.1.9