如要將筆劃和填滿的樣式套用至地圖項目圖層中的界線多邊形,請按照下列步驟操作:
建立實作
FeatureLayer.StyleFactory
介面的樣式工廠函式。這個函式定義地圖項目圖層的樣式邏輯。呼叫
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:
- 使用 Places API 和 Geocoding API 搜尋區域名稱,然後找出指定範圍內區域的地點 ID。
- 從點擊事件取得資料。 即可傳回與點擊區域相對應的地圖項目,並提供地點 ID 和地圖項目類型類別的存取權。
涵蓋範圍會因區域而異。詳情請參閱「Google 邊界涵蓋範圍」一文。
提供地理名稱的來源很多,例如 USGS 地理名稱委員會和美國 Gazetteer 檔案。
使用 PlaceFeature 取得地點 ID
PlaceFeature
類別是 Feature
類別的子類別。代表地點地圖項目 (有地點 ID 的地圖項目),其中包含 ADMINISTRATIVE_AREA_LEVEL_1
、ADMINISTRATIVE_AREA_LEVEL_2
、COUNTRY
、LOCALITY
、POSTAL_CODE
和 SCHOOL_DISTRICT
類型的地圖項目。
如果有地點 ID,Maps SDK for Android 會將 PlaceFeature
的例項傳遞至樣式工廠函式,方便您判斷地圖項目的位置。
樣式工廠範例
本例會將樣式工廠函式套用至縣市地圖項目圖層中的多邊形。樣式工廠函式會使用 PlaceFeature
執行個體來判斷地圖項目的地點 ID。如果地點 ID 是夏威夷的 Hana,函式會將自訂填滿和筆劃樣式套用至多邊形:
如果尚未建立新的地圖 ID 和地圖樣式,請按照「開始使用」一文中的步驟進行。請務必啟用縣市地圖項目圖層。
在地圖初始化時,取得縣市地圖項目圖層的參照。
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() }建立樣式工廠函式,並套用至縣市地圖項目圖層。
以下範例只有在地圖項目 ID 適用於夏威夷哈瓦州時,才會套用這個函式 (「ChIJ0zQtYiWsVHkRk8lRoB1RNPo」)。如果指定的地點 ID 不是夏威夷的 Hana,系統就不會套用樣式。
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)
。