ใช้อาคารและภูมิประเทศรอบตัวคุณใน Android SDK (Kotlin/Java)

Streetscape Geometry API มีเรขาคณิตของภูมิประเทศ อาคาร หรือโครงสร้างอื่นๆ ในฉาก เรขาคณิตสามารถใช้สำหรับการซ้อนทับ การแสดงภาพ หรือวางเนื้อหา AR ผ่าน API การทดสอบ Hit ข้อมูลเรขาคณิตของถนนได้จากภาพถ่าย Google Street View

ลองใช้ตัวอย่าง

แอปตัวอย่างgeospatial_java แสดงวิธีขอรับและแสดงผล Streetscape Geometries

ตั้งค่า Geospatial API

ในการใช้ Streetscape Geometry คุณจะต้องตั้งค่า Geospatial API ในโปรเจ็กต์ของคุณ โปรดทำตามวิธีการในการเปิดใช้ Geospatial API เพื่อตั้งค่า Geospatial API

เปิดใช้เรขาคณิตของภาพถนน

API ทางภูมิศาสตร์จะรับข้อมูลเรขาคณิตของ Streetscape เมื่อตั้งค่า 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 มีข้อมูลเกี่ยวกับอาคาร

อาคาร 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 วิธีดังนี้

ทำการทดสอบ Hit กับ StreetscapeGeometry

คุณใช้ Frame.hitTest() เพื่อทดสอบกับเรขาคณิตของ Streetscape ได้ หากพบทางแยก HitResult จะมีข้อมูลตำแหน่งเกี่ยวกับตำแหน่งของ Hit รวมถึงการอ้างอิง StreetscapeGeometry ที่ Hit เรขาคณิตของภาพถนนนี้สามารถส่งไปยัง 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)
  }
}

เปิดใช้ความลึกของภูมิสารสนเทศ

ความลึกเชิงพื้นที่จะรวมเรขาคณิตของภาพถนนเข้ากับอินพุตจากเซ็นเซอร์ในพื้นที่เพื่อปรับปรุงข้อมูลความลึก เมื่อเปิดใช้ความลึกของภูมิสารสนเทศ ความลึกของภาพ และภาพความลึกที่เป็นข้อมูลดิบ ได้รับการแก้ไขให้รวมเรขาคณิตของ Streetscape แบบแรสเตอร์ นอกเหนือจากความลึกที่สังเกตได้ในพื้นที่ ซึ่งอาจช่วยเพิ่มความแม่นยำของท่าทางโดยใช้ข้อมูลเชิงลึกเกี่ยวกับภาพ