Trang này hướng dẫn bạn cách thêm tập dữ liệu vào bản đồ và áp dụng kiểu.
Điều kiện tiên quyết
Trước khi tiếp tục, bạn cần có mã bản đồ, kiểu bản đồ và mã tập dữ liệu.
Liên kết mã tập dữ liệu với kiểu bản đồ
Để tạo kiểu cho các thành phần của tập dữ liệu, bạn hãy áp dụng hàm kiểu cho lớp đối tượng tập dữ liệu của bản đồ. Lớp đối tượng tập dữ liệu được tạo khi bạn liên kết tập dữ liệu với kiểu bản đồ.
Cách liên kết tập dữ liệu với kiểu bản đồ:
- Trong bảng điều khiển Cloud, hãy chuyển đến trang Tập dữ liệu.
- Nhấp vào tên của tập dữ liệu. Trang Chi tiết tập dữ liệu sẽ xuất hiện.
- Nhấp vào thẻ Xem trước.
- Trong phần Kiểu bản đồ được liên kết, hãy nhấp vào
THÊM KIỂU BẢN ĐỒ.
- Nhấp vào(các) hộp đánh dấu cho(các) Kiểu bản đồ cần liên kết, rồi nhấp vào LƯU.
Áp dụng kiểu cho tập dữ liệu
Cách áp dụng kiểu cho tập dữ liệu:
Tạo hàm nhà máy kiểu triển khai
FeatureLayer.StyleFactorygiao diện. Hàm này xác định logic tạo kiểu cho tập dữ liệu.Gọi
FeatureLayer.setFeatureStyle()để áp dụng hàm nhà máy kiểu cho từng thành phần trong tập dữ liệu.
Tạo hàm nhà máy kiểu
Hàm factory kiểu được áp dụng cho mọi đối tượng trong lớp tập dữ liệu tại thời điểm bạn thiết lập hàm trên lớp đối tượng. Hàm này phải
trả về đối tượng FeatureStyle
chỉ định cách tạo kiểu cho đa giác.
Nếu nhà máy kiểu trả về null, thì thành phần đã cho sẽ không được kết xuất. Để biết thêm
thông tin, hãy xem bài viết Xoá kiểu khỏi lớp.
Maps SDK cho Android sẽ truyền thực thể
Feature
đến hàm nhà máy kiểu. Thực thể Feature đại diện cho siêu dữ liệu của thành phần, giúp bạn truy cập vào siêu dữ liệu trong hàm nhà máy kiểu.
Hàm nhà máy kiểu phải luôn trả về kết quả nhất quán khi được áp dụng. Ví dụ: nếu bạn muốn tô màu ngẫu nhiên cho một nhóm thành phần, thì phần ngẫu nhiên không được diễn ra trong hàm kiểu thành phần, vì điều đó sẽ gây ra kết quả không mong muốn.
Vì hàm này chạy trên mọi thành phần trong một lớp, nên việc tối ưu hoá là rất quan trọng. Để tránh ảnh hưởng đến thời gian kết xuất, hãy gọi FeatureLayer.setFeatureStyle(null) khi không còn sử dụng lớp đối tượng nữa.
Bạn cũng có thể gọi FeatureLayer.getDatasetId() để lấy mã của tập dữ liệu.
Đặt nét, màu nền và bán kính điểm
Khi tạo kiểu cho thành phần trong hàm nhà máy kiểu, bạn có thể đặt:
Màu nét và độ mờ của đường viền như được xác định bởi
Colorlớp. Giá trị mặc định là trong suốt (Color.TRANSPARENT).Độ rộng nét của đường viền tính bằng pixel trên màn hình. Giá trị mặc định là 2.
Màu nền và độ mờ như được xác định bởi
Colorlớp. Giá trị mặc định là trong suốt (Color.TRANSPARENT).Bán kính điểm của thành phần điểm từ 0 đến 128 pixel.
Sử dụng các quy tắc kiểu đơn giản
Cách đơn giản nhất để tạo kiểu cho thành phần là xác định FeatureLayer.StyleFactory luôn tạo đối tượng FeatureStyle giống hệt nhau, bất kể thành phần nào. Áp dụng trực tiếp các tuỳ chọn kiểu đối tượng cho lớp đối tượng tập dữ liệu hoặc sử dụng các tuỳ chọn này cùng với FeatureStyleFunction.
Sử dụng các quy tắc kiểu khai báo
Bạn có thể đặt các quy tắc kiểu theo cách khai báo dựa trên thuộc tính thành phần và áp dụng các quy tắc đó cho toàn bộ tập dữ liệu. Bạn có thể trả về null từ hàm kiểu thành phần, chẳng hạn như nếu bạn muốn một nhóm thành phần vẫn ở trạng thái ẩn.
Ví dụ: hãy sử dụng phương thức DatasetFeature.getDatasetAttributes() để trả về
Map<String,String> của các thuộc tính tập dữ liệu cho một thành phần. Sau đó, bạn có thể tuỳ chỉnh kiểu của thành phần dựa trên các thuộc tính của thành phần đó.
Ví dụ này xác định giá trị của thuộc tính "highlightColor" của từng thành phần trong tập dữ liệu để kiểm soát kiểu:
Kotlin
// Get the dataset feature, so we can work with all of its attributes. val datasetFeature: DatasetFeature = feature as DatasetFeature
// Create a switch statement based on the value of the // "highlightColor" attribute of the dataset. val attributeColor: MutableMap<String, String> = datasetFeature.getDatasetAttributes() when (attributeColor["highlightColor"]) { "Black" -> { ... } "Red" -> { ... } else -> { ... } }
Java
// Get the dataset feature, so we can work with all of its attributes. DatasetFeature datasetFeature = (DatasetFeature) feature;
// Create a switch statement based on the value of the // "highlightColor" attribute of the dataset. Map<String, String> attributeColor = datasetFeature.getDatasetAttributes(); switch(attributeColor.get("highlightColor")) { case "Black": ... break; case "Red": ... break; default: // Color not defined. ... break; }
Áp dụng kiểu cho lớp đối tượng tập dữ liệu
Ví dụ này áp dụng hàm factory kiểu cho đa giác trong lớp đối tượng tập dữ liệu. Hàm nhà máy kiểu áp dụng kiểu nét và màu nền tuỳ chỉnh cho đa giác:
Nếu bạn chưa làm như vậy, hãy làm theo các bước trong Bắt đầu để tạo mã bản đồ và kiểu bản đồ mới. Hãy nhớ bật lớp đối tượng Tập dữ liệu.
Lấy tham chiếu đến lớp đối tượng Tập dữ liệu khi bản đồ khởi chạy.
Kotlin
private var datasetLayer: FeatureLayer? = null
override fun onMapReady(googleMap: GoogleMap) { // Get the DATASET feature layer. datasetLayer = googleMap.getFeatureLayer(FeatureLayerOptions.Builder() .featureType(FeatureType.DATASET) // Specify the dataset ID. .datasetId(YOUR_DATASET_ID) .build())
// Apply style factory function to DATASET layer. styleDatasetsLayer() }Java
private FeatureLayer datasetLayer;
@Override public void onMapReady(GoogleMap map) { // Get the DATASET feature layer. datasetLayer = map.getFeatureLayer(new FeatureLayerOptions.Builder() .featureType(FeatureType.DATASET) // Specify the dataset ID. .datasetId(YOUR_DATASET_ID) .build());
// Apply style factory function to DATASET layer. styleDatasetsLayer(); }Tạo hàm nhà máy kiểu và áp dụng hàm này cho lớp thành phần Tập dữ liệu.
Ví dụ sau áp dụng cùng một màu nền và nét cho tất cả thành phần trong tập dữ liệu.
Kotlin
private fun styleDatasetsLayer() {
// Create the style factory function. val styleFactory = FeatureLayer.StyleFactory { feature: Feature ->
// Check if the feature is an instance of DatasetFeature. if (feature is DatasetFeature) {
return@StyleFactory FeatureStyle.Builder() // Define a style with green fill at 50% opacity and // solid green border. .fillColor(0x8000ff00.toInt()) .strokeColor(0xff00ff00.toInt()) .strokeWidth(2F) .build() } return@StyleFactory null }
// Apply the style factory function to the feature layer. datasetLayer?.setFeatureStyle(styleFactory) }Java
private void styleDatasetsLayer() {
// Create the style factory function. FeatureLayer.StyleFactory styleFactory = (Feature feature) -> {
// Check if the feature is an instance of DatasetFeature. if (feature instanceof DatasetFeature) {
return new FeatureStyle.Builder() // Define a style with green fill at 50% opacity and solid green border. .fillColor(0x8000ff00) .strokeColor(0xff00ff00) .strokeWidth(2) .build(); } return null; };
// Apply the style factory function to the feature layer. datasetLayer.setFeatureStyle(styleFactory); }
Xoá kiểu khỏi lớp
Để xoá kiểu khỏi lớp, hãy gọi FeatureLayer.setFeatureStyle(null).
Bạn cũng có thể trả về null từ nhà máy kiểu, chẳng hạn như nếu bạn muốn một nhóm thành phần vẫn ở trạng thái ẩn.