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

Gdy określasz wysokość funkcji na mapie 3D, np. linii, wielokątów, modeli czy znaczników, na ich umiejscowienie może wpływać kilka czynników – zarówno w scenie, jak i w sposobie, w jaki renderowanie sceny współdziała z tą funkcją. Z tego dokumentu dowiesz się, jak używać parametru „AltitudeMode” na mapie 3D i jak zarządzać wysokością funkcji.

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

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

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

  • Numeryczny model terenu (DTM): przedstawia wysokość „gołej ziemi” . Można go traktować jako naturalny kształt terenu bez budynków, drzew i innych konstrukcji. Wszystkie obszary są oparte na 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 przechwycone funkcje (szczególnie w środowiskach miejskich, gdzie dominują budynki), widoczna powierzchnia będzie wyższa niż podstawowy teren.

Rozróżnienie między DTM a DSM jest niezbędne do zrozumienia, jak różne tryby wysokości współdziałają z tymi numerycznymi modelami terenu (DEM), ponieważ umiejscowienie funkcji może być zasłonięte lub pod wpływem modelu powierzchni. Różnice możesz zobaczyć na diagramie poniżej:

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, które nie zawierają pomiaru wysokości, lub gdy używasz danych z innej usługi Google, np. z usług Routes lub Places, często nie będziesz mieć wysokości w zwróconej geometrii. W takich przypadkach umieszczenie funkcji w scenie wymaga starannego wybrania parametru AltitudeMode:

  • Clamp it to the ground (Przytwierdź do ziemi): najprostsze podejście, w którym funkcja automatycznie dopasowuje się do terenu. Ten tryb korzysta z modelu DTM.
  • Give it an arbitrary altitude + relative mode (Nadaj jej dowolną wysokość + tryb względny): możesz przypisać wybraną wysokość, a następnie użyć trybu RELATIVE_TO_GROUND (który umieszcza funkcje względem modelu DTM) lub RELATIVE_TO_MESH (który umieszcza je nad modelem DSM).
  • Use another service to obtain altitude (Użyj innej usługi, aby uzyskać wysokość): aby uzyskać dokładną wysokość DTM w lokalizacji funkcji, możesz użyć usługi takiej jak interfejs Elevation API w 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 parametru AltitudeMode i kiedy ich używać?

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

ABSOLUTE

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

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

Kiedy używać: w przypadku funkcji o znanej, dokładnej wysokości, takich jak ścieżki lotu, obiekty podwodne o dokładnej głębokości lub instrumenty naukowe o stałym położeniu.

CLAMP_TO_GROUND

Wyobraź sobie, że rozkładasz koc piknikowy bezpośrednio na zboczu. 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żana jako umieszczona bezpośrednio na ziemi. Obiekty pozostaną na poziomie gruntu, podążając za terenem, niezależnie od podanej wartości wysokości. Współrzędna wysokości funkcji jest ignorowana – jest ona rzutowana bezpośrednio na powierzchnię terenu (DTM).

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

RELATIVE_TO_GROUND

Wyobraź sobie balon na ogrzane powietrze, który utrzymuje się 100 metrów nad naturalną wysokością terenu (DTM) pod nim. Jeśli teren się wznosi, balon również się wznosi, utrzymując 100-metrową przerwę od „gołej ziemi”.

Jak używać: wysokość obiektu jest wyrażana względem powierzchni terenu (DTM). Współrzędna wysokości funkcji jest interpretowana jako przesunięcie od wysokości terenu w jej pozycji poziomej.

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

RELATIVE_TO_MESH

To jak dron lecący na stałej wysokości nad tym, nad czym leci, niezależnie od tego, czy jest to goła ziemia, dach budynku czy wierzchołek drzewa. Dostosowuje się do najwyższej widocznej powierzchni (DSM).

Instrukcje: wysokość obiektu jest wyrażana względem najwyższej powierzchni ziemi, budynku i powierzchni wody (DSM). Współrzędna wysokości funkcji jest interpretowana jako przesunięcie od wysokości DSM.

Kiedy używać: w przypadku obiektów, które muszą unosić się na określonej wysokości nad tym, co fizycznie się tam znajduje (DTM, budynki, woda), np. w przypadku znaczników na dachach lub funkcji, 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 parametru AltitudeMode wpływają na umiejscowienie funkcji. Przykłady te najpierw dotyczą umieszczania znaczników, a następnie linii i obszarów, które mają kilka różnych aspektów.

Umieszczanie znaczników

Rozważmy znacznik pinezki umieszczony w następujący sposób:

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

Możesz go zobaczyć jako białą pinezkę na scenie poniżej:

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

Teraz spójrz na obraz poniżej, który przedstawia pinezki w różnych kolorach umieszczone za pomocą różnych trybów 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.

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

CLAMP_TO_GROUND (fioletowa pinezka)

Ta pinezka ignoruje wartość wysokości i przyczepia się do najbliższej wysokości terenu. Możesz ją zobaczyć tuż pod białą pinezką, która jest „przytwierdzona” do terenu.

Technicznie ten tryb ignoruje rzeczywistą wysokość i przytwierdza 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), pojawiając się na jednym z kamieni Stonehenge zgodnie z podaną wysokością.

Technicznie ten tryb używa rzeczywistej podanej wartości 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 za podstawę teren (DTM) i umieszcza się 102,23 m nad poziomem gruntu, unosząc się nad naturalnym terenem pod kamieniem w Stonehenge.

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

RELATIVE_TO_MESH (niebieska pinezka)

Ta pinezka używa widocznej powierzchni (DSM) jako podstawy i umieszcza się 102,23 m nad tą powierzchnią. Ten tryb uwzględnia wysokość kamienia w pomiarze, wyrównując go nieco wyżej niż pomarańczowa pinezka.

Technicznie ten tryb używa siatki (DSM) jako podstawy i umieszcza lokalizację na podanej wysokości nad nią. Ponieważ DSM znajduje się na szczycie stojącego kamienia, ta pinezka uwzględnia tę dodatkową wysokość w pomiarze podczas określania jej wysokości względnej, wyrównując ją nieco wyżej niż pinezka RELATIVE_TO_GROUND.

Umieszczanie linii i obszarów

W przypadku linii i obszarów kluczowe są zarówno wysokość punktów w funkcji (określona lub nie), jak i używany AltitudeMode. Przyjrzyjmy się linii wzdłuż Stonehenge z 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 }
];

Tę linię możesz zobaczyć na obrazie poniżej w kolorze białym, z użyciem pozycji bezwzględnej.

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

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

Mapa 3D z kilkoma 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 „przykrywa” linię bezpośrednio na podłożu (DTM). Podąża za terenem, ignorując obecność wszelkich funkcji, takich jak budynki czy kamienie.

Technicznie ten tryb ignoruje rzeczywiste wartości wysokości i przykrywa linię na DTM, podążając za podłożem i ignorując siatkę funkcji nad nią.

ABSOLUTE (biała linia)

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

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

RELATIVE_TO_GROUND (pomarańczowa linia)

Ta linia używa naturalnego terenu (DTM) jako podstawy i umieszcza każdy punkt na określonej wysokości nad poziomem gruntu.

Technicznie ten tryb używa DTM jako podstawy i umieszcza lokalizacje linii na podanej wysokości względem niego.

RELATIVE_TO_MESH (niebieska linia)

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

Technicznie ten tryb używa siatki (DSM) jako podstawy 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 funkcje 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, w którym nie podano wysokości, linie często pojawiają się w podobnych lokalizacjach. Białe, pomarańczowe i fioletowe linie mogą się scalić w jedną linię (pomarańczową, ponieważ jest ona zwykle 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 określono wysokości, po prostu nakłada punkty bezpośrednio na siatkę. Należy pamiętać, że nie układa linii na siatce, ale łączy określone punkty na siatce liniami prostymi. Chociaż w niektórych przykładach może to wyglądać akceptowalnie, może powodować problemy z widocznością, gdy jest zasłonięte przez inne funkcje. Ten problem omówimy w następnej sekcji.

Współdziałanie siatek i linii. Teraz możemy przyjrzeć się innej polilinii. Ten obraz przedstawia ten sam obszar, ale z większym pokryciem terenu (lub większą szczegółowością DSM 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 zobaczymy reprezentację za pomocą 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 ABSOLUTE, który możesz zobaczyć, że linie proste łączą punkty umieszczone bezwzględnie w przestrzeni. Pomarańczowy i niebieski to wersje względne dotyczące powierzchni (DTM) lub siatki (DSM). Zwróć uwagę, że niebieska linia ma nieco inny kształt ze względu na wysokość funkcji poniżej.

Ponownie możemy zauważyć, że charakter tworzenia linii oznacza, że linia przechodzi przez siatkę, ponieważ punkty są połączone liniami prostymi. Ten scenariusz może powodować problemy z widocznością linii, dlatego możesz ustawić drawsOccludedSegments na true , aby linia była widoczna przez drzewa, jak pokazano bardziej szczegółowo na poniższym obrazie, na którym nadal 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.

Charakter umieszczania w przestrzeni oznacza, że punkty mogą znajdować się w siatce, a linie łączące punkty również mogą znajdować się w siatce, co może powodować artefakty wizualne. W sekcji poniżej zobaczymy, jak w miarę możliwości można poprawić takie artefakty.

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

W innym przykładzie, w tym samym obszarze, możemy zobaczyć inne artefakty, o których musimy pamiętać podczas używania 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 nad nim w siatce. Ten scenariusz miałby też miejsce na obszarze, który nie miał pokrycia 3D nad modelem terenu. Przyjrzyjmy się lokalizacji określonej poniżej:

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

Na obrazie widać linie w tych samych kolorach 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 ze względu na brak pokrycia powierzchni pomarańczowe (RELATIVE_TO_GROUND) i niebieskie (RELATIVE_TO_MESH) linie znajdują się (w większości) w tej samej lokalizacji (przy czym niebieska linia jest wyświetlana, ponieważ jest rysowana jako ostatnia).

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

Możesz to zobaczyć 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 podąża po prostu prostą ścieżką. Wyświetlanie wizualne takiej linii można poprawić, dodając więcej punktów między liniami za pomocą metody interpolacji. To, jak wpłynie to na obraz, będzie zależeć od używanej 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ć funkcję na bardziej odpowiednim poziomie, lepiej dopasowując się do profilu wysokości względnej. Jeśli te punkty pośrednie nie są obecne w Twoich danych, możesz je dodać za pomocą funkcji interpolacji, np. funkcji Interpolate w bibliotece geometrii Google Maps Platform. Nowe punkty można następnie przypisać do wartości względnych, które zostaną umieszczone nad odpowiednim profilem wysokości względnej, a długość każdej linii łączącej punkty zostanie ograniczona, co poprawi reprezentację wizualną.
  • W przypadku funkcji bezwzględnych (ABSOLUTE): w przypadku funkcji ABSOLUTE więcej punktów będzie musiało 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 omówienie opcji parametru AltitudeMode w fotorealistycznych mapach 3D, szczegółowo opisując, jak tryby ABSOLUTE, CLAMP_TO_GROUND, RELATIVE_TO_GROUND i RELATIVE_TO_MESH wpływają na umiejscowienie i renderowanie różnych funkcji, takich jak znaczniki, linie i wielokąty.

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

Zachęcamy do eksperymentowania z tymi trybami wysokości w swoich projektach, aby w pełni wykorzystać potencjał mapowania 3D i tworzyć angażujące, wciągające wrażenia dla użytkowników, a także do przesyłania opinii.

Współtwórcy

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