Tài liệu này cung cấp cấu trúc tham chiếu và ví dụ về cách tạo hình ảnh trực quan dữ liệu bản đồ bằng dữ liệu vị trí trong BigQuery của Google Cloud Platform và API Tập dữ liệu của Nền tảng Google Maps, chẳng hạn như phân tích dữ liệu mở của thành phố, tạo bản đồ phạm vi phủ sóng viễn thông hoặc trực quan hoá dấu vết di chuyển của đội xe di động.
Hình ảnh dữ liệu bản đồ là một công cụ hiệu quả để thu hút người dùng và khám phá thông tin chi tiết về không gian trong dữ liệu vị trí. Dữ liệu vị trí là dữ liệu có các đối tượng điểm, đường hoặc đa giác. Ví dụ: bản đồ thời tiết giúp người tiêu dùng hiểu rõ và lên kế hoạch cho chuyến đi cũng như chuẩn bị cho các cơn bão; bản đồ thông tin kinh doanh giúp người dùng khám phá thông tin chi tiết từ kết quả phân tích dữ liệu của họ; còn bản đồ viễn thông giúp người dùng hiểu rõ phạm vi phủ sóng và chất lượng của nhà cung cấp trong một khu vực dịch vụ nhất định.
Tuy nhiên, các nhà phát triển ứng dụng khó có thể tạo ra hình ảnh trực quan về dữ liệu bản đồ lớn có hiệu suất cao và mang lại trải nghiệm tuyệt vời cho người dùng. Dữ liệu lớn phải được tải vào bộ nhớ phía máy khách, khiến thời gian tải bản đồ đầu tiên bị chậm. Hình ảnh phải có hiệu suất cao trên tất cả các thiết bị, bao gồm cả điện thoại di động cấp thấp có hạn chế về bộ nhớ và GPU. Cuối cùng, nhà phát triển cần chọn một thư viện kết xuất dữ liệu lớn có thể di chuyển, đáng tin cậy và hiệu quả với dữ liệu lớn.
Kiến trúc tham chiếu
Để phát triển ứng dụng có hình ảnh trực quan hoá dữ liệu lớn, bạn cần có hai thành phần chính.
- Phần phụ trợ của khách hàng – tất cả dữ liệu và dịch vụ của ứng dụng phụ trợ, chẳng hạn như xử lý và lưu trữ.
- Ứng dụng khách của khách hàng – Giao diện người dùng ứng dụng của bạn có thành phần trực quan hoá bản đồ.
Dưới đây là sơ đồ hệ thống về cách hai thành phần này tương tác với người dùng ứng dụng, Google Cloud và Nền tảng Google Maps để tạo một ứng dụng trực quan hoá dữ liệu lớn.
Cân nhắc về thiết kế
Bạn cần cân nhắc một số yếu tố thiết kế để tạo hình ảnh trực quan dữ liệu hiệu quả bằng Google Cloud và Google Maps Platform.
- Kích thước dữ liệu nguồn và tần suất cập nhật.
- Nếu dữ liệu nguồn ở định dạng geojson có kích thước <5mb hoặc cập nhật rất thường xuyên (ví dụ: thông tin dự báo thời tiết trực tiếp qua radar), hãy cân nhắc phân phát dữ liệu dưới dạng đối tượng geojson phía máy khách trong ứng dụng và kết xuất bằng lớp deck.gl.
- Nếu dữ liệu của bạn có kích thước lớn hơn 5 MB và cập nhật không nhanh hơn một lần mỗi giờ, hãy cân nhắc cấu trúc API Tập dữ liệu trong tài liệu này.
- Tập dữ liệu hỗ trợ các tệp có kích thước tối đa 350 MB.
- Nếu dữ liệu của bạn lớn hơn 350 MB, hãy cân nhắc việc cắt bớt hoặc đơn giản hoá dữ liệu hình học trong tệp nguồn trước khi chuyển sang Tập dữ liệu (xem phần Cắt bớt dữ liệu bên dưới).
- Giản đồ và định dạng
- Đảm bảo dữ liệu của bạn có thuộc tính mã nhận dạng duy nhất trên toàn cầu cho mỗi tính năng. Mã nhận dạng duy nhất cho phép bạn chọn và tạo kiểu cho một tính năng cụ thể hoặc kết hợp dữ liệu với một tính năng để tạo hình ảnh trực quan, ví dụ: tạo kiểu cho một tính năng đã chọn trên sự kiện người dùng "nhấp".
- Định dạng dữ liệu dưới dạng CSV hoặc GeoJSON theo quy cách API của Tập dữ liệu với tên cột, loại dữ liệu và loại đối tượng GeoJSON hợp lệ.
- Để dễ dàng tạo Tập dữ liệu từ BigQuery, hãy tạo một cột có tên
wkt
trong tệp xuất CSV SQL. Tập dữ liệu hỗ trợ nhập hình học từ tệp CSV ở định dạng Well-Known Text (WKT) từ cột có tênwkt
. - Kiểm tra để đảm bảo dữ liệu của bạn là hình học và loại dữ liệu hợp lệ. Ví dụ: GeoJSON phải ở hệ toạ độ WGS84, thứ tự xoắn hình học, v.v.
- Sử dụng một công cụ như geojson-validate để đảm bảo tất cả hình học trong tệp nguồn đều hợp lệ hoặc ogr2ogr để chuyển đổi tệp nguồn giữa các định dạng hoặc hệ toạ độ.
- Loại bỏ dữ liệu
- Giảm thiểu số lượng thuộc tính của các tính năng. Bạn có thể kết hợp các thuộc tính bổ sung với một tính năng trong thời gian chạy trên khoá giá trị nhận dạng duy nhất (ví dụ).
- Sử dụng các loại dữ liệu số nguyên cho các đối tượng thuộc tính (nếu có thể) để giảm thiểu không gian lưu trữ thẻ thông tin, giúp thẻ thông tin hoạt động hiệu quả khi tải qua HTTPS trong ứng dụng khách.
- Đơn giản hoá và/hoặc tổng hợp các hình dạng đối tượng rất phức tạp; cân nhắc sử dụng các hàm BigQuery như ST_Simplify trên các hình đa giác phức tạp để giảm kích thước tệp nguồn và cải thiện hiệu suất bản đồ.
- Sắp xếp cạnh nhau
- API Tập dữ liệu của Google Maps tạo thẻ thông tin bản đồ từ tệp dữ liệu nguồn để sử dụng với SDK Maps dành cho web hoặc thiết bị di động.
- Thẻ thông tin trên bản đồ là một hệ thống lập chỉ mục dựa trên tính năng thu phóng, cung cấp các cách tải dữ liệu hiệu quả hơn vào một ứng dụng trực quan.
- Thẻ thông tin bản đồ có thể bỏ qua các đối tượng dày đặc hoặc phức tạp ở các cấp độ thu nhỏ thấp hơn. Khi người dùng thu nhỏ đến một tiểu bang hoặc quốc gia (ví dụ: z5-z12), giao diện có thể khác với khi thu nhỏ đến một thành phố hoặc khu vực lân cận (ví dụ: z13-z18).
Ví dụ: Đường sắt ở London
Trong ví dụ này, chúng ta sẽ áp dụng cấu trúc tham chiếu để tạo một ứng dụng web bằng GCP và Google Maps. Ứng dụng này sẽ trực quan hoá tất cả các tuyến đường sắt ở London từ dữ liệu Open Street Map (OSM).
Điều kiện tiên quyết
- Quyền truy cập vào Hộp cát BigQuery và Cloud Console
- Đảm bảo bạn đã thiết lập tài khoản thanh toán và dự án GCP.
Bước 1 – Truy vấn dữ liệu trong BigQuery
Chuyển đến phần Tập dữ liệu công khai của BigQuery. Tập dữ liệu "bigquery-public-data" và bảng geo_openstreetmap.planet_features
chứa toàn bộ dữ liệu Open Street Map (OSM) trên toàn cầu, bao gồm tất cả các tính năng có thể có. Khám phá tất cả các tính năng có thể truy vấn trong OSM Wiki, bao gồm amenity
, road
và landuse
.
Sử dụng Cloud Shell hoặc BigQuery Cloud Console(https://console.cloud.google.com) để truy vấn bảng bằng SQL. Đoạn mã dưới đây sử dụng lệnh truy vấn bq để truy vấn tất cả các tuyến đường sắt được lọc chỉ ở London bằng cách sử dụng hộp giới hạn và hàm ST_Intersects().
Để thực hiện truy vấn này từ Cloud Shell, hãy chạy đoạn mã sau, cập nhật mã dự án, tập dữ liệu và tên bảng cho môi trường của bạn.
bq query --use_legacy_sql=false \
--destination_table PROJECTID:DATASET.TABLENAME \
--replace \
'SELECT
osm_id,
feature_type,
(SELECT value
FROM unnest(all_tags)
WHERE KEY = "name") AS name,
(SELECT value
FROM unnest(all_tags)
WHERE KEY = "railway") AS railway,
geometry as wkt
FROM bigquery-public-data.geo_openstreetmap.planet_features
WHERE ("railway") IN (SELECT key FROM unnest(all_tags))
AND ST_Intersects(
geometry,
ST_MakePolygon(ST_MakeLine(
[ST_GeogPoint(-0.549370, 51.725346),
ST_GeogPoint(-0.549370, 51.2529407),
ST_GeogPoint(0.3110581, 51.25294),
ST_GeogPoint(0.3110581, 51.725346),
ST_GeogPoint(-0.549370, 51.725346)]
))
)'
Truy vấn này trả về:
- giá trị nhận dạng duy nhất cho mỗi tính năng
osm_id
feature_type
, ví dụ: điểm, đường, v.v.name
của tính năng, ví dụ:Paddington Station
- Loại
railway
, ví dụ: chính, du lịch, quân sự, v.v. wkt
của đối tượng – hình học điểm, đường hoặc đa giác ở định dạng WKT. WKT là định dạng dữ liệu chuẩn mà các cột Địa lý của BigQuery trả về trong một truy vấn.
Lưu ý: Để xác thực kết quả truy vấn một cách trực quan trước khi tạo Tập dữ liệu, bạn có thể nhanh chóng trực quan hoá dữ liệu trong trang tổng quan từ BigQuery bằng Looker Studio.
Để xuất bảng sang tệp CSV trong một bộ chứa Google Cloud Storage, hãy sử dụng lệnh bq extract trong Cloud Shell:
bq extract \
--destination_format "CSV" \
--field_delimiter "," \
--print_header=true \
PROJECTID:DATASET.TABLENAME \
gs://BUCKET/FILENAME.csv
Lưu ý: Bạn có thể tự động hoá từng bước bằng cách sử dụng Trình lập lịch biểu trên đám mây để thường xuyên cập nhật dữ liệu.
Bước 2 – Tạo Tập dữ liệu từ tệp CSV
Tiếp theo, hãy tạo một tập dữ liệu Google Maps Platform từ kết quả truy vấn trên Google Cloud Storage (GCS). Khi sử dụng Datasets API, bạn có thể tạo một tập dữ liệu, sau đó tải dữ liệu lên Tập dữ liệu từ một tệp được lưu trữ trên GCS.
Để bắt đầu, hãy bật API Tập dữ liệu Maps trên dự án GCP của bạn và xem tài liệu về API. Có thư viện ứng dụng Python và Node.js để gọi API Tập dữ liệu từ logic trong phần phụ trợ của ứng dụng. Ngoài ra, còn có GUI của Tập dữ liệu để tạo Tập dữ liệu theo cách thủ công trong Cloud Console.
Sau khi tải Tập dữ liệu lên xong, bạn có thể xem trước tập dữ liệu trong GUI của Tập dữ liệu.
Bước 4 – Liên kết Tập dữ liệu với Mã bản đồ
Sau khi tạo Tập dữ liệu, bạn có thể tạo Mã bản đồ có Kiểu bản đồ được liên kết. Trong trình chỉnh sửa Kiểu bản đồ, bạn có thể liên kết một mapId và kiểu với Tập dữ liệu. Đây cũng là nơi bạn có thể áp dụng tính năng Định kiểu bản đồ dựa trên đám mây để tuỳ chỉnh giao diện của bản đồ.
Bước 5 – Tạo bản đồ trực quan của ứng dụng khách
Cuối cùng, bạn có thể thêm tập dữ liệu vào ứng dụng trực quan hoá dữ liệu phía máy khách bằng Maps JS API. Khởi chạy đối tượng bản đồ bằng cách sử dụng mapID được liên kết với tập dữ liệu của bạn từ bước trước. Sau đó, hãy thiết lập kiểu và khả năng tương tác của lớp Tập dữ liệu. Hãy xem hướng dẫn đầy đủ về cách tạo kiểu dựa trên dữ liệu bằng Tập dữ liệu để biết thêm thông tin chi tiết.
Bạn có thể tuỳ chỉnh kiểu, thêm trình xử lý sự kiện để thay đổi kiểu một cách linh động và làm nhiều việc khác bằng cách sử dụng API Maps JS. Xem ví dụ trong tài liệu. Dưới đây, chúng ta sẽ xác định hàm setStyle để tạo kiểu đối tượng điểm và đường cho ví dụ này dựa trên thuộc tính "feature_type".
function setStyle(params) {
const map.getDatasetFeatureLayer("your-dataset-id");
const datasetFeature = params.feature;
const type = datasetFeature.datasetAttributes["feature_type"];
if (type == "lines") {
return {
fillColor: "blue",
strokeColor: "blue",
fillOpacity: 0.5,
strokeWeight: 1,
}
} else if (type == "points") {
return {
fillColor: "black",
strokeColor: "black",
strokeOpacity: 0.5,
pointRadius: 2,
fillOpacity: 0.5,
strokeWeight: 1,
}
}
}
Lưu ý: hãy nhớ luôn thêm thông tin ghi công cho Tập dữ liệu vào ứng dụng bản đồ. Để thêm thông tin ghi công cho OSM, hãy làm theo ví dụ về mã ghi công trong tài liệu tuân thủ nguyên tắc của OSM.
Mã ở trên khi được khởi tạo trong một ứng dụng web một trang sẽ tạo ra hình ảnh dữ liệu bản đồ sau:
Từ đây, bạn có thể mở rộng hình ảnh bản đồ trong hàm setStyle() bằng cách thêm logic để lọc các tính năng, thêm kiểu dựa trên hoạt động tương tác của người dùng và tương tác với phần còn lại của ứng dụng.
Kết luận
Trong bài viết này, chúng ta đã thảo luận về một kiến trúc tham chiếu và ví dụ về cách triển khai một ứng dụng trực quan hoá dữ liệu lớn bằng Google Cloud và Nền tảng Google Maps. Khi sử dụng cấu trúc tham chiếu này, bạn có thể tạo các ứng dụng trực quan hoá dữ liệu vị trí từ bất kỳ dữ liệu nào trong BigQuery của GCP có hiệu suất cao trên mọi thiết bị bằng cách sử dụng API Tập dữ liệu của Google Maps.
Hành động tiếp theo
Tài liệu đọc thêm:
- Tài liệu về API Tập dữ liệu của Nền tảng Google Maps
- Xem dữ liệu theo thời gian thực bằng tính năng Kiểu dựa trên dữ liệu
- Giới thiệu về tính năng phân tích không gian địa lý trong BigQuery
- Sử dụng GeoJSON trong BigQuery để phân tích không gian địa lý
Người đóng góp
Tác giả chính:
- Ryan Baumann, Nhà quản lý kỹ thuật giải pháp của Nền tảng Google Maps