כדי להחיל סגנונות של קווים ומילוי על פוליגונים של גבולות בשכבת תכונות:
יוצרים פונקציית ייצור של סגנון שמטמיעה את הממשק
FeatureLayer.StyleFactory
. הפונקציה הזו מגדירה את לוגיקת העיצוב לשכבת תכונה.קוראים לפונקציה
FeatureLayer.setFeatureStyle()
כדי להחיל את פונקציית מפעל הסגנון על שכבת התכונות.
במפה לדוגמה הבאה מודגש הפוליגון של הגבול של אזור יחיד בשכבת תכונות של יישוב.
יצירת פונקציית ייצור של סגנון
הפונקציה של סגנון המפעל חלה על כל פוליגון בשכבת התכונות המושפעת בזמן שמגדירים את הפונקציה בשכבת התכונות. הפונקציה הזו חייבת להחזיר אובייקט FeatureStyle
שמציין איך לעצב את הפוליגון.
ה-SDK של מפות ל-Android מעביר מופע של Feature
לפונקציית המפעל של הסגנון. המכונה Feature
מייצגת את המטא-נתונים של התכונה, ומספקת גישה למטא-נתונים בפונקציית המפעל של הסגנון.
הפונקציה של מפעל הסגנון תמיד אמורה להחזיר תוצאות עקביות כשהיא חלה. לדוגמה, אם רוצים לצבוע קבוצה של תכונות באופן אקראי, החלק האקראי לא צריך להופיע בפונקציה של סגנון התכונה, כי זה יגרום לתוצאות לא רצויות.
הפונקציה הזו פועלת על כל התכונות בשכבה, ולכן חשוב לבצע אופטימיזציה. כדי להימנע מהשפעה על זמני העיבוד:
מפעילים רק את שכבות התכונות הנחוצות.
צריך לקרוא ל-
FeatureLayer.setFeatureStyle(null)
כששכבת תכונות לא בשימוש יותר.
הגדרה של שרטוט ומילוי של פוליגון
כשנותנים סגנון לפוליגון גבול בפונקציה של מפעל הסגנונות, אפשר להגדיר את:
צבע ושקיפות הקו של גבול הפוליגון בפורמט הצבע ARGB, כפי שהוגדר על ידי הכיתה
Color
. ערך ברירת המחדל הוא שקוף (0x00000000).עובי הקו של גבול הפוליגון בפיקסלים של המסך. ערך ברירת המחדל הוא 2.
צבע המילוי והאטימות של הפוליגון בפורמט הצבע ARGB, כפי שהוגדר על ידי הכיתה
Color
. ערך ברירת המחדל הוא שקוף (0x00000000).
חיפוש מזהי מקומות לצורך טירגוט תכונות
באפליקציות רבות, סגנונות חלים על תכונה על סמך המיקום שלה. לדוגמה, יכול להיות שתרצו להחיל סגנון על מדינות, אזורים או טריטוריות שונים. המיקום של התכונה מיוצג על ידי מזהה מקום.
המזהה הייחודי של מקום במסד הנתונים של 'מקומות Google' ובמפות Google. כדי לקבל מזהה מקום:
- שימוש ב-Places APIs ובגיאוקוד כדי לחפש אזורים לפי שם ולקבל מזהי מקומות של אזורים בתוך גבולות שצוינו.
- איך מקבלים נתונים מאירועי קליקים הפעולה הזו מחזירה את התכונה שתואמת לאזור שעליו לוחצים, ומספקת גישה למזהה המקום ולקטגוריה של סוג התכונה.
הכיסוי משתנה בהתאם לאזור. פרטים נוספים זמינים במאמר היקף הכיסוי של גבולות Google.
שמות גיאוגרפיים זמינים ממקורות רבים, כמו המועצה של USGS לשמות גיאוגרפיים וקובצי ה-Gazetteer של ארה"ב.
שימוש ב-PlaceFeature כדי לקבל מזהה מקום
הכיתה PlaceFeature
היא Subclass של הכיתה Feature
.
הוא מייצג מאפיין מקום (מאפיין עם מזהה מקום) שכולל מאפיינים מסוג ADMINISTRATIVE_AREA_LEVEL_1
, ADMINISTRATIVE_AREA_LEVEL_2
, COUNTRY
, LOCALITY
, POSTAL_CODE
ו-SCHOOL_DISTRICT
.
כשמזהה המקום זמין, ה-SDK של מפות Google ל-Android מעביר את המכונה PlaceFeature
לפונקציה של היצרן של סגנון, כדי שתוכלו לקבוע את מיקום התכונה.
דוגמה למפעל סגנונות
בדוגמה הזו מחילים פונקציית סגנון של מפעל על פוליגון בשכבת התכונות Locality. הפונקציה להגדרות המקוריות של הסגנון קובעת את מזהה המקום של התכונה באמצעות המכונה 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() }יוצרים פונקציית סגנון ומחילים אותה על שכבת התכונה Locality.
בדוגמה הבאה, הפונקציה חלה רק אם מזהה המקום של התכונה הוא של Hana, Hawaii ("ChIJ0zQtYiWsVHkRk8lRoB1RNPo"). אם מזהה המקום שצוין לא שייך ל-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)
.