scala для векторных плиток mapbox — получение поля «id» для объектов, записанных в векторные плитки

#scala #vector-tiles #geotrellis

#scala #векторные плитки #geotrellis

Вопрос:

Я пишу векторные плитки MapBox, используя geotrellis vectorpipe.

смотрите здесь для основного потока:https://geotrellis.github.io/vectorpipe/usage.html

Обычно объекты GeoJSON могут иметь id поле, так что объекты могут быть объединены в FeatureCollections. Мне нужно использовать это поле, но vectorpipe не имеет (изначально) такой возможности.

Это используемый Feature тип, и вы можете видеть, что в нем есть место только для 1) объекта данных Geometry и 2) объекта данных D (который в конечном итоге заполняется properties в выходных данных). Для id нет места.

https://geotrellis.github.io/scaladocs/latest/index.html#geotrellis.vector.Функция

Выше по потоку есть метод с именем writeFeatureJsonWithID() , который позволяет вводить id поле в Feature при написании GeoJSON.

https://github.com/locationtech/geotrellis/blob/master/vector/src/main/scala/geotrellis/vector/io/json/FeatureFormats.scala#L41-L49

Мой вопрос заключается в следующем:

Я проработал код vectorpipe (https://github.com/geotrellis/vectorpipe ), и я не могу выяснить, существуют ли данные когда-либо в виде GeoJSON таким образом, чтобы я мог переопределить и внедрить id , возможно, используя writeFeatureJsonWithID() или что-то, что я пишу явно. Многие преобразования являются неявными, но они также могут никогда явно не отображаться как json.

Есть идеи о том, как получить id поле в окончательном GeoJSON, записанном в векторные плитки?

Редактировать

Прямо сейчас я думаю, что хитрость заключается в том, чтобы найти способ переопределить .unfeature() метод здесь:

https://github.com/locationtech/geotrellis/blob/master/vectortile/src/main/scala/geotrellis/vectortile/Layer.scala

Проблема в том, что internal.vector_tile.Tile является частным, поэтому я могу создать его без разветвления проекта.

Ответ №1:

В итоге пришлось раскошелиться на geotrellis, жестко запрограммировать metadata => id функцию в Layer.unfeature() и скомпилировать локально для включения в мой проект. Не идеально, но работает нормально.

Здесь также возникла проблема:https://github.com/locationtech/geotrellis/issues/2884