Как указать идентификатор объекта для набора листов в индоформатах Azure?

#azure-maps

Вопрос:

Я следовал учебнику Azure Indoor Maps Creator здесь, но использовал скрипт python из другого репозитория здесь, чтобы упростить загрузку файлов карт. В принципе, почтальон не требуется.

Образец подключает обработчик levelchanged событий и выводит данные о событиях на консоль. Данные события для facilityId всегда FCL13 есть . Я нигде не могу найти, где указаны эти данные. Ни в скрипте python, ни в образце zip-файла данных manifest.json, ни в файлах DWG (с моей ограниченной возможностью их просмотра).

Я предполагаю, что я должен быть в состоянии указать, для какого объекта я загружаю данные, чтобы либо ожидать, что вызовы API будут предоставлены этим (из сценария python), либо это должны быть какие-то метаданные в файлах DWG.

Мое намерение состояло в том, чтобы загрузить карты этажей более чем одного здания, поэтому необходимо, чтобы объект был настроен. Наличие определенных наборов листов, связанных с различными объектами, позволяет мне узнать, какой уровень объекта был изменен во время события с изменением уровня.

Где находятся данные facilityId, указанные для конкретной загрузки данных карты?

Ответ №1:

Все идентификаторы (facilityId, levelId, UnitID и т.д.) Генерируются при создании набора данных. Эти идентификаторы не предназначены для установки вручную.

Можно указать идентификаторы объектов, загруженные на карту, вместе с их именами, информацией об адресе и т.д., Которые были предоставлены в файле manifest.json.

Примечание: Похоже, что в источнике «indoorTiles» отсутствует метод getShapes (), поэтому для запроса базового поля карты требуется обходной путь.

 map._getMap().querySourceFeatures('indoorTiles', {sourceLayer: 'Indoor facility'});
 

Из документации Mapbox по querySourceFeatures():

Поскольку объекты берутся из векторных данных плиток или данных GeoJSON, которые внутренне преобразуются в плитки, геометрия объектов может быть разделена или дублирована по границам плиток, и в результате объекты могут появляться несколько раз в результатах запроса.

Комментарии:

1. Я не так уверен в отношении facilityId @mbelt. Я загрузил 2 молнии dwg (образец и еще одну, измененную для разных привязок gps, чтобы не было географического перекрытия). Это приводит к 2 разным идентификаторам набора таблиц, как и ожидалось. Если я выполняю тест, используя каждый tilesetId отдельно, событие levelchanged, которое срабатывает, всегда имеет значение FCL13. Если это сгенерировано, как вы говорите, я бы спросил, почему это всегда одно и то же значение и почему именно «…13»? Могу я спросить, где вы черпаете информацию для своего ответа, пожалуйста?

2. Я попытался использовать ваш getShape, чтобы посмотреть на VectorTileSource, и, к сожалению, метод не определен в исходном экземпляре, возвращенном из «indoorTiles». Я также поместил свой код в setTimeout, чтобы быть уверенным, что получаю исходный экземпляр для идентификатора indoorTiles, и даже перечислил все методы этого объекта. Форма не определена. Я могу только предположить, что это не VectorTileSource, или документ для этого типа неверен.

3. Вы правы. Похоже, что этот источник на самом деле не является «векторным слоем», это что-то другое. В качестве запасного варианта можно перейти непосредственно к базовому картографическому блоку, чтобы получить доступ к источнику вектора. map._getMap().querySourceFeatures('indoorTiles', {sourceLayer: 'Indoor facility'}) Функции GeoJSON, возвращаемые этим, будут обладать свойствами, которые вы ищете.

4. Что касается «13», просто замечание о том, что числовая часть id в наборе данных, по-видимому, уникальна для всех функций, независимо от типа. Объект должен быть 13-м объектом, обрабатываемым при построении набора данных на основе преобразования DWG.