Kotwice geoprzestrzenne to typ kotwic, które umożliwiają umieszczanie treści 3D w świecie rzeczywistym.
Rodzaje kotwic geoprzestrzennych
Istnieją 3 typy kotwic geoprzestrzennych, które w różny sposób określają wysokość:
Reklamy zakotwiczone WGS84:
Reklamy zakotwiczone WGS84 pozwalają umieszczać treści 3D na dowolnej szerokości geograficznej, długości i wysokości.Elementy zakotwiczone terenu:
Kotwice terenu umożliwiają umieszczanie treści tylko na podstawie szerokości geograficznej długość geograficzna i wysokość w odniesieniu do terenu w danej pozycji. Wysokość jest określana względem ziemi lub piętra, co jest znane przez VPS.Reklamy zakotwiczone dachowe:
Kotwice dachowe umożliwiają umieszczanie treści tylko na podstawie szerokości geograficznej długość geograficzna i wysokość w odniesieniu do dachu budynku w danym miejscu. Wysokość jest określana w odniesieniu do szczytu budynku o znanej nazwie autor: Streetscape Geometry. Jeśli nie zostanie umieszczona na budynku, domyślnie będzie wyświetlana wysokość ukształtowania terenu.
WGS84 | Teren | Dach | |
---|---|---|---|
Pozycja w poziomie | Szerokość geograficzna, długość geograficzna | Szerokość geograficzna, długość geograficzna | Szerokość geograficzna, długość geograficzna |
Pozycja w pionie | Względem wysokości WGS84 | Względem poziomu terenu określonego przez Mapy Google | Względem dachów określonych przez Mapy Google |
Wymaga rozwiązania przez serwer? | Nie | Tak | Tak |
Wymagania wstępne
Zanim przejdziesz dalej, włącz interfejs Geospatial API.
Umieść kotwice geoprzestrzenne
Każdy typ kotwicy ma dedykowane interfejsy API do ich tworzenia. Więcej informacji znajdziesz w artykule Typy kotwic geoprzestrzennych.
Tworzenie kotwicy na podstawie testu działań
Kotwica geoprzestrzenna możesz też utworzyć na podstawie wyniku testu działań.
Zastosuj pozycję z testu działań i przekształć ją w ArGeospatialPose
. Służy do umieszczania dowolnego z 3 opisanych typów reklam zakotwiczonych.
Uchwyć pozycję geoprzestrzenną w pozycji AR
ArEarth_getGeospatialPose()
zapewnia dodatkowy sposób określania szerokości i długości geograficznej przez przekształcenie pozycji AR na pozycję geoprzestrzenną.
Uzyskaj pozę AR w pozycji geoprzestrzennej
ArEarth_getPose()
konwertuje określone przez Ziemię położenie poziome, wysokość i obrót kwartionowy względem ramki współrzędnych wschód-południe na pozycję AR w odniesieniu do współrzędnych świata GL.
Wybierz metodę odpowiednią do Twojego zastosowania
Każda metoda tworzenia reklamy zakotwiczonej wiąże się z korzyściami, o których trzeba pamiętać:
- Jeśli korzystasz z funkcji Geometria Streetscape, za pomocą testów zgodności dołączonych treści do budynku.
- Preferuj reklamy zakotwiczone terenu / dachu zamiast reklam zakotwiczonych WGS84, ponieważ korzystają z wartości wysokości określonych przez Mapy Google.
Określanie szerokości i długości geograficznej lokalizacji
Długość i szerokość geograficzną lokalizacji można obliczyć na 3 sposoby:
- Korzystaj z Kreatora danych geoprzestrzennych, aby oglądać i wzbogacać świat za pomocą treści 3D bez konieczności fizycznego odwiedzania lokalizacji. Dzięki temu możesz wizualnie umieszczać wciągające treści 3D za pomocą Map Google w Edytorze Unity. Szerokość, długość geograficzna, obrót i wysokość treści zostaną obliczone automatycznie.
- Użyj Map Google
- Korzystanie z Google Earth. Pamiętaj, że uzyskanie tych współrzędnych w Google Earth, a nie w Mapach Google, powoduje margines błędu do kilku metrów.
- Przejdź do lokalizacji fizycznej
Użyj Map Google
Aby poznać szerokość i długość geograficzną lokalizacji w Mapach Google:
Otwórz Mapy Google na komputerze.
Przejdź do Warstwy > Więcej.
Zmień Typ mapy na Satelita i usuń zaznaczenie pola wyboru Widok kuli ziemskiej w lewym dolnym rogu ekranu.
Wymusi to widok z perspektywy 2D i wyeliminuje możliwe błędy, które mogą być spowodowane pod kątem widoku 3D.
Kliknij lokalizację prawym przyciskiem myszy i wybierz długość lub szerokość geograficzną na mapie, aby skopiować ją do schowka.
Korzystanie z Google Earth
W Google Earth możesz obliczyć szerokość i długość geograficzną lokalizacji, klikając ją w interfejsie i odczytując dane ze szczegółów oznaczenia miejsca.
Aby poznać szerokość i długość geograficzną lokalizacji w Google Earth:
Otwórz Google Earth na komputerze.
Przejdź do menu z hamburgerami i wybierz Styl mapy.
Przesuń przełącznik Budynki 3D, aby go wyłączyć.
Po wyłączeniu przełącznika Budynki 3D kliknij ikonę pinezki , aby dodać oznaczenie miejsca w wybranej lokalizacji.
Określ projekt, w którym chcesz umieścić oznaczenie miejsca, i kliknij Zapisz.
W polu Tytuł oznaczenia miejsca wpisz nazwę oznaczenia miejsca.
Kliknij strzałkę wstecz w panelu projektu i wybierz menu Więcej czynności.
W menu wybierz Eksportuj jako plik KML.
Plik KLM raportuje szerokość, długość i wysokość oznaczenia miejsca w tagu <coordinates>
rozdzielone przecinkami w ten sposób:
<coordinates>-122.0755182435043,37.41347299422944,7.420342565583832</coordinates>
Nie używaj szerokości i długości geograficznej z tagów <LookAt>
, które określają pozycję kamery, a nie lokalizację.
Przejdź do lokalizacji fizycznej
Możesz obliczyć wysokość lokalizacji, przychodząc do niej fizycznie i wykonując lokalne obserwacje.
Pobierz kwartion rotacji
ArGeospatialPose_getEastUpSouthQuaternion()
wyodrębnia orientację z pozycji geoprzestrzennej i podaje kwartion reprezentujący macierz obrotu, która przekształca wektor z miejsca docelowego na układ współrzędnych wschód-południe (EUS). X+ punkty na wschód, Y+ punkty w górę i Z+ punkty na południe. Wartości są zapisywane w kolejności {x, y, z, w}
.
Kotwice WGS84
Reklamy zakotwiczone WGS84 to typ kotwicy, który umożliwia umieszczanie treści 3D na dowolnej szerokości, długości i wysokości. Jego umiejscowienie zależy od pozycji i orientacji, które musi znajdować się w świecie rzeczywistym. Pozycja składa się z szerokości, długości i wysokości nad poziomem morza, które są określone w układzie współrzędnych WGS84. Orientacja składa się z rotacji w kwartionach.
Wysokość jest podawana w metrach nad elipsoidą WGS84, więc poziom gruntu nie wynosi zero. Za podanie tych współrzędnych w przypadku każdej utworzonej kotwicy odpowiada Twoja aplikacja.
Umieść kotwicę WGS84 w świecie rzeczywistym
Określanie wysokości lokalizacji
Istnieje kilka sposobów na określenie wysokości lokalizacji na potrzeby umieszczania reklam zakotwiczonych:
- Jeśli kotwica znajduje się fizycznie blisko użytkownika, możesz użyć wysokości podobnej do wysokości jego urządzenia.
- Gdy poznasz długość i szerokość geograficzną, użyj interfejsu Elevation API, aby uzyskać wysokość na podstawie specyfikacji EGM96. Aby porównać wysokość z wysokością
ArGeospatialPose
, musisz przekonwertować wysokość w interfejsie API Map Google EGM96 na WGS84. Zobacz GeoidEval, który zawiera zarówno wiersz poleceń, jak i interfejs HTML. Interfejs Maps API bezpośrednio raportuje szerokość i długość geograficzną zgodnie ze specyfikacją WGS84. - Długość i szerokość geograficzną lokalizacji oraz wysokość możesz sprawdzić w Google Earth. Dzięki temu margines błędu wynosi do kilku metrów. Użyj szerokości i długości geograficznej i wysokości z tagów
<coordinates>
, a nie z tagów<LookAt>
w pliku KML. - Jeśli znajdujący się w pobliżu obiekt zakotwiczony znajduje się oraz nie jesteś na stromym zboczu, możesz użyć wysokości z aparatu
ArGeospatialPose
bez korzystania z innego źródła, np. interfejsu API Map Google.
Tworzenie kotwicy
Po określeniu szerokości i długości geograficznej, wysokości i kwartionu obrotu użyj ArEarth_acquireNewAnchor()
w celu zakotwiczenia treści
w określonych przez Ciebie współrzędnych geograficznych.
float eus_quaternion_4[4] = {qx, qy, qz, qw}; if (ar_earth != NULL) { ArTrackingState earth_tracking_state = AR_TRACKING_STATE_STOPPED; ArTrackable_getTrackingState(ar_session, (ArTrackable*)ar_earth, &earth_tracking_state); if (earth_tracking_state == AR_TRACKING_STATE_TRACKING) { ArAnchor* earth_anchor = NULL; ArStatus status = ArEarth_acquireNewAnchor(ar_session, ar_earth, /* location values */ latitude, longitude, altitude, eus_quaternion_4, &earth_anchor); // Attach content to the anchor specified by geodetic location and // pose. } }
Kotwice terenu
Kotwica terenu to typ zakotwiczenia, który umożliwia umieszczanie obiektów AR tylko na podstawie szerokości i długości geograficznej i wykorzystuje informacje z VPS do określenia dokładnej wysokości nad poziomem gruntu.
Zamiast wpisywać żądaną wysokość, podaj wysokość nad poziomem terenu. Jeśli wartość wynosi zero, kotwica jest wyrównana z terenem.
Ustawianie trybu wyszukiwania samolotu
Wyniki na płaszczyźnie są opcjonalne i nie są wymagane do korzystania z reklam zakotwiczonych. Pamiętaj, że używane są tylko płaszczyzny poziome. Poziome płaszczyzny ułatwiają dynamiczne wyrównanie elementów kotwicy terenu do ziemi.
Użyj ikony ArPlaneFindingMode
, aby określić, w jaki sposób aplikacja ma wykrywać samoloty.
Tworzenie kotwicy terenu za pomocą nowego interfejsu Async API
Aby utworzyć i umieścić reklamę zakotwiczoną terenu, wywołaj ArEarth_resolveAnchorOnTerrainAsync()
.
Reklama zakotwiczona nie będzie od razu gotowa i trzeba ją rozwiązać. Po rozwiązaniu problemu będzie on dostępny w ArResolveAnchorOnTerrainFuture
.
Stan zakotwiczenia terenu możesz sprawdzić za pomocą narzędzia ArResolveAnchorOnTerrainFuture_getResultTerrainAnchorState()
.
Pobierz kotwicę zatwierdzoną za pomocą narzędzia ArResolveAnchorOnTerrainFuture_acquireResultAnchor()
.
float eus_quaternion_4[4] = {qx, qy, qz, qw}; void* context = NULL; ArResolveAnchorOnTerrainCallback callback = NULL; ArResolveAnchorOnTerrainFuture* future = NULL; if (ar_earth != NULL) { ArTrackingState earth_tracking_state = AR_TRACKING_STATE_STOPPED; ArTrackable_getTrackingState(ar_session, (ArTrackable*)ar_earth, &earth_tracking_state); if (earth_tracking_state == AR_TRACKING_STATE_TRACKING) { ArStatus status = ArEarth_resolveAnchorOnTerrainAsync( ar_session, ar_earth, /* location values */ latitude, longitude, altitude_above_terrain, eus_quaternion_4, context, callback, &future); } }
Sprawdź przyszłość
Przyszłość będzie mieć powiązaną wartość ArFutureState
.
Stan | Opis |
---|---|
AR_FUTURE_STATE_PENDING |
Operacja jest nadal w toku. |
AR_FUTURE_STATE_DONE |
Operacja została zakończona i wyniki są dostępne. |
AR_FUTURE_STATE_CANCELLED |
Operacja została anulowana. |
Sprawdzanie stanu zakotwiczenia terenu uzyskanego w wyniku przyszłości
ArTerrainAnchorState
należy do operacji asynchronicznej i jest częścią ostatecznego wyniku typu Future.
switch (terrain_anchor_state) { case AR_TERRAIN_ANCHOR_STATE_SUCCESS: // A resolving task for this anchor has been successfully resolved. break; case AR_TERRAIN_ANCHOR_STATE_ERROR_UNSUPPORTED_LOCATION: // The requested anchor is in a location that isn't supported by the // Geospatial API. break; case AR_TERRAIN_ANCHOR_STATE_ERROR_NOT_AUTHORIZED: // An error occurred while authorizing your app with the ARCore API. See // https://developers.google.com/ar/reference/c/group/ar-anchor#:~:text=from%20this%20error.-,AR_TERRAIN_ANCHOR_STATE_ERROR_NOT_AUTHORIZED,-The%20authorization%20provided // for troubleshooting steps. break; case AR_TERRAIN_ANCHOR_STATE_ERROR_INTERNAL: // The Terrain anchor could not be resolved due to an internal error. break; default: break; }
Kotwy dachowe
Kołki dachowe to rodzaj kotwic, które są bardzo podobne do podanych wyżej kotwic dachowych. Różnica polega na tym, że wysokość należy podać nad dachem, a nie nad poziomem terenu.
Utwórz reklamę zakotwiczoną na dachu za pomocą nowego interfejsu Async API
Reklama zakotwiczona nie będzie od razu gotowa i trzeba ją rozwiązać.
Aby utworzyć i umieścić reklamę zakotwiczoną na dachu, wywołaj ArEarth_resolveAnchorOnRooftopAsync()
. Podobnie jak w przypadku kotwicy terenu, uzyskasz też dostęp do ArFutureState
przyszłości. Następnie możesz sprawdzić wynik w przyszłości, aby uzyskać dostęp do: ArRooftopAnchorState
.
Użyj narzędzia ArEarth_resolveAnchorOnRooftopAsync()
, aby utworzyć ArResolveAnchorOnRooftopFuture
.
Sprawdź stan zakotwiczenia na dachu za pomocą narzędzia ArResolveAnchorOnRooftopFuture_getResultRooftopAnchorState()
.
Pobierz kotwicę zatwierdzoną za pomocą narzędzia ArResolveAnchorOnRooftopFuture_acquireResultAnchor()
.
float eus_quaternion_4[4] = {qx, qy, qz, qw}; void* context = NULL; ArResolveAnchorOnRooftopCallback callback = NULL; ArResolveAnchorOnRooftopFuture* future = NULL; if (ar_earth != NULL) { ArTrackingState earth_tracking_state = AR_TRACKING_STATE_STOPPED; ArTrackable_getTrackingState(ar_session, (ArTrackable*)ar_earth, &earth_tracking_state); if (earth_tracking_state == AR_TRACKING_STATE_TRACKING) { ArStatus status = ArEarth_resolveAnchorOnRooftopAsync( ar_session, ar_earth, /* location values */ latitude, longitude, altitude_above_rooftop, eus_quaternion_4, context, callback, &future); } }
Sprawdź przyszłość
Przyszłość będzie miała powiązaną wartość ArFutureState
. Zobacz tabelę powyżej.
Sprawdzanie stanu zakotwiczenia dachu w przypadku wyniku przyszłego
ArRooftopAnchorState
należy do operacji asynchronicznej i jest częścią ostatecznego wyniku typu Future.
switch (rooftop_anchor_state) { case AR_ROOFTOP_ANCHOR_STATE_SUCCESS: // A resolving task for this anchor has been successfully resolved. break; case AR_ROOFTOP_ANCHOR_STATE_ERROR_UNSUPPORTED_LOCATION: // The requested anchor is in a location that isn't supported by the // Geospatial API. break; case AR_ROOFTOP_ANCHOR_STATE_ERROR_NOT_AUTHORIZED: // An error occurred while authorizing your app with the ARCore API. See // https://developers.google.com/ar/reference/c/group/ar-anchor#:~:text=from%20this%20error.-,AR_ROOFTOP_ANCHOR_STATE_ERROR_NOT_AUTHORIZED,-The%20authorization%20provided // for troubleshooting steps. break; case AR_ROOFTOP_ANCHOR_STATE_ERROR_INTERNAL: // The Rooftop anchor could not be resolved due to an internal error. break; default: break; }
Co dalej?
- Upewnij się, że znasz limit wykorzystania interfejsu API geoprzestrzenny.