設定界線多邊形的樣式

選取平台: 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_2 類型的地圖項目 COUNTRYLOCALITYPOSTAL_CODESCHOOL_DISTRICT

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

樣式工廠範例

此範例會將樣式工廠函式套用至縣市中的多邊形 地圖項目圖層樣式工廠函式會決定地圖項目的地點 ID 透過 PlaceFeature 執行個體 即可更新該物件如果地點 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. 建立樣式工廠函式,並套用至縣市 地圖項目圖層

    下例函式只會套用至地點 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)