כדי להחיל סגנונות של קו מתאר ומילוי על פוליגונים של גבולות בשכבה במפה:
יוצרים פונקציה של מפעל סגנונות שמטמיעה את הממשק
FeatureLayer.StyleFactory. הפונקציה הזו מגדירה את הלוגיקה של הסגנון לשכבה במפה.מפעילים את הפונקציה
FeatureLayer.setFeatureStyle()כדי להחיל את פונקציית ה-factory של הסגנון על שכבת התכונות.
במפה לדוגמה הבאה מוצגת הדגשה של פוליגון הגבול של אזור אחד בשכבה במפה של יישוב.
יצירת פונקציה של מפעל סגנונות
פונקציית ה-factory של הסגנון מוחלת על כל פוליגון בשכבת התכונות המושפעת כשמגדירים את הפונקציה בשכבת התכונות. הפונקציה הזו צריכה להחזיר אובייקט FeatureStyle שמציין את הסגנון של הפוליגון.
SDK של מפות ל-Android מעביר מופע של Feature לפונקציה של יצירת הסגנון. המופע של Feature מייצג את המטא-נתונים של התכונה, ומאפשר לכם לגשת למטא-נתונים בפונקציה של מפעל הסגנונות.
פונקציית ה-style factory צריכה תמיד להחזיר תוצאות עקביות כשהיא מופעלת. לדוגמה, אם רוצים לצבוע קבוצה של תכונות באופן אקראי, החלק האקראי לא צריך להתבצע בפונקציה של סגנון התכונה, כי זה יגרום לתוצאות לא מכוונות.
הפונקציה הזו פועלת על כל תכונה בשכבה, ולכן חשוב לבצע אופטימיזציה. כדי להימנע מהשפעה על זמני הרינדור:
מפעילים רק את שכבות המפה שצריך.
צריך להפעיל את
FeatureLayer.setFeatureStyle(null)כששכבה במפה כבר לא בשימוש.
הגדרת קו המתאר והמילוי של הפוליגון
כשמעצבים פוליגון גבול בפונקציית ה-factory של הסגנון, אפשר להגדיר את:
צבע הקו והאטימות של גבול הפוליגון בפורמט הצבע ARGB, כפי שמוגדר על ידי המחלקה
Color. ערך ברירת המחדל הוא שקוף (0x00000000).רוחב הקו של גבול הפוליגון בפיקסלים במסך. ערך ברירת המחדל הוא 2.
צבע המילוי והאטימות של המצולע בפורמט הצבע ARGB, כפי שמוגדר על ידי המחלקה
Color. ערך ברירת המחדל הוא שקוף (0x00000000).
חיפוש מזהי מקומות כדי לטרגט תכונות
אפליקציות רבות מחילות סגנונות על תכונה על סמך מיקום התכונה. לדוגמה, אם רוצים להחיל סגנון על מדינות, טריטוריות או אזורים שונים. מיקום התכונה מיוצג על ידי מזהה מקום.
מזהה מקום הוא המזהה הייחודי של מקום במסד הנתונים של "מקומות Google" ובמפות Google. כדי לקבל מזהה מקום:
- משתמשים בממשקי Places API ובהמרת כתובות לקואורדינטות (geocoding) כדי לחפש אזורים לפי שם, ולקבל מזהי מקומות של אזורים בתוך גבולות מוגדרים.
- קבלת נתונים מאירועים מסוג קליק. הפונקציה הזו מחזירה את המאפיין שתואם לאזור שעליו לחצו, ומספקת גישה למזהה המקום ולקטגוריית סוג המאפיין שלו.
רמת הכיסוי תלויה באזור. פרטים נוספים זמינים במאמר כיסוי הגבולות של 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.
כשהמזהה של המקום זמין, ה-SDK של מפות ל-Android מעביר מופע של PlaceFeature לפונקציה של יצירת הסגנון כדי שתוכלו לקבוע את המיקום של התכונה.
דוגמה למפעל עיצוב
בדוגמה הזו, פונקציית ה-style factory מוחלת על פוליגון בשכבת התכונות של היישוב. פונקציית ה-style factory קובעת את מזהה המקום של הישות באמצעות המכונה PlaceFeature. אם מזהה המקום הוא של Hana, Hawaii, הפונקציה מחילה סגנון מותאם אישית של מילוי וקו מתאר על הפוליגון:
אם עדיין לא עשיתם זאת, בצעו את השלבים שמפורטים בקטע תחילת העבודה כדי ליצור מזהה מפה וסגנון מפה חדשים. חשוב להפעיל את שכבת המפה Locality.
מקבלים הפניה לשכבת המפה של היישוב כשהמפה מאותחלת.
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).