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

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 มีข้อมูลเกี่ยวกับอาคาร ดังนี้

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

ทำการทดสอบ 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)
  }
}

เปิดใช้ความชัดลึกเชิงพื้นที่

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