1. Tổng quan
ARCore là bộ khung của Google để xây dựng trải nghiệm Thực tế tăng cường trên điện thoại thông minh. API Không gian địa lý ARCore mới mang đến một khía cạnh mới cho công nghệ 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ẽ làm quen với API Không gian địa lý ARCore. Bạn sẽ khám phá ra những thông tin mà API Không gian địa lý có thể cung cấp cho trải nghiệm AR tổng thể của bạn và cách dữ liệu này có thể được sử dụng để hỗ trợ trải nghiệm tìm đường bằng AR đơn giản.
Kiến thức bạn sẽ học được
- Cách thiết lập dự án ARCore sử dụng API Không gian địa lý.
- Cách yêu cầu dữ liệu địa lý từ API Không gian địa lý và hiển thị dữ liệu đó bằng Google Maps.
- Cách đặt một Neo được gắn vào một vị trí thực tế.
Bạn cần có
- Một thiết bị Android ARCore được hỗ trợ, được kết nối với máy phát triển của bạn bằng cáp USB, được định cấu hình bằng tính năng gỡ lỗi qua USB.
- Android Studio được cài đặt và định cấu hình để tạo các ứng dụng Android.
- Dịch vụ Google Play cho Thực tế tăng cường 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
Để bắt đầu với API Không gian địa lý, chúng tôi đã cung cấp một dự án khởi đầu bao gồm các khái niệm cơ bản của dự án ARCore được tích hợp với SDK Google Maps. Việc này giúp bạn bắt đầu nhanh với API Không gian địa lý.
- Khởi động Android Studio rồi nhập 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ừ 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 dùng Get from VCS (Lấy trên VCS).
- Chọn Git rồi sử 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
API Không gian địa lý sử dụng hình ảnh Chế độ xem phố kết hợp với từ kế của thiết bị và thông tin cảm biến của máy ảnh để cải thiện 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:
- Hãy xem bài viết Tạo dự án trong Google Cloud Platform.
- Nhập Tên dự án phù hợp (ví dụ: "Dự án API Không gian địa lý ARCore") và chọn vị trí bất kỳ.
- Nhấp vào Tạo.
- Hãy xem bài viết 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 API và dịch vụ, hãy chọn Thông tin xác thực.
- Ở 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á đã được tạo khi bạn cần cho bước tiếp theo. Quay lại trang Thông tin xác thực nếu bạn cần truy xuất thông tin xác thực đó.
Bằng cách làm theo các bước này, bạn đã tạo được một dự án trên Google Cloud có uỷ quyền khoá API và sẵn sàng sử dụng API Không gian địa lý.
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, hãy mở dự án mà bạn đã tạo trong Android Studio rồi sửa đổi các khoá API:
- Mở app > src > AndroidManifest.xml.
- Tìm các mục
meta-data
sau:<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_KEY
bằng khoá API mà bạn đã tạo trong dự án của mình trên 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 API Không gian địa lý, và giá trị được lưu trữ trong com.google.android.geo.API_KEY
cho phép ứng dụng này sử dụng SDK Google Maps.
Xác minh dự án của bạn
Hãy đả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. Bạn có thể thấy chế độ xem máy ảnh, 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 thêm mã vào dự án mẫu để bắt đầu sử dụng API Không gian địa lý.
Định cấu hình phiên ARCore để sử dụng API Không gian địa lý
Để thu thập dữ liệu Không gian địa lý, bạn cần bật API Không gian địa lý. 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
}
)
}
Khi chế độ Không gian địa lý là ENABLED
, ứng dụng có thể nhận thông tin Không gian địa lý.
Yêu cầu dữ liệu từ API Không gian địa lý
Trong HelloGeoRenderer.kt
, hãy tìm dòng sau:
// TODO: Obtain Geospatial information and display it on the map.
Bên dưới mục đó, hãy kiểm tra để đảm bảo rằng đối tượng Earth có sẵn để sử dụng. Đó là khi nó 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 độ. Số liệu ước tính về độ chính xác của vị trí cũng được cung cấp.
- Độ cao và ước tính về độ chính xác của độ cao.
- Tiêu đề, hướng gần đúng của thiết bị và là ước tính về độ chính xác của tiêu đề.
Hiển thị thông tin định vị trên bản đồ
Bạn có thể sử 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 nội dung sau:
activity.view.mapView?.updateMapPosition(
latitude = cameraGeospatialPose.latitude,
longitude = cameraGeospatialPose.longitude,
heading = cameraGeospatialPose.heading
)
Việc này liên tục cập nhật vị trí của bản đồ bằng cách sử dụng các giá trị thu được từ API Không gian địa lý.
Dùng thử
Trong Android Studio, hãy nhấp vào Play (Chơi). Giữ thiết bị của bạn lên và di chuyển 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 xoay khi bạn xem môi trường xung quanh. Nó cũng phải trỏ đúng hướng: khi bạn thực sự hướng về phía Bắc, mũi tên cũng chỉ về hướng Bắc.
4. Đặt neo bằng toạ độ Earth
API Không gian địa lý có thể đặt Neo tại bất kỳ cặp toạ độ và xoay bất kỳ trong thế giới thực. Nhờ đó, người dùng sẽ thấy nội dung cố định khi họ ghé thăm những vị trí cụ thể.
Trong bước này, bạn sẽ thêm cách để đặt một Neo bằng cách nhấn vào bản đồ.
Đặt thao tác khi nhấn vào bản đồ
Dự án đi kèm một hàm onMapClick
, hàm này được gọi cùng với vĩ độ và kinh độ khi người dùng nhấp vào mảnh bản đồ. Tìm hàm onMapClick
trong HelloGeoRenderer.kt
.
Đảm bảo có thể sử dụng đối tượng Earth
Trước khi tạo neo trên Earth, hãy đảm bảo rằng TrackingState
của đối tượng Earth là TRACKING
, có nghĩa là đã biết vị trí của Trái đất. Ngoài ra, hãy đảm bảo EarthState
của thuộc tính này là ENABLED
, nghĩa là không gặp sự cố nào với API Không gian địa lý. Thêm các dòng sau 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 liên kết mới trong các bước tiếp theo:
earthAnchor?.detach()
Sau đó, sử dụng cameraGeospatialPose
để xác định cao độ cho điểm neo mới. Sử dụng cặp toạ độ từ việc nhấn vào bản đồ làm vị trí của 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 đối với các toạ độ trắc địa có một chế độ xoay nhất định. Neo này cố gắng duy trì ổn định và cố định theo toạ độ và độ cao được chỉ định.
Hiển thị điểm đánh dấu đã đặt trên bản đồ
Cuối cùng, 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 (Chơi). Giữ thiết bị của bạn lên rồi 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át, 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.
Thao tác nhấn vào bản đồ sẽ sử dụng API Không gian địa lý để đặt một điểm neo (được cố định vào một vị trí trong thế giới thực). Thử đặt neo gần vị trí hiện tại của bạn để bạn có thể nhìn thấy nó trong chế độ xem AR. Mã sẽ vẫn ổn định khi bạn điều hướng 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 API Không gian địa lý để tạo trải nghiệm AR đơn giản gắn liền với thế giới thực.
Nội dung chúng ta đã đề cập
- Cách thiết lập dự án trên Google Cloud khi bật API Không gian địa lý.
- Cách thu thập thông tin Không gian địa lý trong dự án ARCore và hiển thị thông tin đó trên bản đồ.
- Cách đặt quảng cáo cố định được định vị trong thực tế bằng cách sử dụng vị trí đị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 sử 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: