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 znaczniki, 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 3D lub obiektów, 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 nad poziomem morza (obliczonej za pomocą EGM96).
  • Cyfrowy model terenu (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 dominują budynki), widoczna powierzchnia będzie wyższa niż teren bazowy.

Rozróżnienie między DTM a DSM jest kluczowe dla zrozumienia, 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 cyfrowym modelem terenu (DTM) a cyfrowym modelem powierzchni (DSM).

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 elementu w scenie wymaga starannego wyboru AltitudeMode:

  • Przytwierdź do podłoża: najprostsze podejście, w którym element 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 z niej 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, obiekty podwodne 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 umieszczonego bezpośrednio na ziemi. Pozostaną one na poziomie gruntu, dopasowując się do 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 być zgodne z terenem, np. dróg, ogrodzeń, szlaków, granic nieruchomości lub podstaw 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) pod nim. Jeśli teren się wznosi, balon wznosi się wraz z nim, utrzymując 100-metrową odległość od „gołej ziemi”.

Jak z niej 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 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 zilustrować, jak różne AltitudeModeopcje wpływają na rozmieszczenie 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 };

Jest to biała pinezka widoczna na scenie poniżej:

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 (fioletowa pinezka)

Ten pinezka 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 pinezka jest umieszczona na podstawie terenu (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 wieloma kolorowymi liniami (fioletową, białą, pomarańczową i niebieską) umieszczonymi wokół Stonehenge w różnych trybach wysokości.

CLAMP_TO_GROUND (fioletowa linia)

Ta linia ignoruje określoną wysokość każdego punktu i zamiast tego „nakłada się” bezpośrednio na podłoże (DTM). Podąża za ukształtowaniem terenu, ignorując wszelkie elementy znajdujące się nad nim, takie jak budynki czy kamienie.

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 ukształtowanie terenu (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, 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 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 podanej 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ńczową i niebieską) wokół Stonehenge. Białe i fioletowe linie łączą się ze sobą z powodu braku danych o wysokości.

Niebieska linia (RELATIVE_TO_MESH) ponownie wykorzystuje siatkę (DSM) jako podstawę. Ponieważ nie określono wysokości, punkty są nakładane bezpośrednio na siatkę. Warto pamiętać, że nie rysuje linii na siatce, ale łączy wybrane punkty na siatce prostymi liniami. 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. 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. Biel jest BEZWZGLĘDNA, co widać po tym, że proste linie łączą punkty, które są umieszczone bezwzględnie w przestrzeni. Kolory pomarańczowy i niebieski są wersjami względnymi, które odnoszą się do powierzchni (DTM) lub siatki (DSM). Zwróć uwagę, że niebieska linia ma nieco inny kształt ze względu na wysokość elementów znajdujących się 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ę.

Możesz to zobaczyć na tym obrazie, gdy fioletowa linia jest ukryta.

Mapa 3D z białymi i niebieskimi liniami znikającymi 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ć wygląd takiej linii, dodając więcej punktów między liniami za pomocą metody interpolacji. Wpływ na wygląd będzie 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. Jeśli w 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ściowym. Długość dowolnej linii łączącej punkty będzie ograniczona, a wizualizacja ulepszona.
  • W przypadku funkcji bezwzględnych (ABSOLUTE): w przypadku funkcji bezwzględnych 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 działają w połączeniu 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. Prosimy też o przesyłanie opinii.

Współtwórcy

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