Streetscape Geometry API는 장면에 있는 지형, 건물 또는 기타 구조물의 도형을 제공합니다. 이 도형은 Hit Test API를 통해 오클루전, 렌더링 또는 AR 콘텐츠 배치에 사용할 수 있습니다. 스트리트스케이프 도형 데이터는 Google 스트리트 뷰 이미지를 통해 가져옵니다.
샘플 사용해 보기
geospatial_java 샘플 앱은 거리 풍경 도형을 가져오고 렌더링하는 방법을 보여줍니다.
Geospatial API 설정
Streetscape Geometry를 사용하려면 프로젝트에서 Geospatial API를 설정해야 합니다. Geospatial API 사용 설정 안내에 따라 Geospatial API를 설정하세요.
거리 풍경 도형 사용 설정
Geospatial API는 GeospatialMode
가 GeospatialMode.ENABLED
로 설정되고 StreetscapeGeometryMode
이 StreetscapeGeometryMode.ENABLED
로 설정된 경우 Streetscape Geometry 데이터를 가져옵니다.
자바
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 세션에서 Streetscape Geometry 가져오기
Session.getAllTrackables()
및 StreetscapeGeometry.class
를 사용하여 결과를 필터링합니다.
자바
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()
얼굴을 구성하는 정점의 색인을 가져옵니다.
StreetscapeGeometry
에 AR 콘텐츠 첨부
AR 콘텐츠를 Streetscape Geometry에 연결하는 방법에는 두 가지가 있습니다.
- Geospatial Depth를 사용 설정하고 Depth Hit Test를 사용합니다. 이 방법이 권장되고 쉬운 방법입니다.
Trackable.createAnchor()
를 사용하여StreetscapeGeometry
에 연결된 지정된 포즈에 앵커를 만듭니다. 이 앵커는 상위StreetscapeGeometry
에서 추적 상태를 상속받습니다.
StreetscapeGeometry
에 대해 히트 테스트를 실행합니다.
Frame.hitTest()
를 사용하여 Streetscape Geometry에 대한 히트 테스트를 진행할 수 있습니다. 교차점이 있으면 HitResult
에 적중 위치에 대한 포즈 정보와 적중된 StreetscapeGeometry
에 대한 참조가 포함됩니다. 이 거리 풍경 도형을 Trackable.createAnchor()
에 전달하여 연결된 앵커를 만들 수 있습니다.
자바
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) } }
Geospatial Depth 사용 설정
Geospatial Depth는 Streetscape Geometry와 로컬 센서 입력을 결합하여 깊이 데이터를 개선합니다. Geospatial Depth가 사용 설정되면 출력 깊이와 원본 깊이 이미지가 로컬에서 관찰된 깊이 외에도 래스터화된 Streetscape Geometry를 포함하도록 수정됩니다. 이렇게 하면 심도를 사용하는 포즈의 정확성이 개선될 수 있습니다.