Tryby i funkcje wysokości w mapach 3D

Gdy określasz wysokość obiektów na mapie 3D, takich jak linie, wielokąty, modele czy znaczniki, na ich umiejscowienie może wpływać kilka czynników, zarówno w obrębie sceny, jak i w sposób, w jaki renderowanie sceny współdziała z danym obiektem. Ten dokument opisuje użycie 'AltitudeMode' na mapie 3D oraz zarządzanie wysokością obiektów.

Oto jak możesz używać AltitudeMode z różnymi typami obiektów:

Jak wysokość jest używana w środowiskach 3D

Gdy umieszczasz punkty w scenie 3D, na ich ostateczną pozycję wpływa obecność zarejestrowanych budynków 3D lub obiektów, takich jak drzewa. Kluczowe jest zrozumienie 2 pojęć:

  • Numeryczny model terenu (NMT): przedstawia wysokość „gołej ziemi”. Można go traktować jako naturalny kształt terenu bez żadnych budynków, drzew ani innych struktur. Wszystkie obszary są oparte na modelu DTM, który stanowi podstawę wysokości globu (obliczanej za pomocą EGM96).
  • Cyfrowy model powierzchni (DSM): przedstawia wysokość „górnej powierzchni”, w tym budynków, drzew i innych struktur. Na obszarach, na których zostały zarejestrowane obiekty (zwłaszcza w środowiskach miejskich, gdzie budynki dominują w widoku), widoczna powierzchnia będzie wydawać się wyższa niż teren bazowy.

Rozróżnienie między DTM a DSM jest kluczowe dla zrozumienia, jak różne tryby wysokości współdziałają z tymi cyfrowymi modelami wysokości (DEM), ponieważ na umiejscowienie obiektów może wpływać model powierzchni lub może ono być przez niego zasłonięte. Różnice możesz zobaczyć na poniższym diagramie:

Mapa 3D pokazująca różnicę między cyfrowym modelem terenu (DTM) a cyfrowym modelem powierzchni (DSM).

Gdy obiekty nie mają danych o wysokości

Jeśli masz dane, które nie zawierają pomiaru wysokości, lub gdy używasz danych z innej usługi Google, np. Routes lub Places, często w zwracanej geometrii nie będzie podana wysokość. W takich przypadkach umieszczenie funkcji w scenie wymaga starannego wyboru AltitudeMode:

  • Przypięcie do podłoża: najprostsze podejście, w którym element automatycznie dopasowuje się do terenu. Ten tryb korzysta z modelu DTM.
  • Podaj dowolną wysokość i tryb względny: możesz przypisać wybraną wysokość, a następnie użyć trybu RELATIVE_TO_GROUND (który umieszcza elementy względem modelu DTM) lub RELATIVE_TO_MESH (który umieszcza je nad modelem DSM).
  • Użyj innej usługi, aby uzyskać wysokość: aby uzyskać dokładną wysokość DTM w lokalizacji elementu, możesz użyć usługi takiej jak Elevation API w Google Maps Platform. Jeśli jest to linia lub wielokąt, musisz to zrobić dla każdego z punktów, które tworzą linię lub wielokąt.

Co oznaczają opcje AltitudeMode i kiedy ich używać?

Podczas definiowania funkcji możesz określić 4 opcje AltitudeMode:

ABSOLUTE

Wyobraź sobie samolot lecący na określonej wysokości nad poziomem morza, np. 3000 metrów. Wysokość jest stała, niezależnie od tego, czy samolot leci nad górą czy nad doliną.

Jak używać: wysokość obiektu jest wyrażana względem średniego poziomu morza (obliczanego za pomocą modelu EGM96). Współrzędna wysokości elementu jest interpretowana jako dokładna wysokość nad średnim poziomem morza.

Kiedy używać: w przypadku obiektów o znanej, dokładnej wysokości, takich jak tory lotu, obiekty zanurzone na określoną głębokość lub przyrządy naukowe o stałym położeniu.

CLAMP_TO_GROUND

Wyobraź sobie, że kładziesz koc piknikowy bezpośrednio na zboczu wzgórza. Niezależnie od tego, jak strome lub płaskie jest wzgórze, koc zawsze leży płasko na widocznej powierzchni.

Jak używać: wysokość obiektu jest wyrażona jako umieszczona bezpośrednio na ziemi. Pozostaną na poziomie gruntu, podążając za ukształtowaniem terenu, niezależnie od podanej wartości wysokości. Współrzędna wysokości elementu jest ignorowana. Jest on rzutowany bezpośrednio na powierzchnię terenu (DTM).

Kiedy używać: w przypadku obiektów, które powinny zawsze dopasowywać się do terenu, takich jak drogi, ogrodzenia, szlaki, granice nieruchomości czy podstawy budynków.

RELATIVE_TO_GROUND

Wyobraź sobie balon, który utrzymuje się na wysokości 100 metrów nad naturalnym poziomem gruntu (DTM). Jeśli teren się podnosi, balon również się unosi, zachowując 100-metrową odległość od „gołej ziemi”.

Jak używać: wysokość obiektu jest wyrażana względem powierzchni gruntu (DTM). Współrzędna wysokości elementu jest interpretowana jako przesunięcie względem wysokości terenu w jego położeniu poziomym.

Kiedy używać: w przypadku obiektów, które muszą zachować stałą wysokość nad naturalnym terenem, takich jak wieże komunikacyjne lub linie napowietrzne na obszarach wiejskich.

RELATIVE_TO_MESH

To tak, jakby dron leciał na stałej wysokości nad tym, nad czym się znajduje, niezależnie od tego, czy jest to goła ziemia, dach budynku czy czubek drzewa. Dostosowuje się do najwyższej widocznej powierzchni (DSM).

Jak używać: wysokość obiektu jest wyrażona względem najwyższego punktu powierzchni gruntu, budynku lub powierzchni wody (DSM). Współrzędna wysokości elementu jest interpretowana jako przesunięcie względem wysokości DSM.

Kiedy używać: w przypadku obiektów, które muszą unosić się na określonej wysokości nad tym, co fizycznie znajduje się w danym miejscu (DTM, budynki, woda). Przydatne w przypadku znaczników na dachach lub obiektów, które dynamicznie dostosowują się do widocznej sceny.

Więcej informacji znajdziesz w dokumentacji stałych AltitudeMode.

Przykłady wizualne i praktyczne zastosowania

W tych przykładach używamy konkretnej lokalizacji, Stonehenge, aby zilustrować, jak różne opcje AltitudeMode wpływają na umieszczanie obiektów. Te przykłady dotyczą najpierw znaczników pozycjonowania, a następnie linii i obszarów, które wymagają uwzględnienia kilku różnych kwestii.

Znaczniki pozycji

Weźmy na przykład znacznik pinezki umieszczony w ten sposób:

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

Możesz to zobaczyć na scenie poniżej, gdzie jest oznaczona białą pinezką:

Scena mapy 3D z białym znacznikiem pinezki, która ilustruje domyślne umieszczenie znacznika.

Teraz spójrz na obraz poniżej, który przedstawia pinezki w różnych kolorach umieszczone przy użyciu różnych trybów wysokości.

Scena mapy 3D przedstawiająca kilka pinezek (białą, fioletową, pomarańczową i niebieską) umieszczonych w różnych trybach wysokości, wszystkie wokół Stonehenge.

Przyjrzyjmy się, jak różne AltitudeMode wpływają na pozycjonowanie znacznika w rosnącej kolejności wysokości.

CLAMP_TO_GROUND (fioletowa pinezka)

Ta pinezka ignoruje wartość wysokości i przyczepia się do najbliższego wzniesienia. Możesz go zobaczyć tuż pod białą pinezką, skutecznie „przypiętą” do terenu.

Technicznie rzecz biorąc, ten tryb ignoruje rzeczywistą wysokość i przypina pinezkę do najbliższej wysokości DTM.

ABSOLUTE (biała pinezka)

Ta pinezka używa dokładnej wartości wysokości (102,23 m), aby umieścić znacznik na tej wysokości nad poziomem morza (EGM96). Pojawia się on na jednym z kamieni Stonehenge, zgodnie z podaną wysokością.

Technicznie rzecz biorąc, ten tryb wykorzystuje rzeczywistą podaną wartość wysokości, aby umieścić pinezkę na określonej wysokości nad poziomem morza, która w tym przykładzie jest lokalizacją Stonehenge, ale na szczycie jednego z kamieni.

RELATIVE_TO_GROUND (pomarańczowa pinezka)

Ta pinezka przyjmuje grunt (DTM) jako podstawę i jest umieszczona 102,23 m nad poziomem gruntu, dzięki czemu wydaje się unosić nad naturalnym gruntem, który znajduje się pod kamieniem w henge.

Technicznie rzecz biorąc, ten tryb ustawia podstawę na poziomie rzeczywistego modelu DTM na ziemi, a następnie umieszcza pinezkę na wysokości 102,23 m nad nim.

RELATIVE_TO_MESH (niebieska pinezka)

Ta pinezka używa widocznej powierzchni (DSM) jako podstawy i jest umieszczona 102,23 m nad tą powierzchnią. Ten tryb uwzględnia w pomiarze wysokość kamienia, dzięki czemu jest on wyrównany nieco wyżej niż pomarańczowa pinezka.

Technicznie rzecz biorąc, ten tryb wykorzystuje siatkę (DSM) jako podstawę i umieszcza lokalizację na podanej wysokości nad nią. Ponieważ DSM znajduje się na szczycie kamienia, ta pinezka uwzględnia tę dodatkową wysokość w pomiarze podczas określania wysokości względnej, co powoduje, że jest ona umieszczona nieco wyżej niż pinezka RELATIVE_TO_GROUND.

Linie i obszary pozycji

W przypadku linii i obszarów kluczowe znaczenie mają zarówno wysokość punktów w obiekcie (niezależnie od tego, czy jest określona), jak i używany tryb AltitudeMode. Przeanalizujmy linię wzdłuż Stonehenge z tymi określonymi wysokościami:

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 }
];

Na obrazie poniżej ta linia jest zaznaczona na biało i ma pozycjonowanie bezwzględne.

Mapa 3D przedstawiająca białą linię wokół Stonehenge, która została umieszczona za pomocą pozycjonowania bezwzględnego.

Na obrazie poniżej widać linie z różnymi trybami wysokości. Omówmy je po kolei, od najniższego do najwyższego.

Mapa 3D przedstawiająca kilka kolorowych linii (fioletowych, białych, pomarańczowych, niebieskich) wokół Stonehenge z różnymi trybami wysokości.

CLAMP_TO_GROUND (fioletowa linia)

Ta linia ignoruje określoną wysokość każdego punktu i zamiast tego „nakłada” linię bezpośrednio na podłoże (DTM). Podąża za ukształtowaniem terenu, ignorując obecność obiektów takich jak budynki czy kamienie.

Technicznie rzecz biorąc, ten tryb ignoruje rzeczywiste wartości wysokości i nakłada linię na model DTM, podążając za ukształtowaniem terenu i ignorując siatkę obiektów nad nim.

ABSOLUTE (White Line)

Ta linia wykorzystuje dokładną wysokość każdego punktu, co powoduje, że linia przechodzi nad niektórymi kamieniami. Jest ona połączona liniami prostymi między poszczególnymi punktami, co może czasami sprawiać wrażenie, że przechodzi przez obiekty, jeśli punkty nie są wystarczająco częste.

Technicznie rzecz biorąc, ten tryb podąża za określoną wysokością dla każdego punktu, łącząc je liniami prostymi, co oznacza, że może przechodzić przez siatkę (np. kamienie), jeśli wymagają tego wartości wysokości. Ten scenariusz omówimy w dalszej części.

RELATIVE_TO_GROUND (pomarańczowa linia)

Ta linia wykorzystuje naturalne ukształtowanie terenu (DTM) jako podstawę i umieszcza każdy punkt na określonej wysokości nad poziomem gruntu.

Technicznie rzecz biorąc, ten tryb wykorzystuje DTM jako podstawę i umieszcza lokalizacje linii na podanej wysokości względem niego.

RELATIVE_TO_MESH (niebieska linia)

Ta linia wykorzystuje widoczną powierzchnię, która obejmuje budynki i kamienie, jako podstawę. Następnie umieszcza każdy punkt na określonej wysokości nad tą siatką, skutecznie odtwarzając kształt linii w odniesieniu do widocznego krajobrazu.

Technicznie rzecz biorąc, ten tryb wykorzystuje siatkę (DSM) jako podstawę i umieszcza lokalizacje na określonej wysokości nad nią. W zależności od siatki linia może się zmieniać ze względu na różne obiekty na ziemi.

Gdy wysokość nie jest określona dla linii

Teraz rozważmy te same współrzędne linii, ale bez określonej wysokości:

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 }
];

W tym scenariuszu, gdy nie podano wysokości, linie często pojawiają się w podobnych lokalizacjach. Białe, pomarańczowe i fioletowe linie mogą się połączyć w jedną linię (pomarańczową, ponieważ zwykle jest rysowana jako ostatnia), ponieważ wszystkie domyślnie znajdują się na podobnym poziomie gruntu. Możesz to zobaczyć poniżej:

Mapa 3D pokazująca kilka kolorowych linii (pomarańczową, niebieską) wokół Stonehenge, z białymi i fioletowymi liniami łączącymi się z powodu braku danych o wysokości.

Niebieska linia (RELATIVE_TO_MESH) ponownie używa siatki (DSM) jako bazy. Ponieważ nie określono wysokości, punkty są nakładane bezpośrednio na siatkę. Warto pamiętać, że nie nakłada ona linii na siatkę, ale łączy określone punkty na siatce prostymi połączeniami. W niektórych przypadkach może to wyglądać dobrze, ale może powodować problemy z widocznością, gdy zostanie zasłonięte przez inne elementy. Ten problem został omówiony w następnej sekcji.

Interakcja siatek i linii. Teraz możemy przyjrzeć się innej linii łamanej. Ten obraz przedstawia ten sam obszar, ale z większym pokryciem terenu (lub bardziej szczegółowym DSM nałożonym na DTM).

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 },
];

Gdy spojrzymy na reprezentację przy użyciu tych samych metod (i kolorów) co wcześniej, otrzymamy taki widok:

Mapa 3D z kilkoma kolorowymi liniami (fioletową, białą, pomarańczową i niebieską) na terenie z drzewami i różnymi wysokościami.

Fioletowy to CLAMP_TO_GROUND, który biegnie wzdłuż ziemi. Biały to ABSOLUTE, gdzie widać, że linie proste łączą punkty, które są umieszczone bezwzględnie w przestrzeni. Pomarańczowa i niebieska linia to względne wersje dotyczące POWIERZCHNI (DTM) lub SIATKI (DSM). Zwróć uwagę, że niebieska linia ma nieco inny kształt ze względu na wysokość obiektów poniżej.

Zauważ, że sposób tworzenia linii oznacza, że przechodzi ona przez siatkę, ponieważ punkty są połączone liniami prostymi. W takiej sytuacji mogą wystąpić problemy z widocznością linii, dlatego możesz ustawić właściwość drawsOccludedSegments na true, aby linia była widoczna przez drzewa, jak pokazano na poniższym obrazie, na którym linie przechodzące przez siatkę są nadal widoczne.

Mapa 3D przedstawiająca linie przechodzące przez drzewa, z widocznymi zasłoniętymi segmentami, aby zilustrować zasłonięcie segmentów: prawda.

Ze względu na charakter pozycjonowania w przestrzeni punkty i linie łączące punkty mogą znaleźć się w siatce, co może powodować artefakty wizualne. W sekcji poniżej pokazujemy, jak można poprawić takie artefakty, jeśli jest to możliwe.

Rozwiązywanie problemów z interakcją między liniami a terenem

W innym przykładzie, na tym samym obszarze, możemy zobaczyć inne artefakty, o których musimy pamiętać, gdy używamy określonych trybów wysokości.

Tutaj mamy stosunkowo płaski obszar, który znajduje się głównie na poziomie DTM, z ograniczoną liczbą dodatkowych szczegółów powyżej w siatce. Ten scenariusz miałby również miejsce na obszarze, który nie ma pokrycia 3D powyżej modelu terenu. Przyjrzyjmy się tej lokalizacji:

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 },
];

Można to zobaczyć na obrazie, na którym linie mają takie same kolory jak wcześniej: (biały : ABSOLUTE, niebieski : RELATIVE_TO_MESH, fioletowy : CLAMP_TO_GROUND, pomarańczowy: RELATIVE_TO_GROUND).

Mapa 3D przedstawiająca różne kolorowe linie (białe, niebieskie, fioletowe, pomarańczowe) na stosunkowo płaskim terenie, z wyróżnionymi artefaktami wizualnymi, w których linie znikają w ziemi.

Widzimy tu kilka artefaktów. Pierwszy z nich wynika z braku pokrycia powierzchni, przez co pomarańczowa linia (RELATIVE_TO_GROUND) i niebieska linia (RELATIVE_TO_MESH) znajdują się (głównie) w tym samym miejscu (niebieska linia jest widoczna, ponieważ została narysowana jako ostatnia).

Widać też, że fioletowa linia (CLAMP_TO_GROUND) podąża za ukształtowaniem terenu i jest widoczna na wzgórzu, natomiast biała linia (ABSOLUTE) znika we wzgórzu, ponieważ połączone są tylko punkty, a linie proste przechodzą przez ziemię.

Widać to wyraźnie na tym obrazie, na którym fioletowa linia została ukryta.

Mapa 3D przedstawiająca białe i niebieskie linie znikające we wzgórzu, z ukrytą fioletową linią, ilustrująca artefakty wizualne linii bezwzględnych i względnych względem siatki.

Może to prowadzić do dziwnych artefaktów wizualnych, gdy linia znika pod ziemią (lub nawet przechodzi przez siatkę), ponieważ linia między punktami po prostu podąża prostą ścieżką. Możesz poprawić wizualne wyświetlanie takiej linii, dodając więcej punktów między liniami za pomocą metody interpolacji. To, jak może to wpłynąć na wygląd, będzie zależeć od użytej metody:

  • W przypadku pomiarów względnych (RELATIVE_TO_GROUND lub RELATIVE_TO_MESH): gdy używasz względnych wartości wysokości, utworzenie większej liczby punktów wzdłuż linii lub wielokąta pozwoli umieścić element na bardziej odpowiednim poziomie, lepiej dopasowanym do profilu wysokości względnej. Jeśli w Twoich danych nie ma tych punktów pośrednich, możesz je dodać za pomocą funkcji interpolacji, np. funkcji Interpolate w bibliotece Geometry Google Maps Platform. Nowym punktom można następnie przypisać wartości względne, które zostaną umieszczone nad odpowiednim profilem wysokości względnej. Długość linii łączącej punkty zostanie ograniczona, a reprezentacja wizualna – ulepszona.
  • W przypadku obiektów bezwzględnych (ABSOLUTE): obiekty bezwzględne wymagają większej liczby punktów z rzeczywistymi wartościami wysokości. Interpolacja między istniejącymi wartościami bezwzględnymi nie da punktu, który dokładnie odzwierciedla jakąkolwiek wartość powyżej siatki, ponieważ byłaby to jedynie średnia między punktem A i punktem B.

Podsumowanie

Mamy nadzieję, że ten dokument zawiera wyczerpujące omówienie opcji AltitudeMode w fotorealistycznych mapach 3D, ze szczegółowym opisem wpływu opcji ABSOLUTE, CLAMP_TO_GROUND, RELATIVE_TO_GROUND i RELATIVE_TO_MESH na umieszczanie i renderowanie różnych elementów, takich jak znaczniki, linie i wielokąty.

Zrozumienie, jak te tryby współpracują z podstawowym cyfrowym modelem terenu (DTM) i cyfrowym modelem powierzchni (DSM), jest kluczowe dla tworzenia dokładnych i atrakcyjnych wizualnie reprezentacji map 3D z minimalną liczbą artefaktów wizualnych.

Mamy nadzieję, że wypróbujesz te tryby wysokości w swoich projektach, aby odblokować pełny potencjał mapowania 3D i tworzyć angażujące, realistyczne wrażenia dla użytkowników. Podziel się z nami swoją opinią.

Współtwórcy

Matt Toon | inżynier ds. rozwiązań, Geo Developer