Sử dụng các toà nhà và địa hình xung quanh bạn trên SDK Android (Kotlin/Java)

API Hình học cảnh đường phố cung cấp hình học của địa hình, toà nhà hoặc các cấu trúc khác trong một cảnh. Bạn có thể sử dụng hình học để che khuất, kết xuất hoặc đặt nội dung AR thông qua các API kiểm thử lượt nhấn. Dữ liệu Hình học cảnh quan đường phố được lấy thông qua hình ảnh của Chế độ xem đường phố của Google.

Thử mẫu

Ứng dụng mẫu geospatial_java minh hoạ cách lấy và kết xuất Hình học cảnh quan đường phố.

Thiết lập API không gian địa lý

Để sử dụng Streetscape Geometry, bạn cần thiết lập API không gian địa lý trong dự án. Làm theo hướng dẫn về Bật API không gian địa lý để thiết lập API không gian địa lý.

Bật tính năng Hình học cảnh quan đường phố

API Không gian địa lý thu thập dữ liệu Hình học cảnh quan đường phố khi GeospatialMode được đặt thành GeospatialMode.ENABLEDStreetscapeGeometryMode được đặt thành 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
  }
)

Nhận Hình học cảnh đường phố trong phiên ARCore

Sử dụng Session.getAllTrackables() và sử dụng StreetscapeGeometry.class để lọc kết quả.

Java

session.getAllTrackables(StreetscapeGeometry.class);

Kotlin

session.getAllTrackables(StreetscapeGeometry::class.java)

Tìm hiểu về StreetscapeGeometry

StreetscapeGeometry chứa thông tin về một toà nhà:

LOD 1 của toà nhà

StreetscapeGeometry.Quality.BUILDING_LOD_1 bao gồm các dấu vết của toà nhà được đẩy lên trên đến một đỉnh phẳng. Chiều cao của tòa nhà có thể không chính xác.

Xây dựng LOD 2

StreetscapeGeometry.Quality.BUILDING_LOD_2 sẽ có hình học có độ trung thực cao hơn. Tường và mái bằng lưới sẽ phù hợp hơn với hình dạng của toà nhà. Các đặc điểm nhỏ hơn như ống khói hoặc lỗ thông gió trên mái nhà vẫn có thể nhô ra ngoài lưới.

Tìm hiểu về Mesh

Mesh là một lưới đa giác thể hiện sự tái tạo bề mặt của Hình học cảnh quan đường phố. Mỗi Mesh bao gồm một vùng đệm đỉnh và vùng đệm chỉ mục:

Đính kèm nội dung AR vào StreetscapeGeometry

Có hai cách để đính kèm nội dung AR vào Streetscape Geometry:

Thực hiện kiểm thử nhấn đối với StreetscapeGeometry

Bạn có thể dùng Frame.hitTest() để kiểm thử nhấn đối với Hình học cảnh quan đường phố. Nếu phát hiện thấy giao điểm, HitResult sẽ chứa thông tin về tư thế tại vị trí nhấn cũng như tham chiếu đến StreetscapeGeometry đã được nhấn. Bạn có thể truyền Hình học cảnh quan đường phố này đến Trackable.createAnchor() để tạo một neo được đính kèm vào hình học đó.

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)
  }
}

Bật độ sâu không gian địa lý

Chiều sâu không gian địa lý kết hợp Hình học cảnh đường phố với dữ liệu đầu vào của cảm biến cục bộ để nâng cao dữ liệu chiều sâu. Khi bạn bật tính năng Chiều sâu không gian địa lý, chiều sâu đầu ra và hình ảnh chiều sâu thô sẽ được sửa đổi để bao gồm cả Hình học cảnh đường phố được quét cùng với chiều sâu được quan sát cục bộ. Điều này có thể cải thiện độ chính xác của các tư thế bằng cách sử dụng Độ sâu.