Streetscape Geometry API เป็นเรขาคณิตของภูมิประเทศ อาคาร หรือโครงสร้างอื่นๆ ในฉาก เรขาคณิตนั้นสามารถใช้สำหรับการซ้อนทับ แสดงผล หรือวางเนื้อหา AR ผ่าน API การทดสอบ Hit ข้อมูลเรขาคณิตใน Streetscape ได้มาจากภาพ Google Street View
ดูตัวอย่าง
แอปตัวอย่าง geospatial_java แสดงวิธีรับและแสดงผล Streetscape Geometries
ตั้งค่า Geospatial API
หากต้องการใช้ Streetscape Geometry คุณจะต้องตั้งค่า Geospatial API ในโครงการ ทำตามคำแนะนำในการเปิดใช้ Geospatial API เพื่อตั้งค่า Geospatial API
เปิดใช้เรขาคณิตใน Streetscape
Geospatial API รับข้อมูล Streetscape Geometry เมื่อตั้งค่า 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()
ระบุเรขาคณิตของ Streetscape เป็นภูมิประเทศหรือสิ่งปลูกสร้าง -
StreetscapeGeometry.getMesh()
รับรูปหลายเหลี่ยมMesh
ที่สอดคล้องกับภูมิประเทศหรือสิ่งปลูกสร้างนี้ -
StreetscapeGeometry.getMeshPose()
อธิบายที่มาของเรขาคณิต จุดทั้งหมดในMesh
ควรเปลี่ยนรูปแบบภายในStreetscapeGeometry.getMeshPose()
-
StreetscapeGeometry.getQuality()
ระบุคุณภาพของข้อมูล Mesh ระดับรายละเอียดอธิบายไว้ในมาตรฐาน CityGML 2.0
อาคาร LOD 1
StreetscapeGeometry.Quality.BUILDING_LOD_1
ประกอบด้วยรอยเท้าสิ่งปลูกสร้างที่ยื่นขึ้นไปยังแนวราบด้านบน ความสูงของอาคารอาจไม่ถูกต้อง
อาคาร LOD 2
StreetscapeGeometry.Quality.BUILDING_LOD_2
จะมีรูปทรงเรขาคณิตที่มีความแม่นยำสูงกว่า ผนังและหลังคาแบบตาข่ายจะตรงกับรูปทรงของอาคารมากขึ้น ส่วนฟีเจอร์ขนาดเล็กกว่า เช่น ปล่องไฟหรือช่องระบายอากาศบนหลังคา อาจยังโผล่ออกมานอกตาข่าย
ทำความเข้าใจเกี่ยวกับ Mesh
Mesh
คือตารางรูปหลายเหลี่ยมแสดงการสร้างพื้นผิวของเรขาคณิตใน Streetscape
Mesh
แต่ละรายการจะมีบัฟเฟอร์จุดยอดและบัฟเฟอร์ดัชนีดังนี้
Mesh.getVertexListSize()
ดึงข้อมูลจำนวนจุดยอดในตาข่ายนี้Mesh.getVertexList()
รับตำแหน่งต่อกันของจุดตัดของตาข่ายในพิกัดที่สัมพันธ์กับStreetscapeGeometry.getMeshPose()
Mesh.getIndexListSize()
ดึงข้อมูลจำนวนดัชนีในตาข่ายนี้Mesh.getIndexList()
รับดัชนีของจุดยอดที่ประกอบกันเป็นใบหน้า
แนบเนื้อหา AR ไปยัง StreetscapeGeometry
การแนบเนื้อหา AR กับ Streetscape Geometry ทำได้ 2 วิธีดังนี้
- เปิดใช้ Geospatial Depth และใช้ Depth Hit-test ซึ่งเป็นวิธีที่แนะนำซึ่งทำได้ง่ายกว่า
- ใช้
Trackable.createAnchor()
เพื่อสร้างแท็ก Anchor ในท่าที่กำหนดไว้และแนบไว้กับStreetscapeGeometry
โฆษณา Anchor นี้จะรับช่วงสถานะการติดตามจากStreetscapeGeometry
ระดับบนสุด
ทำการทดสอบ Hit กับ StreetscapeGeometry
สามารถใช้ Frame.hitTest()
เพื่อทดสอบ Hit กับเรขาคณิตของ Streetscape ได้ หากพบทางแยก HitResult
จะมีข้อมูลท่าทางเกี่ยวกับตำแหน่งของ Hit รวมถึงการอ้างอิง StreetscapeGeometry
ที่ชนอยู่ คุณสามารถส่งเรขาคณิตของ Streetscape นี้ไปยัง Trackable.createAnchor()
เพื่อสร้าง Anchor ที่แนบกับภาพได้
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) } }
เปิดใช้ความลึกของภูมิสารสนเทศ
ความลึกของภูมิสารสนเทศจะรวมเรขาคณิตของ Streetscape เข้ากับอินพุตเซ็นเซอร์ในเครื่องเพื่อปรับปรุงข้อมูลความลึก เมื่อเปิดใช้ Geospatial Depth อยู่ ระบบจะแก้ไขภาพความลึกของภาพและ RAW ของเอาต์พุตให้รวมเรขาคณิต Streetscape แบบแรสเตอร์นอกเหนือจากความลึกที่สังเกตได้ในพื้นที่ การดำเนินการนี้อาจปรับปรุงความแม่นยำของท่าทางโดยใช้ความลึก