API Hình học của cảnh quan đường phố cung cấp hình dạng của địa hình, toà nhà hoặc các cấu trúc khác trong một cảnh. Hình dạng có thể được dùng để che khuất, hiển thị hoặc đặt nội dung AR thông qua API kiểm tra lượt truy cập. Dữ liệu Hình học của cảnh quan đường phố được thu thập thông qua hình ảnh trong Chế độ xem đường phố của Google.
Dùng thử mẫu
Ứng dụng mẫu geospatial_java minh hoạ cách thu thập và kết xuất Hình học đườ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 của mình. Làm theo hướng dẫn về cách 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 phong cảnh đườ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.ENABLED
và StreetscapeGeometryMode
đượ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 } )
Thu thập Hình học đường phố trong phiên ARCore
Sử dụngSession.getAllTrackables()
và 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à:
-
StreetscapeGeometry.getType()
Xác định StreetscapeGeometry là địa hình hoặc tòa nhà. -
StreetscapeGeometry.getMesh()
Nhận một đa giácMesh
tương ứng với địa hình hoặc toà nhà này. -
StreetscapeGeometry.getMeshPose()
Mô tả nguồn gốc của hình. Tất cả các điểm trongMesh
phải được chuyển đổi trướcStreetscapeGeometry.getMeshPose()
. -
StreetscapeGeometry.getQuality()
Cung cấp chất lượng của dữ liệu lưới. Mức độ chi tiết được mô tả trong tiêu chuẩn CityGML 2.0.
LOD 1 của toà nhà
StreetscapeGeometry.Quality.BUILDING_LOD_1
bao gồm đất xây dựng được đẩy lên trên đến một đỉnh bằng phẳng. Chiều cao của toà nhà có thể không chính xác.
Xây dựng LOD 2
StreetscapeGeometry.Quality.BUILDING_LOD_2
sẽ có độ chân 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 hơi trên mái vẫn có thể chọc 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:
Mesh.getVertexListSize()
Truy xuất số đỉnh trong lưới này.Mesh.getVertexList()
Lấy vị trí nối của các đỉnh trong lưới, theo toạ độ so vớiStreetscapeGeometry.getMeshPose()
.Mesh.getIndexListSize()
Truy xuất số lượng chỉ mục trong lưới này.Mesh.getIndexList()
Lấy chỉ mục của các đỉnh tạo nên một mặt.
Đính kèm nội dung thực tế tăng cường vào StreetscapeGeometry
Có hai cách để đính kèm nội dung AR vào Streetscape Geometry:
- Bật tính năng Độ sâu không gian địa lý và sử dụng tính năng Kiểm tra lượt truy cập theo chiều sâu. Đây là phương pháp được đề xuất và dễ thực hiện hơn.
- Sử dụng
Trackable.createAnchor()
để tạo một điểm neo tại một tư thế cho sẵn được đính kèm vàoStreetscapeGeometry
. Quảng cáo cố định cuối màn hình này sẽ kế thừa trạng thái theo dõi từ thư mục mẹStreetscapeGeometry
.
Thực hiện kiểm thử lượt truy cập đối với StreetscapeGeometry
Bạn có thể sử dụng Frame.hitTest()
để kiểm tra nhấn theo Streetscape Geometry. Nếu tìm thấy các giao lộ, HitResult
chứa thông tin tư thế về vị trí va chạm cũng như tham chiếu đến StreetscapeGeometry
đã bị nhấn. Bạn có thể truyền hình ảnh cảnh quan đường phố này đến Trackable.createAnchor()
để tạo một điểm neo đi kèm.
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 tính năng Độ sâu không gian địa lý
Độ sâu không gian địa lý kết hợp Hình học cảnh đường phố với đầu vào cảm biến cục bộ để cải thiện dữ liệu độ sâu. Khi tính năng Độ sâu không gian địa lý được bật, độ sâu đầu ra và hình ảnh chiều sâu thô được sửa đổi để bao gồm Hình học cảnh quan đường phố được tạo điểm ảnh ngoài độ sâu 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 tính năng Chiều sâu.