Как отобразить (антимеридские) векторные листы, сгенерированные geojson-vt, в листовке с использованием L.CRS.Simple? - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть простые данные 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 голосов
/ 25 декабря 2018

Я рекомендую вам прочитать это: https://macwright.org/2016/09/26/the-180th-meridian.html

Цитирование рекомендованного решения спецификации GeoJSON:

При представлении объектов, которые пересекают антимеридиан, совместимость улучшается путем изменения их геометрии.Любая геометрия, которая пересекает антимеридиан, ДОЛЖНА быть представлена ​​разрезанием ее на две части так, чтобы ни одна из частей не пересекала антимеридиан.- GeoJSON Spec, 3.1.9

...