在地圖和樣式資料集中加入資料集

選取平台: Android iOS JavaScript

本頁說明如何將資料集新增至地圖,以及如何套用樣式。

這張螢幕截圖顯示已設定樣式的多邊形資料。

必要條件

請先備妥地圖 ID、地圖樣式和資料集 ID,才能繼續操作。

將資料集 ID 與地圖樣式建立關聯

如要為資料集的地圖項目套用樣式,請將樣式函式套用至地圖的資料集地圖項目圖層將資料集與地圖樣式建立關聯時,系統會建立資料集地圖項目圖層。

如要將資料集與地圖樣式建立關聯,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往「Datasets」(資料集) 頁面
  2. 按一下資料集名稱。「Dataset details」(資料集詳細資料) 頁面隨即顯示。
  3. 按一下「預覽」分頁標籤。
  4. 在「Associated map styles」部分,按一下「ADD MAP STYLE」
    「ADD MAP STYLE」(新增地圖樣式) 按鈕的螢幕截圖。
  5. 找出要建立關聯的地圖樣式,勾選對應的核取方塊,然後按一下「SAVE」(儲存)。

將樣式套用至資料集

如何將樣式套用至資料集:

  1. 建立實作 FeatureLayer.StyleFactory 介面的樣式工廠函式。這個函式會定義資料集的樣式邏輯。

  2. 呼叫 FeatureLayer.setFeatureStyle(),將樣式工廠函式套用至資料集中的每個地圖項目。

建立樣式工廠函式

在您為地圖項目圖層設定函式時,系統會將樣式工廠函式套用至資料集圖層中的每個地圖項目。這個函式必須傳回 FeatureStyle 物件,以指定多邊形的樣式。

如果樣式工廠傳回 null,則不會算繪指定的地圖項目。詳情請參閱「從圖層移除樣式」。

Maps SDK for Android 會將 Feature 例項傳遞至樣式工廠函式。Feature 例項代表地圖項目的中繼資料,可讓您存取樣式工廠函式中的中繼資料。

套用樣式工廠函式時,樣式工廠函式應一律傳回一致的結果。舉例來說,如果您想隨機為一組地圖項目上色,隨機的部分就不應套用地圖項目樣式函式,因為這會導致意外結果。

因為這個函式會針對圖層中每個地圖項目執行,所以最佳化非常重要。為避免影響算繪時間,如果不再使用地圖項目圖層,請呼叫 FeatureLayer.setFeatureStyle(null)

您也可以呼叫 FeatureLayer.getDatasetId() 取得資料集的 ID。

設定筆觸、填充和點半徑

在樣式工廠函式中為地圖項目設定樣式時,您可以設定下列項目:

  • 筆劃顏色和不透明度,由 Color 類別定義。預設值為透明 (Color.TRANSPARENT)。

  • 邊框的筆劃寬度,以螢幕像素為單位。預設值為 2。

  • 填滿顏色和透明度,由 Color 類別定義。預設值為透明 (Color.TRANSPARENT)。

  • 點要素的點半徑,介於 0 到 128 像素之間。

使用簡易樣式規則

要設定地圖項目樣式,最簡單的方法就是定義 FeatureLayer.StyleFactory,無論地圖項目為何,它一律會建構相同的 FeatureStyle 物件。您可以直接將地圖項目樣式選項套用至資料集地圖項目圖層,也可以搭配 FeatureStyleFunction 使用。

使用宣告式樣式規則

您可以根據地圖項目屬性,以宣告方式設定樣式規則,並套用至整個資料集。您可以從地圖項目樣式函式傳回 null,例如希望部分地圖項目保持隱藏時。

例如,使用 DatasetFeature.getDatasetAttributes() 方法傳回地圖項目的資料集屬性 Map<String,String>。接著,您可以根據地圖項目的屬性自訂其樣式。

本範例會判斷資料集每個地圖項目的「highlightColor」屬性值,以控制樣式:

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; }

將樣式套用至資料集地圖項目圖層

本例會將樣式工廠函式套用至資料集地圖項目圖層中的多邊形。樣式工廠函式會將自訂填滿和筆劃樣式套用至多邊形:

  1. 如果尚未建立新的地圖 ID 和地圖樣式,請按照「開始使用」一文中的步驟進行。請務必啟用「Datasets」地圖項目圖層。

  2. 在地圖初始化時,取得資料集地圖項目圖層的參照。

    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(); }

  3. 建立樣式工廠函式,並套用至資料集地圖項目圖層。

    以下範例會將相同的填充和筆劃套用至資料集中的所有地圖項目。

    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); }

移除圖層中的樣式

如要移除圖層中的樣式,請呼叫 FeatureLayer.setFeatureStyle(null)

此外,也可以從樣式工廠傳回 null (例如,希望部分地圖項目保持隱藏時)。