ממשקי ה-API של גיאומטריה של סביבת הרחוב מספקים את הגיאומטריה של פני השטח, הבניינים או מבנים אחרים בסצנה. אפשר להשתמש בגיאומטריה לצורך חסימה, רינדור או מיקום של תוכן AR באמצעות ממשקי API לבדיקת היט. נתוני הגיאומטריה של סביבת הרחוב מתקבלים באמצעות תמונות מ-Google Street View.
ניסיון של הדוגמה
אפליקציית הדוגמה geospatial_java מדגימה איך לקבל ולייצר גיאומטריות של סביבת הרחוב.
הגדרת ה-API הגיאו-מרחבי
כדי להשתמש ב-Streetscape Geometry, צריך להגדיר את Geospatial API בפרויקט. כדי להגדיר את ה-Geospatial API, פועלים לפי ההוראות להפעלת ה-API הגיאוגרפי המרחב המשותף.
הפעלת גיאומטריה של סביבת הרחוב
Geospatial API מקבל נתונים של גיאומטריה של סביבת הרחוב כאשר השדה GeospatialMode
מוגדר לערך GeospatialMode.ENABLED
והשדה StreetscapeGeometryMode
מוגדר לערך StreetscapeGeometryMode.ENABLED
.
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 } )
קבלת גיאומטריה של Streetscape בסשן ARCore
משתמשים ב-Session.getAllTrackables()
וב-StreetscapeGeometry.class
כדי לסנן את התוצאות.
Java
session.getAllTrackables(StreetscapeGeometry.class);
Kotlin
session.getAllTrackables(StreetscapeGeometry::class.java)
הסבר על StreetscapeGeometry
StreetscapeGeometry
מכיל מידע על מבנה:
-
StreetscapeGeometry.getType()
המאפיין הזה מזהה את StreetscapeGeometry כשטח או כבניין. -
StreetscapeGeometry.getMesh()
קבלת פוליגוןMesh
שתואם לשטח או למבנה הזה. -
StreetscapeGeometry.getMeshPose()
תיאור המקור של הגיאומטריה. צריך להשתמש ב-StreetscapeGeometry.getMeshPose()
כדי לבצע טרנספורמציה של כל הנקודות ב-Mesh
. -
StreetscapeGeometry.getQuality()
הערך הזה מציין את איכות נתוני הרשת. רמות הפירוט מתוארות בתקן של CityGML 2.0.
מבנה LOD 1
StreetscapeGeometry.Quality.BUILDING_LOD_1
מורכב משטחי בניין שנמתחים כלפי מעלה עד לחלק העליון השטוח. יכול להיות שהגובה של המבנים לא מדויק.
בניין ברמת פירוט 2
ל-StreetscapeGeometry.Quality.BUILDING_LOD_2
תהיה גיאומטריה באיכות גבוהה יותר. קירות וגגות רשת יהיו דומים יותר למבנה של הבניין. תכונות קטנות יותר, כמו תנורים או פתחי אוורור בגג, עשויות עדיין להימצא מחוץ לרשת.
הסבר על Mesh
Mesh
היא רשת פוליגונים שמייצגת שחזור של פני השטח של גיאומטריה של סביבת הרחוב.
כל Mesh
כולל מאגר נתונים זמני של קודקוד ומאגר נתונים זמני של אינדקס:
Mesh.getVertexListSize()
אחזור מספר הנקודות (vertices) ברשת הזו.Mesh.getVertexList()
קבלת המיקומים המקושרים של קודקודי הרשת, בקואורדינטות ביחס ל-StreetscapeGeometry.getMeshPose()
.Mesh.getIndexListSize()
אחזור מספר האינדקסים של הרשת.Mesh.getIndexList()
קבלת האינדקסים של הקודקודים שמרכיבים פנים.
צירוף תוכן AR ל-StreetscapeGeometry
יש שתי דרכים לצרף תוכן AR לגיאומטריה של סביבת הרחוב:
- מפעילים את עומק גיאו-מרחבי ומשתמשים בבדיקת היתר של עומק. זו השיטה המומלצת והקלה יותר.
- משתמשים ב-
Trackable.createAnchor()
כדי ליצור עוגן בתנוחה נתונה שמצורפת ל-StreetscapeGeometry
. קובץ העוגן הזה יקבל בירושה את מצב המעקב שלו מתבנית ההורהStreetscapeGeometry
.
ביצוע בדיקת היט מול StreetscapeGeometry
אפשר להשתמש ב-Frame.hitTest()
כדי לבצע בדיקת היתכנות (hit-test) לגיאומטריה של סביבת הרחוב. אם נמצאות צמתים, השדה HitResult
מכיל פרטי תנוחה לגבי מיקום ההיט, וכן הפניה ל-StreetscapeGeometry
שהוכה. ניתן להעביר את הגיאומטריה של Streetscape אל Trackable.createAnchor()
כדי ליצור עוגן שמוצמד אליו.
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) } }
הפעלת עומק גיאו-מרחבי
התכונה עומק גיאו-מרחבי משלבת בין גיאומטריה של סביבת הרחוב לבין קלט של חיישנים מקומיים כדי לשפר את נתוני העומק. כשהתכונה 'עומק גיאו-מרחבי' מופעלת, עומק הפלט ותמונות העומק הגולמיות משתנים כך שיכללו גיאומטריה של סביבת הרחוב בפורמט רסטר, בנוסף לעומק שנצפה באופן מקומי. כך ניתן לשפר את הדיוק של תנוחות באמצעות התכונה 'עומק'.