Omówienie trybów i funkcji wysokości w Mapach 3D

Gdy określasz wysokość elementów na mapie 3D, takich jak linie, wielokąty, modele czy markery, na ich umiejscowienie może wpływać kilka czynników, zarówno w scenie, jak i w sposób, w jaki renderowanie sceny wchodzi w interakcję z tym elementem. Ten dokument opisuje użycie elementu „AltitudeMode” na mapie 3D i sposób zarządzania wysokością obiektów.

Oto jak możesz używać AltitudeMode w przypadku różnych typów funkcji:

Jak wysokość jest wykorzystywana w środowiskach 3D

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

  • Cyfrowy model terenu (DTM): przedstawia wysokość „gołej ziemi”. To naturalny kształt terenu bez budynków, drzew i innych konstrukcji. Wszystkie obszary są oparte na modelu DTM, który stanowi podstawę wysokości globu (obliczonej za pomocą EGM96).
  • Cyfrowy model powierzchni (DSM): przedstawia wysokość „górnej powierzchni”, w tym budynków, drzew i innych konstrukcji. Na obszarach, na których zostały zarejestrowane obiekty (zwłaszcza w środowiskach miejskich, gdzie widok zdominowany jest przez budynki), widoczna powierzchnia będzie wyższa niż podstawowy teren.

Rozróżnienie między DTM a DSM jest kluczowe, aby zrozumieć, jak różne tryby wysokości oddziałują na te cyfrowe modele terenu (DEM), ponieważ umiejscowienie obiektów może być zasłonięte lub pod wpływem modelu powierzchni. Różnice możesz zobaczyć na poniższym diagramie:

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

Gdy funkcje nie mają danych o wysokości

Jeśli masz dane, w których brakuje pomiaru wysokości, lub korzystasz z danych z innej usługi Google, np. z usługi Trasy lub Miejsca, w zwróconej geometrii często nie będzie podana wysokość. W takich przypadkach umieszczenie funkcji w scenie wymaga starannego wyboru AltitudeMode:

  • Przytwierdź do podłoża: najprostsze podejście, w którym funkcja automatycznie dopasowuje się do terenu. Ten tryb korzysta z modelu DTM.
  • Nadaj mu dowolną wysokość + tryb względny: możesz przypisać wybraną wysokość, a następnie użyć trybu RELATIVE_TO_GROUND (który umieszcza obiekty 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 obiektu, możesz użyć usługi takiej jak Elevation API Google Maps Platform. Jeśli jest to linia lub wielokąt, musisz to zrobić dla każdego punktu, który tworzy 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 m. Jego wysokość jest stała, niezależnie od tego, czy leci nad górą, czy nad doliną.

Jak korzystać: wysokość obiektu jest wyrażana względem średniego poziomu morza (obliczanego na podstawie modelu EGM96). Współrzędna wysokości obiektu jest interpretowana jako dokładna wysokość nad średnim poziomem morza.

Kiedy używać: w przypadku obiektów o znanej, precyzyjnej wysokości, takich jak trasy lotów, zanurzone obiekty o dokładnej głębokości czy instrumenty naukowe w stałych punktach.

CLAMP_TO_GROUND

Wyobraź sobie rozłożenie koca piknikowego bezpośrednio na zboczu wzgórza. Niezależnie od tego, czy wzgórze jest strome czy płaskie, koc zawsze leży płasko na widocznej powierzchni.

Sposób użycia: wysokość obiektu jest wyrażana jako umieszczona bezpośrednio na ziemi. Pozostaną one na poziomie gruntu, 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 zawsze powinny być zgodne z terenem, takich jak drogi, ogrodzenia, szlaki, granice nieruchomości czy podstawa budynków.

RELATIVE_TO_GROUND

Wyobraź sobie balon na gorące powietrze, który utrzymuje się 100 metrów nad naturalną wysokością terenu (DTM). Jeśli teren się wznosi, balon wznosi się wraz z nim, utrzymując 100-metrową odległość od „gołej ziemi”.

Jak z niego korzystać: wysokość obiektu jest wyrażana względem powierzchni ziemi (DTM). Współrzędna wysokości elementu jest interpretowana jako przesunięcie względem wysokości terenu w jego pozycji poziomej.

Kiedy używać: w przypadku obiektów, które muszą zachować stałą wysokość nad naturalnym terenem, np. wież telekomunikacyjnych lub linii napowietrznych na obszarach wiejskich.

RELATIVE_TO_MESH

To tak, jakby dron leciał na stałej wysokości nad dowolnym obiektem, nad którym przelatuje, niezależnie od tego, czy jest to goła ziemia, dach budynku czy wierzchołek drzewa. Dostosowuje się do najwyższej widocznej powierzchni (DSM).

Sposób użycia: wysokość obiektu jest wyrażana względem najwyższej powierzchni gruntu, budynku lub powierzchni wody (DSM). Współrzędna wysokości funkcji 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 znajduje się fizycznie w danym miejscu (DTM, budynki, woda). Przydatne w przypadku znaczników na dachach lub elementó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 pokazać, jak różne AltitudeModeopcje wpływają na umiejscowienie funkcji. Najpierw omówimy w nich znaczniki pozycji, a potem linie i obszary, które wymagają nieco innego podejścia.

Znaczniki pozycji

Załóżmy, że znacznik pinezki jest umieszczony w ten sposób:

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

Możesz to zobaczyć na poniższej scenie jako biały pinezek:

Scena mapy 3D z białą pinezką, która ilustruje domyślne umieszczenie znacznika.

Teraz spójrz na obraz poniżej, na którym widać pinezki w różnych kolorach umieszczone w różnych trybach wysokości.

Scena mapy 3D z wieloma pinezkami (białymi, fioletowymi, pomarańczowymi i niebieskimi) umieszczonymi w różnych trybach wysokości, wszystkie wyśrodkowane wokół Stonehenge.

Sprawdźmy, jak różne AltitudeModewpływają na pozycjonowanie znacznika w kolejności rosnącej wysokości.

CLAMP_TO_GROUND (fioletowy pinezek)

Ten pin ignoruje wartość wysokości i przyczepia się do najbliższego poziomu gruntu. Znajduje się ona tuż pod białym pinezką, dzięki czemu jest „przytwierdzona” do terenu.

Technicznie ten tryb ignoruje rzeczywistą wysokość i przyciąga pinezkę do najbliższej wysokości DTM.

ABSOLUTE (biały pin)

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

Technicznie 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ńczowy pinezek)

Ten pin ma za podstawę teren (DTM) i znajduje się 102,23 m nad poziomem gruntu, dzięki czemu wydaje się unosić nad naturalnym terenem pod kamieniem w henge.

Technicznie ten tryb ustawia podstawę na poziomie rzeczywistego modelu DTM na ziemi, a następnie umieszcza pinezkę 102,23 m nad nią.

RELATIVE_TO_MESH (niebieski pinezek)

Ten pin korzysta z widocznej powierzchni (DSM) jako podstawy i jest umieszczony 102,23 m nad tą powierzchnią. W tym trybie wysokość kamienia jest uwzględniana w pomiarze, co powoduje, że jest on nieco wyżej niż pomarańczowy znacznik.

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

Pozycjonowanie linii i obszarów

W przypadku linii i obszarów kluczowe są zarówno wysokość punktów w obiekcie (niezależnie od tego, czy jest określona), jak i używany AltitudeMode. Przyjrzyjmy się linii wzdłuż Stonehenge o tych wysokościach:

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 ilustracji poniżej ta linia jest przedstawiona na biało przy użyciu pozycjonowania bezwzględnego.

Mapa 3D przedstawiająca białą linię umieszczoną wokół Stonehenge przy użyciu pozycjonowania bezwzględnego.

Obraz poniżej przedstawia linie w różnych trybach wysokości. Omówmy je po kolei, od najniższego do najwyższego.

Mapa 3D z kilkoma kolorowymi liniami (fioletową, białą, pomarańczową i niebieską) umieszczonymi wokół Stonehenge w różnych trybach wysokości.

CLAMP_TO_GROUND (Purple Line)

Ta linia ignoruje określoną wysokość każdego punktu i zamiast tego „rozciąga się” bezpośrednio nad podłożem (DTM). Podąża za ukształtowaniem terenu, ignorując wszelkie obiekty, takie jak budynki czy kamienie, które znajdują się nad nim.

Technicznie ten tryb ignoruje rzeczywiste wartości wysokości i nakłada linię na DTM, dopasowując ją do ukształtowania terenu i ignorując siatkę obiektów nad nią.

ABSOLUTE (White Line)

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

Technicznie ten tryb śledzi określoną wysokość 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 (Orange Line)

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

Technicznie ten tryb wykorzystuje DTM jako podstawę i umieszcza lokalizacje linii na podanej wysokości względem niej.

RELATIVE_TO_MESH (niebieska linia)

Ta linia wykorzystuje widoczną powierzchnię, która obejmuje budynki i kamienie. 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 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 elementy na ziemi.

Gdy wysokość nie jest określona dla linii

Rozważmy teraz te same współrzędne linii, ale bez podania 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 takim przypadku, gdy nie podano wysokości, linie często pojawiają się w podobnych miejscach. Linie biała, pomarańczowa i fioletowa mogą się połączyć w jedną linię (pomarańczową, ponieważ zwykle jest rysowana jako ostatnia), ponieważ wszystkie domyślnie mają podobne położenie na poziomie gruntu. Możesz to zobaczyć poniżej:

Mapa 3D pokazująca kilka kolorowych linii (pomarańczowych i niebieskich) wokół Stonehenge. Białe i fioletowe linie łączą się ze sobą z powodu braku danych o wysokości.

Niebieska linia (RELATIVE_TO_MESH) ponownie używa siatki (DSM) jako podstawy. Ponieważ nie podano wysokości, punkty są nakładane bezpośrednio na siatkę. Warto pamiętać, że nie rysuje linii na siatce typu mesh, ale łączy wybrane punkty na siatce typu mesh prostymi połączeniami. W niektórych przypadkach może to wyglądać dobrze, ale gdy element jest zasłonięty przez inne funkcje, może to powodować problemy z widocznością. Ten problem omawiamy w następnej sekcji.

Interakcja siatek i linii. Teraz możemy przyjrzeć się kolejnej linii łamanej. Ten obraz znajduje się w tym samym obszarze, ale obejmuje większy obszar (lub zawiera więcej szczegółów na temat DSM na podstawie 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 zobaczymy reprezentację z użyciem tych samych metod (i kolorów) co wcześniej, uzyskamy taki widok:

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

Fioletowy to CLAMP_TO_GROUND, który możesz zobaczyć na ziemi. Biały to BEZWZGLĘDNY, co widać po tym, że proste linie łączą punkty, które są umieszczone bezwzględnie w przestrzeni. Kolory pomarańczowy i niebieski są względnymi wersjami powierzchni (DTM) lub siatki (DSM). Zwróć uwagę, że niebieska linia ma nieco inny kształt ze względu na wysokość elementów poniżej.

Ponownie możemy zauważyć, że charakter tworzenia linii oznacza, że przechodzi ona przez siatkę, ponieważ punkty są połączone liniami prostymi. W takiej sytuacji linie mogą być niewidoczne, dlatego możesz ustawić wartość drawsOccludedSegments na true, aby linia była widoczna przez drzewa. Szczegółowo pokazano to na poniższym obrazie, na którym widać linie przechodzące przez siatkę.

Mapa 3D pokazująca linie przechodzące przez drzewa, z zasłoniętymi segmentami widocznymi w celu zilustrowania zasłaniania segmentów: true.

Ze względu na charakter pozycjonowania w przestrzeni punkty mogą znajdować się w siatce, a linie łączące punkty również mogą się w niej znajdować, co może powodować artefakty wizualne. W sekcji poniżej sprawdzimy, jak w miarę możliwości ulepszyć takie artefakty.

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

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

Mamy tu stosunkowo płaski obszar, który znajduje się głównie na poziomie DTM, z ograniczoną liczbą dodatkowych szczegółów powyżej w siatce. Taka sytuacja może mieć miejsce również 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 },
];

Jak widać na obrazie, linie mają te same kolory co 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 widocznymi artefaktami, w których linie znikają pod ziemią.

Widzimy tu kilka artefaktów. Pierwszy z nich polega na tym, że z powodu braku pokrycia powierzchni linie pomarańczowa (RELATIVE_TO_GROUND) i niebieska (RELATIVE_TO_MESH) znajdują się (w większości) w tym samym miejscu (przy czym linia niebieska jest widoczna, ponieważ jest rysowana jako ostatnia).

Widzimy też, że fioletowa linia (CLAMP_TO_GROUND) przebiega wzdłuż ziemi i jest widoczna na wzgórzu, a biała linia (ABSOLUTE) znika we wzgórzu, ponieważ połączone są tylko punkty, a proste linie przechodzą przez ziemię.

Widać to na tym obrazie, gdy fioletowa linia jest ukryta.

Mapa 3D przedstawiająca białe i niebieskie linie znikające na 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, w których linia znika pod ziemią (lub nawet przez siatkę), ponieważ linia między punktami po prostu podąża prostą ścieżką. Możesz poprawić wyświetlanie wizualne takiej linii, dodając więcej punktów między liniami za pomocą metody interpolacji. Wpływ na wygląd będzie ponownie zależeć od użytej metody:

  • W przypadku pomiarów względnych (RELATIVE_TO_GROUND lub RELATIVE_TO_MESH): jeśli używasz względnych wartości wysokości, utworzenie większej liczby punktów wzdłuż linii lub wielokąta umożliwi umieszczenie obiektu na odpowiedniejszym 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 w Google Maps Platform. Nowym punktom można przypisać wartości względne, które zostaną umieszczone nad odpowiednim profilem wysokości względnej. Długość dowolnej linii łączącej punkty będzie ograniczona, a wizualizacja ulepszona.
  • W przypadku funkcji bezwzględnych (ABSOLUTE): w przypadku funkcji ABSOLUTE więcej punktów musi mieć rzeczywiste wartości wysokości. Interpolacja między istniejącymi wartościami bezwzględnymi nie da punktu, który dokładnie odzwierciedlałby jakąkolwiek wartość powyżej siatki, ponieważ byłby to tylko średnia między punktem A a punktem B.

Podsumowanie

Mamy nadzieję, że ten dokument zawiera wyczerpujące informacje o AltitudeModeopcjach w fotorealistycznych mapach 3D, a także szczegółowe wyjaśnienie, jak wartości ABSOLUTE, CLAMP_TO_GROUND, RELATIVE_TO_GROUND i RELATIVE_TO_MESH wpływają na umieszczanie i renderowanie różnych elementów, takich jak markery, linie i wielokąty.

Aby tworzyć dokładne i atrakcyjne wizualnie reprezentacje map 3D z minimalną liczbą artefaktów wizualnych, musisz wiedzieć, jak te tryby współpracują z cyfrowym modelem terenu (DTM) i cyfrowym modelem powierzchni (DSM).

Zachęcamy do eksperymentowania z tymi trybami wysokości w swoich projektach, aby w pełni wykorzystać potencjał mapowania 3D i zapewnić użytkownikom angażujące, realistyczne wrażenia oraz przekazać opinię.

Współtwórcy

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