Tài liệu này mô tả tính năng khoanh vùng địa lý phía máy khách, thời điểm sử dụng và cách áp dụng tính năng này cho các trường hợp sử dụng trong ứng dụng di động. Tài liệu này cũng trình bày cách triển khai một ví dụ trên Android bằng SDK điều hướng của Google.
Các công ty thường cần biết thời điểm một thiết bị di động đi vào hoặc rời khỏi một khu vực cụ thể. Điều này được thực hiện bằng cách duy trì ranh giới địa lý ảo, hoặc khoanh vùng địa lý, cho phép phần mềm kích hoạt các sự kiện khi thiết bị vượt qua ranh giới.
Việc hiểu được thời điểm một chiếc xe nhất định vượt qua ranh giới là rất quan trọng đối với nhiều trường hợp sử dụng, chẳng hạn như:
- Tăng mức độ tương tác của khách hàng: Doanh nghiệp có thể sử dụng tính năng khoanh vùng địa lý để gửi thông báo đẩy cho người dùng cuối về các ưu đãi, sự kiện hoặc sản phẩm mới.
- Bảo mật và an toàn: Các doanh nghiệp có thể sử dụng tính năng khoanh vùng địa lý để tạo vành đai ảo xung quanh các khu vực nhạy cảm (chẳng hạn như trung tâm dữ liệu hoặc nhà kho), đồng thời cảnh báo cho nhân viên an ninh nếu có người đi vào hoặc rời khỏi khu vực đó.
- Giao thông: Doanh nghiệp có thể sử dụng tính năng khoanh vùng địa lý để theo dõi vị trí của xe và tối ưu hoá tuyến đường cũng như lịch trình.
Do đó, điều quan trọng là bạn phải biết cách biểu thị các vùng đó (đa giác) bên trong ứng dụng dành cho khách hàng. Ứng dụng này sẽ theo dõi vị trí của thiết bị và kiểm tra xem thiết bị có vi phạm một khoanh vùng địa lý nhất định hay không.
Phạm vi
Tài liệu này tập trung vào việc triển khai tính năng khoanh vùng địa lý ở phía máy khách. Điều đó có nghĩa là ứng dụng khách phải có:
- Các đa giác cần kiểm tra để phát hiện lỗi vi phạm;
- Vị trí theo thời gian thực của người dùng
- Logic để kiểm tra xem vị trí hiện tại là bên trong hay bên ngoài hình đa giác.
Hướng dẫn này bao gồm các ví dụ trên Android nhưng có các cách tương đương để thực hiện việc này trên iOS. Dịch vụ vị trí của Android có tính năng triển khai tích hợp sẵn cho khoanh vùng địa lý hình tròn. Bạn có thể xem tính năng này tại đây. Mã tham chiếu và nội dung mô tả bên dưới là điểm xuất phát cho các phương thức triển khai phức tạp hơn.
Navigation SDK
SDK điều hướng là một thư viện Android / iOS gốc được thêm vào ứng dụng trình điều khiển. Ứng dụng này chịu trách nhiệm:
- Lấy thông tin vị trí chụp đường từ ứng dụng đang chạy. Định dạng này chính xác hơn so với FusedLocationProvider (FLP) của Android vì ứng dụng này sử dụng mạng lưới đường bộ của Google để gắn các vị trí với đoạn đường gần nhất, giúp giờ đến dự kiến chính xác hơn nhiều và các thông tin khác từ FLP.
- Trải nghiệm từng chặng giúp tài xế di chuyển hiệu quả từ điểm A đến điểm B, đồng thời tính đến lưu lượng truy cập theo thời gian thực và các quy định hạn chế khác về tuyến đường.
- Kích hoạt sự kiện thông qua trình nghe sự kiện và lệnh gọi lại đã đăng ký.
Trình nghe
SDK điều hướng có nhiều trình nghe mà bạn có thể sử dụng. Một số ví dụ:
- Thay đổi vị trí thông qua nhà cung cấp RoadSnappedLocation.
- Sự kiện định tuyến lại (người dùng bỏ lỡ đường rẽ đầu tiên, rẽ trái, v.v. và đi chệch khỏi tuyến đường đề xuất) thông qua ReroutingListener.
- Sự kiện đến (người dùng đến điểm đến theo kế hoạch) thông qua ArrivalListener.
- Quãng đường còn lại và sự kiện ETA (nhận thông báo khi người lái xe sắp đến điểm đến – dựa trên số mét, nhận thông báo khi tài xế sắp đến điểm đến – dựa trên thời gian) đều có thông qua .RemainingTimeOrDistanceChangedListener
Trong hướng dẫn này, chỉ Nhà cung cấp RoadSnappedLocation và LocationListener của nó được sử dụng.
Giải pháp khoanh vùng địa lý phía máy khách
Bây giờ, hãy cùng tìm hiểu cách xây dựng chức năng khoanh vùng địa lý phía máy khách. Trong ví dụ bên dưới, chúng ta có SDK điều hướng hoạt động ở chế độ từng chặng và một đa giác được xác định trong tuyến đường đại diện cho khoanh vùng địa lý của chúng ta.
- Ranh giới địa lý được lưu trữ trong BigQuery và được phần phụ trợ của bạn lấy.
- Phần phụ trợ định kỳ đẩy khoanh vùng địa lý đến các ứng dụng lái xe.
- Trình điều khiển sẽ điều hướng và ứng dụng trình điều khiển sẽ thường xuyên kiểm tra khoanh vùng địa lý để tìm điều kiện kích hoạt.
- Ứng dụng điều khiển thông báo cho phần phụ trợ về một sự kiện kích hoạt để ứng dụng có thể hành động.
Khi xe di chuyển dọc theo tuyến đường, ứng dụng sẽ thường xuyên kiểm tra xem đa giác có bị vi phạm hay không. Khi ứng dụng phát hiện rằng nó đã vượt qua khoanh vùng địa lý, một thông báo sẽ xuất hiện trên giao diện người dùng: Vượt qua khoanh vùng địa lý.
Định cấu hình phần phụ thuộc cho Android-Maps-Utils
Giải pháp này sử dụng Android-Maps-Utils, một thư viện nguồn mở chứa các tiện ích hữu ích cho nhiều ứng dụng sử dụng API Android của Google Maps.
Thư viện này là công khai và được lưu trữ trên GitHub. Bạn có thể truy cập vào thư viện này tại:
- Android: https://github.com/googlemaps/android-maps-utils
- iOS: https://github.com/googlemaps/google-maps-ios-utils
Để đưa thư viện này vào ứng dụng Android (phạm vi của tài liệu này), bạn nên sửa đổi tệp build.gradle để đưa thư viện đó vào. Xin lưu ý rằng tệp build.gradle này dành cho mô-đun (ứng dụng) mà bạn đang tạo, chứ không phải ở cấp dự án.
dependencies {
...
// Utilities for Maps SDK for Android (requires Google Play Services)
implementation 'com.google.maps.android:android-maps-utils:2.3.0'
}
Tiếp theo, sau khi đồng bộ hoá Gradle với tệp build.gradle mới nhất, bạn có thể nhập com.google.maps.android.PolyUtil trong tệp Java của mình:
import com.google.android.gms.maps.model.PolygonOptions;
import com.google.maps.android.PolyUtil;
Xác định khoanh vùng địa lý
Lưu ý rằng ở đây cũng nhập PolygonOptions
. Lý do là vì đây là những gì đang được sử dụng để biểu thị đa giác:
mPolygonOptions = new PolygonOptions()
.add(new LatLng(29.4264525,-98.4948758))
.add(new LatLng(29.4267029,-98.4948758))
.add(new LatLng(29.4273742,-98.4945822))
.add(new LatLng(29.4264562,-98.4943592))
.fillColor(0x0000ff36)
.strokePattern(Arrays.asList(new Dash(45.0f), new Gap(10.0f)))
.strokeColor(Color.BLUE)
.strokeWidth(5);
Như bạn có thể thấy ở trên, chúng ta đang xác định một đa giác cố định bằng các toạ độ được thiết lập trước – các cặp (vĩ độ, kinh độ). Tuy nhiên, trong các trường hợp thực tế, các toạ độ và định nghĩa đa giác đó hầu hết sẽ đến từ một điểm cuối phụ trợ và có thể sẽ được tìm nạp từ xa. Điều này có nghĩa là ứng dụng sẽ phải tạo(các) đa giác một cách nhanh chóng.
Để biết thêm chi tiết về những nội dung có thể được chỉ định trong PolygonOptions
, vui lòng xem tại đây.
Bạn nên xác định (các) đa giác trong quá trình tạo Mảnh hoặc Hoạt động. Ví dụ:
protected void onCreate(Bundle savedInstanceState) {
...
mPolygonOptions = new PolygonOptions()
.add(new LatLng(29.4264525,-98.4948758))
.add(new LatLng(29.4267029,-98.4948758))
.add(new LatLng(29.4273742,-98.4945822))
.add(new LatLng(29.4264562,-98.4943592))
.fillColor(0x0000ff36)
.strokePattern(Arrays.asList(new Dash(45.0f), new Gap(10.0f)))
.strokeColor(Color.BLUE)
.strokeWidth(5);
...// more code here
}
Theo dõi thông tin cập nhật về vị trí
Sau khi xác định khoanh vùng địa lý, bạn chỉ cần tạo một trình nghe thông tin cập nhật vị trí để đăng ký sự kiện nêu trên trong SDK điều hướng có tên là RoadSnappedLocationProvider
. SDK này sẽ trả về vị trí mới nhất của thiết bị.
mLocListener = new RoadSnappedLocationProvider.LocationListener() {
@Override
public void onLocationChanged(Location snapped) {
LatLng snappedL = new LatLng(snapped.getLatitude(), snapped.getLongitude());
if(PolyUtil.containsLocation(snappedL, mPolygonOptions.getPoints(), true) && !mGeofenceBreached){
Log.d("Geofence", "Vehicle has breached the polygon");
}
}
@Override
public void onRawLocationUpdate(Location location) {
}
};
Với Android-Maps-Utils, bạn có thể dùng PolyUtil.containsLocation
để kiểm tra xem vị trí nhận có nằm trong đa giác được xác định trước hay không. Trong ví dụ bên dưới, đa giác được xác định trước, đại diện cho khoanh vùng địa lý, được sử dụng nhưng trong thực tế, bạn có thể có nhiều đa giác và cần có một vòng lặp.
Một phương pháp thay thế
Tài liệu này tập trung vào một ứng dụng dành cho khách hàng, ứng dụng này sẽ kiểm tra lỗi vi phạm khoanh vùng địa lý tuỳ chỉnh (đa giác). Tuy nhiên, có một số trường hợp bạn nên thực hiện các bước kiểm tra như vậy trên phần phụ trợ.
Tức là ứng dụng sẽ báo cáo thông tin cập nhật vị trí cho một phần phụ trợ, sau đó phần phụ trợ này sẽ kiểm tra xem chiếc xe đó có vi phạm một đa giác nào đó hay không, do đó không phụ thuộc vào ứng dụng khách để thực hiện việc xác thực.
Sau đây là một giải pháp khả thi:
[Môi trường thực thi] Cấu trúc khoanh vùng địa lý phía máy chủ
Cấu trúc mẫu minh hoạ phương pháp khoanh vùng địa lý phía máy chủ.
- Ứng dụng trình điều khiển sử dụng SDK Driver sẽ gửi thông tin cập nhật vị trí đến Fleet Engine. Cập nhật vị trí và điều hướng trong ứng dụng diễn ra thông qua SDK điều hướng.
- Fleet Engine xuất ra các bản cập nhật đó cho Cloud Logging hoặc Pub/Sub.
- Phần phụ trợ sẽ thu thập các tín hiệu vị trí đó.
- Vùng khoanh vùng địa lý được lưu trữ trong BigQuery để phần phụ trợ phân tích.
- Sau khi kích hoạt khoanh vùng địa lý, thông báo sẽ được gửi đến Ứng dụng trình điều khiển.
Trong cấu trúc này, Driver SDK và Fleet Engine được sử dụng. Công cụ của Fleet có thể phát hành thông tin cập nhật về PubSub và tạo các mục nhập nhật ký trong tính năng Ghi nhật ký trên đám mây. Trong cả hai trường hợp, bạn đều có thể truy xuất thông tin vị trí của xe.
Sau đó, phần phụ trợ có thể theo dõi hàng đợi PubSub hoặc đọc nhật ký và theo dõi các bản cập nhật xe. Sau đó, bất cứ khi nào có bản cập nhật (hoặc cứ vài giây, vài phút, tuỳ thuộc vào mức độ quan trọng của bản cập nhật), phần phụ trợ có thể gọi các hàm GIS BigQuery để xác định xem một xe cụ thể có nằm trong hay ngoài khoanh vùng địa lý hay không. Trong trường hợp một hoặc nhiều khoanh vùng địa lý bị vi phạm, phần phụ trợ có thể hành động và kích hoạt quy trình nội bộ hoặc các quy trình công việc có liên quan khác.
Kết luận
Khoanh vùng địa lý là một công cụ mạnh mẽ có thể được sử dụng cho nhiều mục đích. Các doanh nghiệp có thể sử dụng tính năng khoanh vùng địa lý để nhắm đến người dùng cuối bằng quảng cáo và chương trình khuyến mãi phù hợp, cung cấp các dịch vụ dựa trên vị trí, đồng thời cải thiện tính bảo mật và an toàn.
SDK Điều hướng cung cấp trình nghe sự kiện hữu ích có thể phát hiện nhiều khoảnh khắc quan trọng trong một hành trình. Các công ty thường yêu cầu khoanh vùng địa lý tuỳ chỉnh cho các trường hợp sử dụng cụ thể. Trong tài liệu này, chúng tôi đã chứng minh cách để đạt được điều này, nhưng khả năng là vô hạn. Chúng tôi rất mong được xem ý tưởng của bạn.
Hành động tiếp theo
- Hãy xem hội thảo trên web Khám phá, học hỏi và tìm cảm hứng từ những điều có thể với Nền tảng Google Maps.
Tài liệu đọc thêm được đề xuất: