設定界線多邊形的樣式

選取平台: Android iOS JavaScript

如要將筆劃和填滿的樣式套用至地圖項目圖層中的界線多邊形,請按照下列步驟操作:

  1. 建立實作 FeatureLayer.StyleFactory 介面的樣式工廠函式。這個函式會定義地圖項目圖層的樣式邏輯。

  2. 呼叫 FeatureLayer.setFeatureStyle(),將樣式工廠函式套用至地圖項目圖層。

以下地圖範例說明如何使用縣市地圖項目圖層中的界線多邊形突顯單一區域。

這張螢幕截圖顯示夏威夷島 Hana 的多邊形。

建立樣式工廠函式

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

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

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

因為這個函式會針對圖層中每個地圖項目執行,所以最佳化非常重要。如要避免影響算繪時間,請執行下列操作:

  • 僅啟用所需的地圖項目圖層。

  • 如果地圖項目圖層已不再使用,請呼叫 FeatureLayer.setFeatureStyle(null)

設定多邊形的筆觸和填充

在樣式工廠函式中設定界線多邊形樣式時,您可以設定下列項目:

  • 筆劃顏色和不透明度:多邊形邊框的 ARGB 顏色格式,由 Color 類別定義。預設值為透明 (0x00000000)。

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

  • 多邊形的填滿顏色和不透明度,以 ARGB 顏色格式表示,如 Color 類別所定義。預設值為透明 (0x00000000)。

查詢地點 ID 來指定地圖項目

許多應用程式會根據地圖項目位置,為地圖項目套用樣式。舉例來說,您可能會想為不同國家/地區、領土或區域套用樣式。地點 ID 代表地點位置。

地點 ID 可以用來辨識 Google 地點介面集資料庫和 Google 地圖中的特定地點。如要取得地點 ID,請按照下列步驟操作:

涵蓋範圍會因區域而異。詳情請參閱「Google 邊界涵蓋範圍」一文。

提供地理名稱的來源很多,例如 USGS 地理名稱委員會美國 Gazetteer 檔案

使用 PlaceFeature 取得地點 ID

PlaceFeature 類別是 Feature 類別的子類別。它代表地點地圖項目 (具有地點 ID 的地圖項目),其中包含 ADMINISTRATIVE_AREA_LEVEL_1ADMINISTRATIVE_AREA_LEVEL_2COUNTRYLOCALITYPOSTAL_CODESCHOOL_DISTRICT 類型的地圖項目。

當地點 ID 可用時,Maps SDK for Android 會將 PlaceFeature 的例項傳遞至樣式工廠函式,以便您判斷地圖項目的位置。

樣式工廠範例

本例會將樣式工廠函式套用至縣市地圖項目圖層中的多邊形。樣式工廠函式會使用 PlaceFeature 例項,判斷地圖項目的地點 ID。如果地點 ID 是夏威夷的 Hana,函式會將自訂填滿和筆劃樣式套用至多邊形:

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

  2. 在地圖初始化時,取得縣市地圖項目圖層的參照。

    Java

    private FeatureLayer localityLayer;
    @Override public void onMapReady(GoogleMap map) { // Get the LOCALITY feature layer. localityLayer = map.getFeatureLayer(new FeatureLayerOptions.Builder() .featureType(FeatureType.LOCALITY) .build());
    // Apply style factory function to LOCALITY layer. styleLocalityLayer(); }

    Kotlin

    private var localityLayer: FeatureLayer? = null
    override fun onMapReady(googleMap: GoogleMap) { // Get the LOCALITY feature layer. localityLayer = googleMap.getFeatureLayer(FeatureLayerOptions.Builder() .featureType(FeatureType.LOCALITY) .build())
    // Apply style factory function to LOCALITY layer. styleLocalityLayer() }

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

    下列範例只會在地點 ID 為夏威夷州 Hana 的情況下套用函式 (即「ChIJ0zQtYiWsVHkRk8lRoB1RNPo」)。如果指定的地點 ID 不是夏威夷的花蓮,系統就不會套用樣式。

    Java

    private void styleLocalityLayer() {
    // Create the style factory function. FeatureLayer.StyleFactory styleFactory = (Feature feature) -> {
    // Check if the feature is an instance of PlaceFeature, // which contains a place ID. if (feature instanceof PlaceFeature) { PlaceFeature placeFeature = (PlaceFeature) feature;
    // Determine if the place ID is for Hana, HI. if (placeFeature.getPlaceId().equals("ChIJ0zQtYiWsVHkRk8lRoB1RNPo")) {
    // Use FeatureStyle.Builder to configure the FeatureStyle object // returned by the style factory function. return new FeatureStyle.Builder() // Define a style with purple fill at 50% opacity and solid purple border. .fillColor(0x80810FCB) .strokeColor(0xFF810FCB) .build(); } } return null; };
    // Apply the style factory function to the feature layer. localityLayer.setFeatureStyle(styleFactory); }

    Kotlin

    private fun styleLocalityLayer() {
    // Create the style factory function. val styleFactory = FeatureLayer.StyleFactory { feature: Feature ->
    // Check if the feature is an instance of PlaceFeature, // which contains a place ID. if (feature is PlaceFeature) { val placeFeature: PlaceFeature = feature as PlaceFeature
    // Determine if the place ID is for Hana, HI. if (placeFeature.getPlaceId().equals("ChIJ0zQtYiWsVHkRk8lRoB1RNPo")) {
    // Use FeatureStyle.Builder to configure the FeatureStyle object // returned by the style factory function. return@StyleFactory FeatureStyle.Builder() // Define a style with purple fill at 50% opacity and // solid purple border. .fillColor(0x80810FCB.toInt()) .strokeColor(0xFF810FCB.toInt()) .build() } } return@StyleFactory null }
    // Apply the style factory function to the feature layer. localityLayer?.setFeatureStyle(styleFactory) }

移除圖層中的樣式

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