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ń.
Użyj przekształcenia z testu działań i przekształć ją w GARGeospatialTransform
. Służy do umieszczania dowolnego z 3 opisanych typów reklam zakotwiczonych.
Pobieranie przekształcenia geoprzestrzennego z przekształcenia AR
GARSession.geospatialTransformFromTransform:error:
udostępnia dodatkowy sposób określania szerokości i długości geograficznej przez konwertowanie przekształcenia AR na przekształcenie geoprzestrzenne.
Pobieranie przekształcenia AR z przekształcenia geoprzestrzennego
GARSession.transformFromGeospatialCoordinate:altitude:eastUpSouthQTarget:error:
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 transformację 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
GARGeospatialTransform.eastUpSouthQTarget
wyodrębnia orientację z przekształcenia geoprzestrzennego i zwraca 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. Opiera się na przekształceniu i orientacji, które musi zostać umiejscowiony 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ą
GARGeospatialTransform
, 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
GARGeospatialTransform
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 createAnchorWithCoordinate:altitude:eastUpSouthQAnchor:error:
w celu zakotwiczenia treści
w określonych przez Ciebie współrzędnych geograficznych.
NSError *error = nil;
GARAnchor *anchor = [self.garSession createAnchorWithCoordinate:coordinate
altitude:altitude
eastUpSouthQAnchor:eastUpSouthQAnchor
error:&error];
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 ARWorldTrackingConfiguration.PlaneDetection
, 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 GARSession.createAnchorWithCoordinate:altitudeAboveTerrain:eastUpSouthQAnchor:completionHandler:error:
.
Reklama zakotwiczona nie będzie od razu gotowa i trzeba ją rozwiązać. Po rozwiązaniu problemu będzie on dostępny w GARCreateAnchorOnTerrainFuture
.
GARCreateAnchorOnTerrainFuture *future = [self.garSession createAnchorWithCoordinate:coordinate
altitudeAboveTerrain:altitude
eastUpSouthQAnchor:eastUpSouthQTarget
completionHandler:^(GARAnchor *anchor, GARTerrainAnchorState state) {
// handle completion
}
error:&error];
Sprawdź przyszłość
Przyszłość będzie mieć powiązaną wartość GARFutureState
.
Stan | Opis |
---|---|
GARFutureStatePending |
Operacja jest nadal w toku. |
GARFutureStateDone |
Operacja została zakończona i wyniki są dostępne. |
GARFutureStateCancelled |
Operacja została anulowana. |
Sprawdzanie stanu zakotwiczenia terenu uzyskanego w wyniku przyszłości
GARTerrainAnchorState
należy do operacji asynchronicznej i jest częścią ostatecznego wyniku typu Future.
switch (future.resultTerrainAnchorState) {
case GARTerrainAnchorStateSuccess:
// Terrain anchor finished resolving.
break;
case GARTerrainAnchorStateErrorUnsupportedLocation:
// The requested anchor is in a location that isn't supported by the Geospatial API.
break;
case GARTerrainAnchorStateErrorNotAuthorized:
// An error occurred while authorizing your app with the ARCore API. See
// https://developers.google.com/ar/reference/ios/group/GARTerrainAnchorState#garterrainanchorstateerrornotauthorized
// for troubleshooting steps.
break;
case GARTerrainAnchorStateErrorInternal:
// 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 GARSession.createAnchorWithCoordinate:altitudeAboveRooftop:eastUpSouthQAnchor:completionHandler:error:
. Podobnie jak w przypadku kotwicy terenu, uzyskasz też dostęp do GARFutureState
przyszłości. Następnie możesz sprawdzić wynik w przyszłości, aby uzyskać dostęp do: GARRooftopAnchorState
.
GARCreateAnchorOnRooftopFuture *future = [self.garSession createAnchorWithCoordinate:coordinate
altitudeAboveRooftop:altitude
eastUpSouthQAnchor:eastUpSouthQTarget
completionHandler:^(GARAnchor *anchor, GARRooftopAnchorState state) {
// handle completion
}
error:&error];
Sprawdź przyszłość
Przyszłość będzie miała powiązaną wartość GARFutureState
. Zobacz tabelę powyżej.
Sprawdzanie stanu zakotwiczenia dachu w przypadku wyniku przyszłego
GARRooftopAnchorState
należy do operacji asynchronicznej i jest częścią ostatecznego wyniku typu Future.
switch (future.resultRooftopAnchorState) {
case GARRooftopAnchorStateSuccess:
// Rooftop anchor finished resolving.
break;
case GARRooftopAnchorStateErrorUnsupportedLocation:
// The requested anchor is in a location that isn't supported by the Geospatial API.
break;
case GARRooftopAnchorStateErrorNotAuthorized:
// An error occurred while authorizing your app with the ARCore API. See
// https://developers.google.com/ar/reference/ios/group/GARRooftopAnchorState#garrooftopanchorstateerrornotauthorized
// for troubleshooting steps.
break;
case GARRooftopAnchorStateErrorInternal:
// 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.