วิธีใช้สไตล์สำหรับเส้นขอบและการเติมสีกับรูปหลายเหลี่ยมขอบเขตในเลเยอร์ของฟีเจอร์
สร้างฟังก์ชันโรงงานสไตล์ที่ใช้อินเทอร์เฟซ
FeatureLayer.StyleFactoryฟังก์ชันนี้จะกำหนดตรรกะการจัดสไตล์สำหรับเลเยอร์ของฟีเจอร์เรียกใช้
FeatureLayer.setFeatureStyle()เพื่อใช้ฟังก์ชันโรงงานสไตล์กับเลเยอร์ของฟีเจอร์
แผนที่ตัวอย่างต่อไปนี้แสดงการไฮไลต์รูปหลายเหลี่ยมขอบเขตสำหรับภูมิภาคเดียวในเลเยอร์ของฟีเจอร์ท้องถิ่น
สร้างฟังก์ชันโรงงานสไตล์
ระบบจะใช้ฟังก์ชัน Style Factory กับรูปหลายเหลี่ยมทุกรูปในเลเยอร์ของฟีเจอร์ที่ได้รับผลกระทบ ณ เวลาที่คุณตั้งค่าฟังก์ชันในเลเยอร์ของฟีเจอร์ ฟังก์ชันนี้ต้องแสดงผลออบเจ็กต์ FeatureStyle ที่ระบุวิธีจัดสไตล์รูปหลายเหลี่ยม
Maps SDK สำหรับ Android จะส่งอินสแตนซ์ Feature ไปยังฟังก์ชันโรงงานสไตล์ อินสแตนซ์ Feature แสดงข้อมูลเมตาของฟีเจอร์ ซึ่งช่วยให้คุณเข้าถึงข้อมูลเมตาในฟังก์ชันแฟกทอรีสไตล์ได้
ฟังก์ชันโรงงานของสไตล์ควรแสดงผลลัพธ์ที่สอดคล้องกันเสมอเมื่อมีการใช้ ตัวอย่างเช่น หากต้องการสุ่มสีชุดฟีเจอร์ ส่วนสุ่มไม่ควรอยู่ในฟังก์ชันรูปแบบฟีเจอร์ เนื่องจากจะทำให้เกิดผลลัพธ์ที่ไม่ได้ตั้งใจ
เนื่องจากฟังก์ชันนี้ทำงานกับทุกฟีเจอร์ในเลเยอร์ การเพิ่มประสิทธิภาพจึงเป็นสิ่งสำคัญ วิธีหลีกเลี่ยงไม่ให้ส่งผลกระทบต่อเวลาในการแสดงผล
เปิดใช้เฉพาะเลเยอร์ของฟีเจอร์ที่ต้องการ
เรียกใช้
FeatureLayer.setFeatureStyle(null)เมื่อไม่ได้ใช้เลเยอร์ของฟีเจอร์แล้ว
กำหนดเส้นขอบและการเติมสีของรูปหลายเหลี่ยม
เมื่อจัดรูปแบบรูปหลายเหลี่ยมขอบเขตในฟังก์ชันโรงงานสไตล์ คุณสามารถตั้งค่าต่อไปนี้ได้
สีและความทึบแสงของเส้นขอบของรูปหลายเหลี่ยมในรูปแบบสี ARGB ตามที่กำหนดโดยคลาส
Colorค่าเริ่มต้นคือโปร่งใส (0x00000000)ความกว้างของเส้นโครงร่างของเส้นขอบรูปหลายเหลี่ยมในหน่วยพิกเซลของหน้าจอ ค่าเริ่มต้นคือ 2
สีเติมและความทึบแสงของรูปหลายเหลี่ยมในรูปแบบสี ARGB ตามที่กำหนดโดยคลาส
Colorค่าเริ่มต้นคือโปร่งใส (0x00000000)
ค้นหารหัสสถานที่เพื่อกำหนดเป้าหมายฟีเจอร์
แอปพลิเคชันจำนวนมากใช้รูปแบบกับฟีเจอร์ตามตำแหน่งของฟีเจอร์ เช่น คุณอาจต้องการใช้การจัดรูปแบบกับประเทศ เขตแดน หรือภูมิภาคต่างๆ ตำแหน่งของจุดสังเกตจะแสดงด้วยรหัสสถานที่
รหัสสถานที่จะระบุสถานที่ในฐานข้อมูล Google Places และใน Google Maps โดยไม่ซ้ำกัน วิธีดูรหัสสถานที่
- ใช้ Places API และการเข้ารหัสพิกัดภูมิศาสตร์เพื่อค้นหาภูมิภาคตามชื่อ และรับรหัสสถานที่สำหรับภูมิภาคภายในขอบเขตที่ระบุ
- รับข้อมูลจากกิจกรรมการคลิก ซึ่งจะแสดงผล Feature ที่สอดคล้องกับภูมิภาคที่คลิก ซึ่งจะให้สิทธิ์เข้าถึงรหัสสถานที่และหมวดหมู่ประเภทฟีเจอร์
ความครอบคลุมจะแตกต่างกันไปตามภูมิภาค ดูรายละเอียดได้ที่ความครอบคลุมของขอบเขต Google
ชื่อทางภูมิศาสตร์มีให้บริการจากหลายแหล่ง เช่น USGS Board on Geographic Names และ U.S. Gazetteer Files
ใช้ PlaceFeature เพื่อรับรหัสสถานที่
คลาส PlaceFeature เป็นคลาสย่อยของคลาส Feature
ซึ่งแสดงถึงฟีเจอร์สถานที่ (ฟีเจอร์ที่มีรหัสสถานที่) ซึ่งรวมถึงฟีเจอร์ประเภท ADMINISTRATIVE_AREA_LEVEL_1, ADMINISTRATIVE_AREA_LEVEL_2, COUNTRY, LOCALITY, POSTAL_CODE และ SCHOOL_DISTRICT
เมื่อรหัสสถานที่มีอยู่ Maps SDK สำหรับ Android จะส่งอินสแตนซ์ของ PlaceFeature ไปยังฟังก์ชันโรงงานสไตล์เพื่อให้คุณระบุตำแหน่งของฟีเจอร์ได้
ตัวอย่างโรงงานสไตล์
ตัวอย่างนี้ใช้ฟังก์ชันโรงงานสไตล์กับรูปหลายเหลี่ยมในเลเยอร์ของฟีเจอร์ท้องถิ่น ฟังก์ชันสไตล์แฟกทอรีจะกำหนดรหัสสถานที่ของฟีเจอร์โดยใช้อินสแตนซ์ PlaceFeature หากรหัสสถานที่เป็นของฮานา ฮาวาย ฟังก์ชันจะใช้รูปแบบการเติมและเส้นขีดที่กำหนดเองกับรูปหลายเหลี่ยม ดังนี้
หากยังไม่ได้ดำเนินการ ให้ทำตามขั้นตอนในหัวข้อเริ่มต้นใช้งานเพื่อสร้างรหัสแผนที่และรูปแบบแผนที่ใหม่ อย่าลืมเปิดใช้เลเยอร์ของฟีเจอร์ท้องถิ่น
รับข้อมูลอ้างอิงไปยังเลเยอร์ของฟีเจอร์ท้องถิ่นเมื่อแผนที่เริ่มต้น
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() }สร้างฟังก์ชันโรงงานสไตล์และใช้กับเลเยอร์ของฟีเจอร์ท้องถิ่น
ตัวอย่างต่อไปนี้จะใช้ฟังก์ชันก็ต่อเมื่อรหัสสถานที่ของฟีเจอร์เป็นของฮานา ฮาวาย ("ChIJ0zQtYiWsVHkRk8lRoB1RNPo") เท่านั้น หากรหัสสถานที่ที่ระบุไม่ใช่ของฮานา ฮาวาย ระบบจะไม่ใช้สไตล์ดังกล่าว
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)