1. Tổng quan
ARCore là khung của Google để tạo trải nghiệm Thực tế tăng cường trên điện thoại thông minh. ARCore Geospatial API mới mang đến một khía cạnh mới cho Thực tế tăng cường, cho phép bạn đặt các điểm tham chiếu Thực tế tăng cường theo vị trí xung quanh các địa danh trong thế giới thực.
Sản phẩm bạn sẽ tạo ra
Trong lớp học lập trình này, bạn sẽ bắt đầu sử dụng ARCore Geospatial API. Bạn sẽ khám phá những thông tin mà Geospatial API có thể cung cấp cho trải nghiệm thực tế tăng cường tổng thể của bạn, cũng như cách sử dụng dữ liệu này để hỗ trợ trải nghiệm chỉ đường thực tế tăng cường đơn giản.

Kiến thức bạn sẽ học được
- Cách thiết lập một dự án ARCore sử dụng Geospatial API.
- Cách yêu cầu dữ liệu địa lý từ Geospatial API và hiển thị dữ liệu đó bằng Google Maps.
- Cách đặt một Anchor được gắn vào một vị trí trong thế giới thực.
Bạn cần có
- Một thiết bị Android có hỗ trợ ARCore, được kết nối với máy phát triển bằng cáp USB và được định cấu hình bằng chế độ gỡ lỗi qua USB.
- Android Studio đã được cài đặt và định cấu hình để tạo ứng dụng Android.
- Dịch vụ Google Play cho Thực tế tăng cường phiên bản 1.31 trở lên, được cài đặt trên thiết bị phát triển Android.
2. Thiết lập môi trường phát triển
Thiết lập Android Studio
Để giúp bạn bắt đầu sử dụng Geospatial API, chúng tôi đã cung cấp một dự án khởi đầu bao gồm những điểm cơ bản của một dự án ARCore được tích hợp với Google Maps SDK. Điều này giúp bạn bắt đầu nhanh chóng với Geospatial API.
- Khởi động Android Studio rồi nhập một dự án từ VCS.
- Nếu bạn đã mở một dự án, hãy sử dụng File > New > Project from Version Control... (Tệp > Mới > Dự án từ hệ thống Quản lý phiên bản...).
- Nếu bạn thấy cửa sổ Welcome to Android Studio (Chào mừng bạn đến với Android Studio), hãy sử dụng Get from VCS (Lấy trên VCS).

- Chọn Git rồi dùng URL
https://github.com/google-ar/codelab-geospatial.gitđể nhập dự án.
Thiết lập một dự án trên Google Cloud
Geospatial API sử dụng hình ảnh Street View kết hợp với thông tin về từ kế và cảm biến camera của thiết bị để cải thiện các giá trị hướng. Để sử dụng dịch vụ này, bạn cần thiết lập một dự án trên Google Cloud.
- Tạo một dự án trong Google Cloud Console:
- Truy cập vào phần Tạo dự án trong Google Cloud Platform.

- Nhập Tên dự án phù hợp (ví dụ: "Dự án ARCore Geospatial API") rồi chọn một vị trí bất kỳ.
- Nhấp vào Tạo.
- Truy cập vào phần Tạo dự án trong Google Cloud Platform.
- Bật các API cần thiết:
- Tạo thông tin xác thực Khoá API:
- Trong phần API và Dịch vụ, hãy chọn Thông tin xác thực.
- Trong thanh trên cùng, hãy nhấp vào Tạo thông tin xác thực rồi chọn Khoá API.
- Ghi lại khoá đã tạo vì bạn sẽ cần khoá này cho bước tiếp theo. Quay lại trang Thông tin đăng nhập nếu bạn cần truy xuất thông tin này.
Với các bước này, bạn đã tạo một Dự án Google Cloud có uỷ quyền khoá API và bạn đã sẵn sàng sử dụng Geospatial API.
Tích hợp khoá API với dự án Android Studio
Để liên kết khoá API từ Google Cloud với dự án của bạn, hãy mở dự án mà bạn đã tạo trong Android Studio rồi sửa đổi khoá API:
- Mở app > src > AndroidManifest.xml.
- Tìm các mục
meta-datasau đây:<meta-data android:name="com.google.android.ar.API_KEY" android:value="PLACEHOLDER_API_KEY" /> <meta-data android:name="com.google.android.geo.API_KEY" android:value="PLACEHOLDER_API_KEY" /> - Thay thế
PLACEHOLDER_API_KEYbằng khoá API mà bạn đã tạo trong dự án trên đám mây của Google Cloud.
Giá trị được lưu trữ trong com.google.android.ar.API_KEY cho phép ứng dụng này sử dụng Geospatial API, còn giá trị được lưu trữ trong com.google.android.geo.API_KEY cho phép ứng dụng này sử dụng Google Maps SDK.
Xác minh dự án của bạn
Đảm bảo dự án của bạn đã sẵn sàng hoạt động. Trong Android Studio, hãy chạy ứng dụng của bạn. Bạn sẽ thấy một chế độ xem camera, cùng với một bản đồ đang hoạt động ở cuối màn hình.

3. Xác định vị trí của người dùng
Trong bước này, bạn sẽ thêm mã vào dự án mẫu để bắt đầu sử dụng Geospatial API.
Định cấu hình phiên ARCore để sử dụng Geospatial API
Để nhận dữ liệu không gian địa lý, bạn cần bật Geospatial API. Thay đổi GeospatialMode trong cấu hình phiên thành ENABLED bằng cách sửa đổi hàm configureSession trong HelloGeoActivity.kt:
fun configureSession(session: Session) {
session.configure(
session.config.apply {
// Enable Geospatial Mode.
geospatialMode = Config.GeospatialMode.ENABLED
}
)
}
Trong khi ở chế độ Không gian địa lý ENABLED, ứng dụng có thể thu thập thông tin Không gian địa lý.
Yêu cầu dữ liệu từ Geospatial API
Trong HelloGeoRenderer.kt, hãy tìm dòng sau:
// TODO: Obtain Geospatial information and display it on the map.
Bên dưới, hãy kiểm tra để đảm bảo đối tượng Earth có sẵn để sử dụng. Đó là khi thiết bị có trackingState TrackingState.ENABLED.
val earth = session.earth
if (earth?.trackingState == TrackingState.TRACKING) {
// TODO: the Earth object may be used here.
}
Bên dưới TODO, hãy yêu cầu thông tin không gian địa lý từ ARCore. Thêm dòng này:
val cameraGeospatialPose = earth.cameraGeospatialPose
Thao tác này sẽ cung cấp cho bạn một GeospatialPose chứa thông tin sau:
- Vị trí, được biểu thị bằng vĩ độ và kinh độ. Thông tin ước tính về độ chính xác của vị trí cũng được cung cấp.
- Độ cao và độ chính xác ước tính của độ cao.
- Hướng đi, thông tin ước chừng về hướng mà thiết bị đang hướng tới và thông tin ước tính về độ chính xác của hướng đi.
Hiển thị thông tin định vị trên bản đồ
Bạn có thể dùng GeospatialPose được lưu trữ trong cameraGeospatialPose để di chuyển một điểm đánh dấu trên bản đồ cho biết vị trí của người dùng. Tiếp tục từ nơi bạn đã dừng lại và thêm những nội dung sau:
activity.view.mapView?.updateMapPosition(
latitude = cameraGeospatialPose.latitude,
longitude = cameraGeospatialPose.longitude,
heading = cameraGeospatialPose.heading
)
Thao tác này liên tục cập nhật vị trí của bản đồ bằng các giá trị thu được từ Geospatial API.
Dùng thử
Trong Android Studio, hãy nhấp vào Play (Phát). Giữ thiết bị lên và di chuyển thiết bị xung quanh để giúp ARCore thiết lập tính năng theo dõi. Sau một lúc, bạn sẽ thấy một điểm đánh dấu màu xanh lục xuất hiện trên bản đồ. Điểm đánh dấu này sẽ xoay khi bạn xem khung cảnh xung quanh. Mũi tên này cũng phải chỉ đúng hướng: khi bạn đang hướng về phía Bắc, mũi tên cũng phải chỉ về phía Bắc.

4. Đặt điểm neo bằng toạ độ trên Earth
Geospatial API có thể đặt Neo tại bất kỳ cặp toạ độ và hướng xoay nào trong thế giới thực. Nhờ đó, người dùng có thể xem nội dung được ghim khi truy cập vào các vị trí cụ thể.
Ở bước này, bạn sẽ thêm một cách để đặt Anchor bằng cách nhấn vào bản đồ.
Đặt một thao tác khi người dùng nhấn vào bản đồ
Dự án này đi kèm với một hàm onMapClick, được gọi bằng vĩ độ và kinh độ khi người dùng nhấp vào fragment bản đồ. Tìm hàm onMapClick trong HelloGeoRenderer.kt.
Đảm bảo bạn có thể sử dụng đối tượng Earth
Trước khi tạo các neo trên Trái Đất, hãy đảm bảo rằng TrackingState của đối tượng Trái Đất là TRACKING, tức là vị trí của Trái Đất đã được xác định. Ngoài ra, hãy đảm bảo EarthState của API này là ENABLED, tức là không gặp vấn đề gì với Geospatial API. Thêm các dòng này vào bên trong onMapClick:
val earth = session?.earth ?: return
if (earth.trackingState != TrackingState.TRACKING) {
return
}
Xác định vị trí của Neo mới
Sau khi xác nhận rằng đối tượng Earth đang theo dõi, hãy tách earthAnchor trước đó (nếu có). Bạn sẽ thay thế earthAnchor bằng một neo mới trong các bước tiếp theo:
earthAnchor?.detach()
Sau đó, hãy dùng cameraGeospatialPose để xác định độ cao cho điểm neo mới. Sử dụng cặp toạ độ từ thao tác nhấn vào bản đồ làm vị trí neo của điểm neo.
// Place the earth anchor at the same altitude as that of the camera to make it easier to view.
val altitude = earth.cameraGeospatialPose.altitude - 1
// The rotation quaternion of the anchor in the East-Up-South (EUS) coordinate system.
val qx = 0f
val qy = 0f
val qz = 0f
val qw = 1f
earthAnchor =
earth.createAnchor(latLng.latitude, latLng.longitude, altitude, qx, qy, qz, qw)
createAnchor tạo một Anchor cố định theo toạ độ trắc địa với một góc xoay nhất định. Điểm neo này cố gắng duy trì trạng thái ổn định và cố định ở toạ độ và độ cao đã chỉ định.
Hiển thị điểm đánh dấu đã đặt trên bản đồ
Cuối cùng, hãy di chuyển một điểm đánh dấu mới cho biết vị trí đặt điểm đánh dấu:
activity.view.mapView?.earthMarker?.apply {
position = latLng
isVisible = true
}
Dùng thử
Trong Android Studio, hãy nhấp vào Play (Phát). Giữ thiết bị lên và di chuyển thiết bị xung quanh để giúp ARCore thiết lập tính năng theo dõi. Sau một lúc, bạn sẽ thấy một điểm đánh dấu màu xanh lục xuất hiện trên bản đồ, cho biết vị trí hiện tại của bạn.
Khi bạn nhấn vào bản đồ, Geospatial API sẽ đặt một điểm neo cố định vào một vị trí trong thế giới thực. Hãy thử đặt điểm neo gần vị trí hiện tại của bạn để có thể nhìn thấy điểm neo đó ở chế độ xem thực tế tăng cường. Nó phải duy trì trạng thái ổn định khi bạn di chuyển trong môi trường của mình.

5. Kết luận
Trong lớp học lập trình này, bạn đã tìm hiểu cách sử dụng Geospatial API để tạo một trải nghiệm thực tế tăng cường đơn giản gắn liền với thế giới thực.

Nội dung đã đề cập
- Cách thiết lập một dự án trên Google Cloud đã bật Geospatial API.
- Cách lấy thông tin không gian địa lý trong một dự án ARCore và hiển thị thông tin đó trên bản đồ.
- Cách đặt một neo được định vị trong thế giới thực bằng cách sử dụng tính năng định vị địa lý.
Tài nguyên khác
Để biết thêm thông tin chi tiết về các khái niệm địa lý và SDK được dùng trong lớp học lập trình này, hãy xem các tài nguyên bổ sung sau: