Untuk menerapkan gaya goresan dan isian ke poligon batas di lapisan fitur:
Buat fungsi factory gaya yang mengimplementasikan antarmuka
FeatureLayer.StyleFactory
. Fungsi ini menentukan logika gaya untuk lapisan fitur.Panggil
FeatureLayer.setFeatureStyle()
untuk menerapkan fungsi factory gaya ke lapisan fitur.
Peta contoh berikut menunjukkan cara menandai poligon batas untuk satu wilayah di lapisan fitur Lokalitas.
Membuat fungsi factory gaya
Fungsi factory gaya diterapkan ke setiap poligon di lapisan fitur yang terpengaruh saat Anda menetapkan fungsi di lapisan fitur. Fungsi ini harus menampilkan objek FeatureStyle
yang menentukan cara menata gaya poligon.
Maps SDK for Android meneruskan instance Feature
ke fungsi factory gaya. Instance Feature
mewakili
metadata fitur, yang memberi Anda akses ke metadata dalam fungsi
factory gaya.
Fungsi factory gaya harus selalu menampilkan hasil yang konsisten saat diterapkan. Misalnya, jika Anda ingin mewarnai sekumpulan fitur secara acak, bagian acak tersebut tidak boleh terjadi di fungsi gaya fitur karena akan menyebabkan hasil yang tidak diinginkan.
Karena fungsi ini berjalan di setiap fitur dalam lapisan, pengoptimalan harus dilakukan. Agar tidak memengaruhi waktu rendering:
Hanya aktifkan lapisan fitur yang Anda perlukan.
Panggil
FeatureLayer.setFeatureStyle(null)
saat lapisan fitur tidak lagi digunakan.
Menetapkan goresan dan isi poligon
Saat menata gaya poligon batas dalam fungsi factory gaya, Anda dapat menyetel:
Warna dan opasitas goresan batas poligon dalam format warna ARGB, seperti yang ditentukan oleh class
Color
. Nilai defaultnya adalah transparan (0x00000000).Lebar goresan batas poligon dalam piksel layar. Nilai defaultnya adalah 2.
Warna isian dan opasitas poligon dalam format warna ARGB, seperti yang ditentukan oleh class
Color
. Nilai defaultnya adalah transparan (0x00000000).
Mencari ID tempat untuk menarget fitur
Banyak aplikasi menerapkan gaya pada fitur berdasarkan lokasi fitur. Misalnya, Anda mungkin ingin menerapkan gaya ke berbagai negara, wilayah, atau wilayah. Lokasi fitur direpresentasikan oleh ID tempat.
ID tempat secara unik mengidentifikasi tempat di database Google Places dan Google Maps. Untuk mendapatkan ID tempat:
- Gunakan Places API dan Geocoding untuk menelusuri wilayah berdasarkan nama, dan dapatkan ID tempat untuk wilayah dalam batas yang ditentukan.
- Dapatkan data dari peristiwa klik. Data ini akan menampilkan Fitur yang sesuai dengan wilayah yang diklik, yang memberikan akses ke ID tempat dan kategori jenis fitur.
Cakupan bervariasi menurut wilayah. Lihat cakupan batas Google untuk mengetahui detailnya.
Nama geografis tersedia dari banyak sumber, seperti USGS Board on Geographic Names, dan U.S. Gazetteer Files.
Menggunakan PlaceFeature untuk mendapatkan ID tempat
Class PlaceFeature
adalah subclass dari class Feature
.
Ini mewakili fitur tempat (fitur dengan ID tempat) yang mencakup
fitur jenis ADMINISTRATIVE_AREA_LEVEL_1
, ADMINISTRATIVE_AREA_LEVEL_2
,
COUNTRY
, LOCALITY
, POSTAL_CODE
, dan SCHOOL_DISTRICT
.
Jika ID tempat tersedia, Maps SDK for Android akan meneruskan instance PlaceFeature
ke fungsi factory gaya sehingga Anda dapat menentukan lokasi fitur.
Contoh factory gaya
Contoh ini menerapkan fungsi factory gaya pada poligon di lapisan fitur Lokalitas. Fungsi factory gaya menentukan ID tempat fitur
dengan menggunakan instance PlaceFeature
. Jika ID tempat adalah untuk Hana, Hawaii, fungsi ini akan menerapkan gaya isian dan goresan kustom ke poligon:
Jika Anda belum melakukannya, ikuti langkah-langkah di bagian Memulai untuk membuat gaya peta dan ID peta baru. Pastikan untuk mengaktifkan lapisan fitur Lokalitas.
Dapatkan referensi ke lapisan fitur Locality saat peta melakukan inisialisasi.
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() }Buat fungsi factory gaya dan terapkan ke lapisan fitur Lokalitas.
Contoh berikut hanya menerapkan fungsi jika ID tempat fitur adalah untuk Hana, Hawaii ("ChIJ0zQtYiWsVHkRk8lRoB1RNPo"). Jika ID tempat yang ditentukan bukan untuk Hana, Hawaii, gaya tidak akan diterapkan.
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) }
Menghapus gaya visual dari lapisan
Untuk menghapus gaya visual dari lapisan, panggil FeatureLayer.setFeatureStyle(null)
.