設定界線多邊形的樣式

選取平台: Android iOS JavaScript

如何將筆劃與填色的樣式套用至地圖項目圖層中的界線多邊形:

  1. 建立會實作 FeatureLayer.StyleFactory 存取 API這個函式定義地圖項目圖層的樣式邏輯。

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

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

這張螢幕截圖顯示哈娜夏威夷多邊形。

建立樣式工廠函式

樣式工廠函式會套用至受影響地圖項目中的每個多邊形 可在您設定函式圖層的函式時啟動。這個函式必須傳回 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. 建立樣式工廠函式,並套用至 Locality 地圖項目圖層。

    以下範例只有在地點符合以下條件時,才適用這個函式 這項功能的 ID 是夏威夷哈瓦伊文 (「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)