Streetscape Geometry API'leri, bir sahnedeki arazinin, binaların veya diğer yapıların geometrisini sunar. Geometri; isabet testi API'leri aracılığıyla AR içeriğini kapamak, oluşturmak veya yerleştirmek için kullanılabilir. Streetscape Geometri verileri, Google Street View görüntüleri aracılığıyla elde edilir.
Örneği deneyin
geospatial_java örnek uygulaması, Streetscape Geometrislerinin nasıl edinileceğini ve oluşturulduğunu gösterir.
Geospatial API'yi ayarlama
Streetscape Geometri'yi kullanmak için projenizde Geospatial API'yi ayarlamanız gerekir. Geospatial API'yi ayarlamak için Geospatial API'yi etkinleştirme bölümündeki talimatları uygulayın.
Streetscape Geometrisini Etkinleştir
Geospatial API, GeospatialMode
GeospatialMode.ENABLED
ve StreetscapeGeometryMode
StreetscapeGeometryMode.ENABLED
olarak ayarlandığında Streetscape Geometri verilerini alır.
Java
Config config = session.getConfig(); // Streetscape Geometry requires the Geospatial API to be enabled. config.setGeospatialMode(Config.GeospatialMode.ENABLED); // Enable Streetscape Geometry. config.setStreetscapeGeometryMode(Config.StreetscapeGeometryMode.ENABLED); session.configure(config);
Kotlin
session.configure( session.config.apply { // Streetscape Geometry requires the Geospatial API to be enabled. geospatialMode = Config.GeospatialMode.ENABLED // Enable Streetscape Geometry. streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED } )
ARCore oturumunda Streetscape Geometrisi elde etme
Sonuçları filtrelemek içinSession.getAllTrackables()
ve StreetscapeGeometry.class
seçeneklerini kullanın.
Java
session.getAllTrackables(StreetscapeGeometry.class);
Kotlin
session.getAllTrackables(StreetscapeGeometry::class.java)
StreetscapeGeometry
adlı ürünü anlayın
StreetscapeGeometry
bir bina hakkında bilgiler içerir:
-
StreetscapeGeometry.getType()
StreetscapeGeometry'yi arazi veya bina olarak tanımlar. -
StreetscapeGeometry.getMesh()
Bu araziye veya binaya karşılık gelen bir poligonMesh
edinin. -
StreetscapeGeometry.getMeshPose()
Geometrinin kökenini açıklar.Mesh
içindeki tüm noktalarStreetscapeGeometry.getMeshPose()
ile dönüştürülmelidir. -
StreetscapeGeometry.getQuality()
Örgü verilerinin kalitesini sağlar. Ayrıntı düzeyleri CityGML 2.0 standardında açıklanmıştır.
Bina LOD 1
StreetscapeGeometry.Quality.BUILDING_LOD_1
, yukarı doğru düz bir tepeye uzanan bina ayak izlerinden oluşur. Bina yükseklikleri doğru olmayabilir.
Bina LOD 2
StreetscapeGeometry.Quality.BUILDING_LOD_2
, geometriye daha iyi uyum sağlar. Örgü duvarlar ve çatılar binanın şekliyle daha uyumlu olacaktır. Bacalar veya çatı menfezleri gibi küçük detaylar yine de ağın dışına kırılabilir.
Mesh
adlı ürünü anlayın
Mesh
, Streetscape Geometrisinin yüzey yeniden yapısını temsil eden bir poligon örgüdür.
Her Mesh
bir köşe arabelleği ve dizin arabelleği içerir:
Mesh.getVertexListSize()
Bu örgüdeki köşe noktalarının sayısını alır.Mesh.getVertexList()
StreetscapeGeometry.getMeshPose()
ile göreli koordinatlarla örgü köşelerinin birleştirilmiş konumlarını elde edin.Mesh.getIndexListSize()
Bu örgüdeki dizin sayısını alır.Mesh.getIndexList()
Bir yüzü oluşturan köşelerin indekslerini elde edin.
StreetscapeGeometry
'e artırılmış gerçeklik içeriği ekleme
Streetscape Geometri'ye AR içeriği eklemenin iki yolu vardır:
- Coğrafi Derinlik'i etkinleştirin ve Derinlik isabet testi kullanın. Bu, önerilen ve daha kolay yöntemdir.
StreetscapeGeometry
ile ilişkili belirli bir pozda bir sabit oluşturmak içinTrackable.createAnchor()
aracını kullanın. Bu sabit, izleme durumunu üst öğeden (StreetscapeGeometry
) devralacak.
StreetscapeGeometry
ile isabet testi yapın.
Frame.hitTest()
, Streetscape Geometry'de isabet testi yapmak için kullanılabilir. Kesişmeler bulunursa HitResult
, isabet konumuyla ilgili poz bilgilerinin yanı sıra isabet alan StreetscapeGeometry
için bir referans içerir. Bu Streetscape Geometrisi, kendisine ekli bir çapa oluşturulması için Trackable.createAnchor()
'e iletilebilir.
Java
for (HitResult hit : frame.hitTest(singleTapEvent)) { if (hit.getTrackable() instanceof StreetscapeGeometry) { Pose hitPose = hit.getHitPose(); hit.getTrackable().createAnchor(hitPose); } }
Kotlin
for (hit in frame.hitTest(singleTapEvent)) { if (hit.trackable is StreetscapeGeometry) { val hitPose = hit.hitPose hit.trackable.createAnchor(hitPose) } }
Coğrafi Derinliği Etkinleştir
Coğrafi Derinlik, derinlik verilerini iyileştirmek için Streetscape Geometrisini yerel sensör girişiyle birleştirir. Coğrafi Derinlik etkinleştirildiğinde, çıkış derinliği ve ham derinlik görüntüleri, yerel olarak gözlemlenen derinliğe ek olarak pikselleştirilmiş Streetscape Geometrisi içerecek şekilde değiştirilir. Bu, Derinlik özelliği kullanılarak pozların doğruluğunu artırabilir.