Понимание режимов и характеристик высоты на 3D-картах

При задании высоты для объектов на 3D-карте — таких как линии, полигоны, модели или маркеры — существует несколько факторов, которые могут повлиять на их размещение как внутри сцены, так и на то, как рендеринг сцены взаимодействует с этим объектом. В этом документе рассматривается использование параметра «AltitudeMode» на 3D-карте и способы управления высотой для объектов.

Вот как можно использовать AltitudeMode с различными типами объектов:

  • Маркеры: Marker3DElement , Marker3DInteractiveElement

    Укажите высоту над уровнем моря, а также параметры экструзии.

  • Модели: Model3DElement , Model3DInteractiveElement

    Укажите высоту точки привязки модели, которая должна использоваться вместе с ее ориентацией для правильного позиционирования в сцене.

  • Полилинии: Polyline3DElement , Polyline3DInteractiveElement

    Укажите, как высота применяется к точкам положения вдоль полилинии.

  • Многоугольники: Polygon3DElement , Polygon3DInteractiveElement

    Укажите, как высота применяется к точкам положения вдоль многоугольника.

Как используется высота в 3D-средах

При размещении точек в трехмерной сцене их конечное положение зависит от наличия захваченных трехмерных зданий или объектов, таких как деревья. Крайне важно понимать две ключевые концепции:

  • Цифровая модель рельефа (ЦМР) : Она представляет собой рельеф «голой земли». Представьте себе естественную форму местности без зданий, деревьев или других сооружений. Все территории опираются на ЦМР, которая служит основой для определения высоты земного шара (рассчитывается с использованием EGM96 ).
  • Цифровая модель поверхности (ЦМП) : Она отображает высоту «верхней поверхности», включая здания, деревья и другие сооружения. В районах, где были зафиксированы объекты (особенно в городских условиях, где здания доминируют в поле зрения), видимая поверхность будет казаться выше, чем базовый рельеф.

Различие между ЦМР (цифровой моделью рельефа) и ЦМР (цифровой моделью поверхности) имеет решающее значение для понимания того, как различные режимы высоты взаимодействуют с этими цифровыми моделями рельефа (ЦМР), поскольку расположение объектов может быть скрыто или изменено моделью поверхности. Различия показаны на диаграмме ниже:

Трехмерная карта, демонстрирующая различие между цифровой моделью рельефа (ЦМР) и цифровой моделью поверхности (ЦМП).

Когда для объектов отсутствуют данные о высоте

Если в ваших данных отсутствуют данные о высоте, или если вы используете данные из других сервисов Google, таких как Routes или Places, то часто в возвращаемой геометрии высота вообще не указывается. В таких случаях для размещения объекта в сцене необходимо тщательно выбрать AltitudeMode :

  • Прикрепите его к земле : самый простой подход, при котором объект автоматически подстроится под рельеф местности. В этом режиме используется цифровая модель рельефа (ЦМР).
  • Задайте произвольную высоту + относительный режим : вы можете назначить выбранную высоту, а затем использовать RELATIVE_TO_GROUND (который размещает объекты относительно модели ЦМР) или RELATIVE_TO_MESH (который размещает их над моделью ЦМР).
  • Для получения высоты используйте другой сервис : Чтобы получить точную высоту цифровой модели рельефа (ЦМР) в месте расположения объекта, вы можете использовать такой сервис, как API высот платформы Google Maps. Если это линия или многоугольник, вам потребуется сделать это для каждой из точек, составляющих эту линию или многоугольник.

Что означают параметры AltitudeMode и когда их следует использовать?

При определении объекта можно указать четыре параметра AltitudeMode :

АБСОЛЮТНЫЙ

Представьте себе самолет, летящий на определенной высоте над уровнем моря, скажем, 10 000 футов. Его высота постоянна, независимо от того, летит он над горой или над долиной.

Как это использовать : Высота объекта выражается относительно среднего уровня моря (рассчитывается с использованием EGM96). Координата высоты объекта интерпретируется как точная высота над средним уровнем моря.

Когда его использовать : Для объектов с известной, точной высотой, таких как траектории полетов, подводные объекты с точно заданной глубиной или стационарные научные приборы.

CLAMP_TO_GROUND

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

Как это использовать : Высота объекта указывается как высота, измеренная непосредственно на земле. Объекты будут оставаться на уровне земли, следуя рельефу местности, независимо от предоставленного значения высоты. Координаты высоты объекта игнорируются; они проецируются непосредственно на поверхность местности (ЦМР).

Когда его использовать : Для элементов, которые всегда должны соответствовать рельефу местности, таких как дороги, заборы, тропы, границы участков или основания зданий.

ОТНОСИТЕЛЬНО ЗЕМЛИ

Представьте себе воздушный шар, который находится на высоте 100 метров над уровнем естественной рельефа местности. Если земля поднимается, шар поднимается вместе с ней, сохраняя это 100-метровое расстояние от «голой земли».

Как это использовать : Высота объекта выражается относительно поверхности земли (ЦМР). Координата высоты объекта интерпретируется как смещение относительно высоты местности в его горизонтальном положении.

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

ОТНОСИТЕЛЬНО СЕТКИ

Это похоже на беспилотник, летящий на фиксированной высоте над тем, над чем он пролетает, будь то голая земля, крыша здания или верхушка дерева. Он подстраивается под самую высокую видимую поверхность (DSM).

Как это использовать : Высота объекта выражается относительно самой высокой точки на карте поверхности земли, здания и воды (ЦМР). Координата высоты объекта интерпретируется как смещение относительно высоты ЦМР.

Когда использовать : Для объектов, которые должны парить на определенной высоте над физически существующей сценой (цифровая модель рельефа, здания, вода), полезно для маркеров на крышах или элементов, которые динамически подстраиваются под видимую сцену.

Для получения более подробной информации см. документацию по константам AltitudeMode .

Наглядные примеры и практическое применение

В этих примерах используется конкретное место, Стоунхендж, чтобы проиллюстрировать, как различные параметры AltitudeMode влияют на размещение объектов. В этих примерах сначала рассматривается позиционирование маркеров, затем линий и областей, для которых существует несколько различных нюансов.

Маркеры позиций

Рассмотрим маркер, расположенный следующим образом:

const markerLocation = { lat: 51.1789, lng: -1.8262, altitude: 102.23 };

На изображении ниже это обозначено белой булавкой:

Трехмерная карта с белым маркером, иллюстрирующая стандартное расположение маркера.

Теперь взгляните на изображение ниже, на котором показаны значки разных цветов, расположенные с использованием различных режимов высоты.

Трехмерная карта, отображающая множество меток (белых, фиолетовых, оранжевых, синих), расположенных с использованием различных режимов высоты, все они центрированы вокруг Стоунхенджа.

Давайте рассмотрим, как различные AltitudeMode влияют на позиционирование маркера в порядке возрастания высоты.

CLAMP_TO_GROUND (Фиолетовый контакт)

Этот штифт игнорирует значение высоты и прикрепляется к ближайшей точке на местности. Его можно увидеть чуть ниже белого штифта, фактически «закрепляющегося» на поверхности земли.

Технически, в этом режиме фактическая высота игнорируется, и значение на штифте фиксируется на ближайшей высоте, соответствующей цифровой модели рельефа.

АБСОЛЮТ (Белая булавка)

Этот маркер использует точное значение высоты (102,23 м), чтобы разместить метку на этой высоте над уровнем моря (EGM96), расположив ее на вершине одного из камней Стоунхенджа в соответствии с указанной высотой.

Технически, в этом режиме используется фактическое заданное значение высоты для размещения метки на указанной высоте над уровнем моря, которая в данном примере соответствует местоположению Стоунхенджа, но на вершине одного из камней.

ОТНОСИТЕЛЬНО ЗЕМЛИ (Оранжевый контакт)

Эта булавка опирается на землю (цифровую модель рельефа) и располагается на высоте 102,23 м над уровнем земли, создавая впечатление, будто она парит над естественным грунтом под камнем в хендже.

Технически, в этом режиме базовая точка устанавливается на уровне фактической цифровой модели рельефа на местности, а затем метка располагается на высоте 102,23 м над ней.

ОТНОСИТЕЛЬНО СЕТКИ (Синяя метка)

Этот штифт использует видимую поверхность (DSM) в качестве основания и располагается на высоте 102,23 м над этой поверхностью. В этом режиме измерения учитывается высота камня, поэтому он расположен немного выше, чем оранжевый штифт.

Технически, этот режим использует сетку (DSM) в качестве основы и размещает местоположение на заданной высоте над ней. Поскольку DSM находится в верхней части стоящего камня, этот пин включает эту дополнительную высоту в свои измерения при определении своей относительной высоты, выравнивая его немного выше, чем пин RELATIVE_TO_GROUND.

Линии и области позиционирования

Для линий и областей решающее значение имеют как высота точек внутри объекта (указанная или нет), так и используемый AltitudeMode ). Рассмотрим линию вдоль Стоунхенджа со следующими заданными высотами:

const lineCoords = [
   { lat: 51.1786, lng : -1.8266, altitude: 101.36 },
   { lat: 51.1787, lng : -1.8264, altitude: 101.18 },
   { lat: 51.178778, lng : -1.826354, altitude: 104.89 },
   { lat: 51.178815, lng : -1.826275, altitude: 107.55 },
   { lat: 51.178923, lng : -1.825980, altitude: 105.53 },
   { lat: 51.1791, lng : -1.8258, altitude: 100.29 },
   { lat: 51.1792, lng : -1.8257, altitude: 100.29 }
];

На изображении ниже эта линия представлена ​​белым цветом с использованием абсолютного позиционирования.

Трехмерная карта, на которой с помощью абсолютного позиционирования нанесена белая линия вокруг Стоунхенджа.

На изображении ниже еще раз показаны линии, отображаемые в разных режимах высоты. Давайте обсудим каждый из них по очереди, от самой низкой до самой высокой точки.

Трехмерная карта, отображающая множество цветных линий (фиолетовых, белых, оранжевых, синих), расположенных вокруг Стоунхенджа с использованием различных режимов отображения высоты.

CLAMP_TO_GROUND (Фиолетовая линия)

Эта линия игнорирует заданную высоту для каждой точки и вместо этого «накладывается» непосредственно на нижележащую земную поверхность (цифровую модель рельефа). Она следует рельефу местности, игнорируя наличие каких-либо объектов, таких как здания или камни, расположенные над ней.

Технически, этот режим игнорирует фактические значения высоты и накладывает линию на цифровую модель рельефа, следуя за нижележащим рельефом и игнорируя сетку объектов над ним.

АБСОЛЮТНЫЙ (Белая линия)

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

Технически, этот режим следует заданной высоте для каждой точки, соединяя их прямыми линиями, что означает, что он может проходить сквозь сетку (например, камни), если этого требуют значения высоты. Этот сценарий рассматривается в последующем разделе.

ОТНОСИТЕЛЬНО ЗЕМЛИ (Оранжевая линия)

Эта линия использует в качестве основы естественную модель рельефа (ЦМР) и размещает каждую точку на заданной высоте над уровнем земли.

Технически, в этом режиме в качестве основы используется цифровая модель рельефа (ЦМР), а точки расположения линий размещаются на указанной высоте относительно неё.

ОТНОСИТЕЛЬНО СЕТКИ (синяя линия)

Эта линия использует видимую поверхность, включая здания и камни, в качестве своей основы. Затем она размещает каждую точку на заданной высоте над этой сеткой, эффективно воспроизводя форму линии относительно видимого ландшафта.

Технически, в этом режиме в качестве основы используется сетка (цифровая модель рельефа), а точки на карте размещаются на заданной высоте над ней; в зависимости от сетки линия может изменяться с учетом различных особенностей местности.

Когда высота не указана для линий

Теперь рассмотрим те же координаты линии, но без указания высоты:

const lineCoords = [
   { lat: 51.1786, lng : -1.8266 },
   { lat: 51.1787, lng : -1.8264 },
   { lat: 51.178778, lng : -1.826354 },
   { lat: 51.178815, lng : -1.826275 },
   { lat: 51.178923, lng : -1.825980 },
   { lat: 51.1791, lng : -1.8258 },
   { lat: 51.1792, lng : -1.8257 }
];

В этом сценарии, когда высота не указана, линии часто располагаются в схожих местах. Белая, оранжевая и фиолетовая линии могут сливаться в одну (оранжевая, поскольку обычно рисуется последней), так как все они по умолчанию находятся на схожем уровне земли. Это можно увидеть ниже:

Трехмерная карта, показывающая несколько цветных линий (оранжевую, синюю) вокруг Стоунхенджа, причем белые и фиолетовые линии сливаются из-за отсутствия данных о высоте.

Синяя линия ( RELATIVE_TO_MESH ) снова использует сетку (DSM) в качестве основы. Поскольку высота не указана, она просто накладывает точки непосредственно на сетку. Важно отметить, что линия не накладывается на сетку, а соединяет указанные точки на сетке прямыми линиями. Хотя в некоторых примерах это может выглядеть приемлемо, это может вызвать проблемы с видимостью, если линия перекрывается другими элементами. Эта проблема рассматривается в следующем разделе.

Взаимодействие сеток и линий. Теперь мы можем рассмотреть другую полилинию. Это изображение находится в той же области, но с большей площадью покрытия (или большей детализацией на ЦМР поверх ЦМР).

const lineCoords = [
    { lat: 51.188404, lng: -1.779059, altitude: 70.69 },
    { lat: 51.187955, lng: -1.780143, altitude: 77.25 },
    { lat: 51.187658, lng: -1.781552, altitude: 68.97 },
    { lat: 51.187376, lng: -1.782447, altitude: 99.02 },
    { lat: 51.186912, lng: -1.783692, altitude: 104.35 },
    { lat: 51.185855, lng: -1.788368, altitude: 86.91 },
];

Если мы посмотрим на изображение, созданное с использованием тех же методов (и цветов), что и раньше, то получим следующее:

Трехмерная карта, отображающая множество цветных линий (фиолетовую, белую, оранжевую, синюю) на местности с деревьями и различной высотой.

Фиолетовым цветом обозначена точка CLAMP_TO_GROUND , которая проходит вдоль земли. Белым цветом обозначена точка ABSOLUTE, где прямые линии соединяют точки, расположенные абсолютно в пространстве. Оранжевый и синий цвета представляют собой относительные версии либо относительно SURFACE (DTM), либо MESH (DSM). Обратите внимание, что синяя линия немного отличается по форме из-за высоты расположенных ниже объектов.

Опять же, мы можем отметить, что особенность создания линии заключается в том, что она проходит через сетку, поскольку точки соединены прямыми линиями. В этом случае могут возникнуть проблемы с отображением линий, поэтому вы можете установить drawsOccludedSegments в значение true , чтобы убедиться, что линия видна сквозь деревья, как показано более подробно на следующем изображении, где линии, проходящие через сетку, все еще видны.

Трехмерная карта, показывающая линии, проходящие через деревья, с видимыми скрытыми сегментами для иллюстрации их перекрытия: true.

Особенности позиционирования в пространстве означают, что точки могут попадать внутрь сетки, а также линии, соединяющие точки, могут попадать в сетку, потенциально вызывая визуальные артефакты. В разделе ниже мы рассмотрим, как можно уменьшить подобные артефакты, где это возможно.

Решение проблем, возникающих при взаимодействии линий и рельефа местности.

В другом примере, в той же области, мы можем увидеть некоторые другие артефакты, о которых следует помнить при использовании определенных режимов съемки на заданную высоту.

Здесь мы видим относительно ровную местность, которая в основном находится на уровне цифровой модели рельефа (ЦМР), с ограниченным количеством дополнительных деталей в сетке выше неё. Подобная ситуация также имела бы место в районе, где отсутствует 3D-покрытие выше модели рельефа. Рассмотрим следующее местоположение, как указано ниже:

const lineCoords = [
   { lat: 51.194642, lng: -1.782636, altitude: 99.10 },
   { lat: 51.193974, lng: -1.783952, altitude: 99.86 },
   { lat: 51.192203, lng: -1.787175, altitude: 96.14 },
   { lat: 51.190024, lng: -1.790250, altitude: 105.92 },
   { lat: 51.187491, lng: -1.793580, altitude: 102.60 },
   { lat: 51.183690, lng: -1.798745, altitude: 95.69 },
];

Как видно на изображении, линии имеют то же цветовое обозначение, что и раньше: (белый: АБСОЛЮТНОЕ ЗНАЧЕНИЕ, синий: ОТНОСИТЕЛЬНО СЕТКИ, фиолетовый: ПРИЖИМ К ЗЕМЛЕ, оранжевый: ОТНОСИТЕЛЬНО ЗЕМЛЕ).

Трехмерная карта, отображающая линии различных цветов (белые, синие, фиолетовые, оранжевые) на относительно ровной местности, с выделением визуальных артефактов в местах, где линии уходят в землю.

Здесь мы видим ряд артефактов, первый из которых заключается в том, что из-за отсутствия поверхностного покрытия оранжевая (относительно земли) и синяя (относительно сетки) линии находятся (по большей части) в одном и том же месте (причем синяя линия показана последней).

Мы также видим, что фиолетовая линия (CLAMP_TO_GROUND) следует за землей и видна на холме, в то время как белая линия (ABSOLUTE) как бы исчезает в холме, поскольку соединены только точки, а прямые линии проходят через землю.

Это особенно хорошо видно на этом изображении, когда фиолетовая линия скрыта.

Трехмерная карта, на которой белые и синие линии исчезают в холме, а фиолетовая линия скрыта, иллюстрирующая визуальные артефакты абсолютных и относительных относительно сетки линий.

Это может привести к странным визуальным артефактам, когда линия может исчезать под землей (или даже проходить сквозь сетку), поскольку линия между точками просто следует прямой траектории. Возможно, вы сможете улучшить визуальное отображение такой линии, добавив больше точек между линиями с помощью метода интерполяции, однако то, как это повлияет на визуальное восприятие, будет зависеть от используемого метода.

  • Для относительных измерений (RELATIVE_TO_GROUND или RELATIVE_TO_MESH) : При использовании значений относительной высоты создание большего количества точек вдоль линии или многоугольника позволит разместить объект на более подходящем уровне, лучше соответствующем профилю высот. Если эти промежуточные точки отсутствуют в ваших данных, вы можете использовать функцию интерполяции, например, функцию Interpolate из библиотеки Geometry платформы Google Maps, чтобы добавить их. Затем этим новым точкам можно присвоить относительные значения, которые будут размещены выше соответствующего профиля высот, после чего длина любой линии, соединяющей точки, будет ограничена, а визуальное представление улучшено.
  • Для абсолютных объектов (ABSOLUTE) : Для абсолютных объектов потребуется больше точек с фактическими значениями высоты. Интерполяция между существующими абсолютными значениями не даст точки, точно отражающей любое значение выше сетки, поскольку это будет просто среднее значение между точкой A и точкой B.

Краткое содержание

Надеемся, этот документ предоставил вам исчерпывающий обзор параметров AltitudeMode в фотореалистичных 3D-картах, подробно описав, как параметры ABSOLUTE, CLAMP_TO_GROUND, RELATIVE_TO_GROUND и RELATIVE_TO_MESH влияют на размещение и рендеринг различных объектов, таких как маркеры, линии и полигоны.

Понимание того, как эти режимы взаимодействуют с базовой цифровой моделью рельефа (ЦМР) и цифровой моделью поверхности (ЦМП), имеет решающее значение для создания точных и визуально привлекательных трехмерных карт с минимальным количеством визуальных артефактов.

Мы надеемся, что вы поэкспериментируете с этими режимами высоты в своих проектах, чтобы раскрыть весь потенциал 3D-картографирования и создать захватывающие, иммерсивные впечатления для ваших пользователей, а также предоставить обратную связь.

Авторы

Мэтт Тун | Инженер по решениям, специалист по разработке географических решений