3D-здание Mapbox - PullRequest
       18

3D-здание Mapbox

0 голосов
/ 07 мая 2020

мой вопрос к mapbox был: - «У вас есть отличная функция с 3D-зданиями. Есть ли способ сделать только здание по выбранному адресу в 3D, а все остальное вокруг него в обычном 2D?»

и я получил ответ от mapbox: - "Наши данные о зданиях не имеют уникального идентификатора объекта, поэтому их стилизация на основе идентификатора объекта может привести к стилизации нескольких зданий с таким же идентификатором объекта. Если у вас есть собственные данные о зданиях с уникальными идентификаторами, это было бы возможно. В противном случае вам необходимо реализовать обходной путь, такой как Использование Turf, чтобы идентифицировать идентификаторы объектов здания в пределах многоугольника данных собственности, после утверждения стилизовать здание с использованием стиля заливки-выдавливания spe c для создания 3D-эффект для здания. "

Сейчас мы пытаемся реализовать описанный выше сценарий. мы предоставляем адрес здания и получаем ответ, как показано на экране ниже: - https://i.stack.imgur.com/KJKnT.png

Я вижу в документации mapbox есть способ создать 3D-здание, но мой вопрос как мы можем использовать наш ответ для создания трехмерного здания и какой будет идентификатор здания в приведенном выше ответе. как мы видим на снимке экрана ниже, есть данные geo json. как мы можем получить эти географические json данные, которые имеют тип многоугольника и геометрию c. https://i.stack.imgur.com/rwxEr.png

1 Ответ

0 голосов
/ 05 июня 2020

Чтобы сделать что-то подобное, вы можете попробовать следующие шаги:

  1. Передайте центральные координаты ответа геокодера в качестве переменной во время выполнения (обратите внимание, что если вы хотите сохранить это в базе данных, тогда вам потребуется доступ к mapbox.places-permanent конечной точке ).
  2. Сравните эти координаты с данными многоугольника в вашем настраиваемом слое здания. Вы можете сделать это сравнение, используя Turf . В качестве альтернативы вы можете использовать Mapbox Tilequery API , чтобы запросить свой пользовательский слой здания по этой координате, чтобы получить пользовательский идентификатор вашего здания.
  3. Вы можете использовать Map#setPaintProperty, чтобы установить fill-extrusion-height для этой спецификации c id.

Для вашего индивидуального вопросы, выделенные на ваших снимках экрана:

  1. "floorplan" - это имя источника, которое вы укажете самостоятельно, и на него будет ссылаться ниже в Map#addLayer.
  2. Вы не сможете сгенерировать данные Geo JSON из геокодера - вместо этого эти данные, которые будут добавлены во время выполнения, будут вашими пользовательскими данными здания, которые содержат пользовательский идентификатор для каждого здания.
  3. "room-extrusion" - это имя слоя, которое вы также укажете сами. Это идентификатор слоя, на который вы можете ссылаться в Map#setPaintProperty.
...