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