設定界線多邊形的樣式

選取平台: 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 中的特定地點 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 是夏威夷州,則夏威夷 此函式會將自訂的填滿與筆觸樣式套用至多邊形:

  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 是夏威夷哈瓦伊文 (「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)