- מבוא
- הוספת GeoJsonLayer למפה
- הסרת GeoJsonLayer
- הוספה והסרה של GeoJsonFeature
- גישה ל-GeoJsonFeatures ולנכסים שלהן
- עיצוב של GeoJsonLayer ושל GeoJsonFeatures
- לצפייה באפליקציית ההדגמה
מבוא
GeoJSON הוא הרחבה של פורמט נתוני JSON ומייצג נתונים גיאוגרפיים. באמצעות הכלי הזה, אפשר לאחסן תכונות גיאוגרפיות בפורמט GeoJSON ולעבד אותן כשכבה על גבי המפה. כדי להוסיף ולהסיר את נתוני GeoJSON מהמפה, צריך להפעיל אותה:
addLayerToMap()
ו-removeLayerFromMap()
בהתאמה. באופן דומה, אפשר להוסיף ולהסיר תכונות ספציפיות על ידי קריאה
ל-addFeature()
ול-removeFeature()
והעברת
אובייקט GeoJsonFeature
. כדי לקבל גישה לתכונות האלה, אפשר לבצע קריאה ל-getFeatures()
כדי לקבל אפשרות חזרה על כל האובייקטים
GeoJsonFeature
שנוספו לשכבה.
אפשר גם להגדיר סגנונות ברירת מחדל שיוחלו על תכונות לפני שהן
נוספות לשכבה. לשם כך, צריך לקרוא ל-getDefaultPointStyle()
,
ל-getDefaultLineStringStyle()
או ל-
getDefaultPolygonStyle()
ולהגדיר את אפשרויות הסגנון בכל אחת מהן.
לחלופין, אפשר להגדיר את הסגנון עבור
GeoJsonFeature
ספציפי על ידי קריאה ל-setPointStyle()
,
ל-setLineStringStyle()
או ל-setPolygonStyle()
לתכונה והעברת אובייקט הסגנון הרלוונטי.
הוספת GeoJsonLayer למפה
כדי להוסיף למפה שכבת GeoJson, קודם יוצרים מכונה של מחלקה GeoJsonLayer. יש שתי דרכים ליצור מופע של GeoJsonLayer.
כדי לייבא מ-JSONObject
, צריך את הדברים הבאים:
- אובייקט
GoogleMap
שבו יש לעבד את השכבה - הקובץ
JSONObject
מכיל את נתוני GeoJSON שיש להוסיף לשכבה
Kotlin
val geoJsonData: JSONObject? = // JSONObject containing the GeoJSON data val layer = GeoJsonLayer(map, geoJsonData)
Java
JSONObject geoJsonData = // JSONObject containing the GeoJSON data GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);
כדי לייבא מקובץ GeoJSON מקומי, צריך את הדברים הבאים:
- אובייקט
GoogleMap
שבו יש לעבד את השכבה - קובץ משאבים מקומי שמכיל את נתוני GeoJSON
- אובייקט
Context
, שנדרש כדי לפתוח קובץ משאב מקומי
Kotlin
val layer = GeoJsonLayer(map, R.raw.geojson_file, context)
Java
GeoJsonLayer layer = new GeoJsonLayer(map, R.raw.geojson_file, context);
לאחר יצירת GeoJsonLayer
, צריך לקרוא ל-addLayerToMap()
כדי להוסיף למפה את הנתונים שיובאו:
Kotlin
layer.addLayerToMap()
Java
layer.addLayerToMap();
הסרת ה-GeoJsonLayer
נניח שהוספתם את השכבה הזו
Kotlin
val geoJsonData: JSONObject? = // JSONObject containing the GeoJSON data val layer = GeoJsonLayer(map, geoJsonData)
Java
JSONObject geoJsonData = // JSONObject containing the GeoJSON data GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);
כדי לנקות את GeoJsonLayer, צריך לקרוא ל-removeLayerFromMap()
Kotlin
layer.removeLayerFromMap()
Java
layer.removeLayerFromMap();
הוספה והסרה של GeoJsonFeature
קיימת תכונה ב-GeoJSON מסוג 'feature'. הוא מכיל גיאומטריה, רכיב בנכס, ויש לו גם תיבה תוחמת או מזהה.
אפשר ליצור GeoJsonFeature
אובייקטים בנפרד ולהוסיף אותם
ל- GeoJsonLayer
.
נניח שיצרת תכונה שמכילה נקודה ב-0 או 0 עם רשומה אחת במאפיינים שלה וללא תיבה תוחמת.
Kotlin
val point = GeoJsonPoint(LatLng(0.0, 0.0)) val properties = hashMapOf("Ocean" to "South Atlantic") val pointFeature = GeoJsonFeature(point, "Origin", properties, null)
Java
GeoJsonPoint point = new GeoJsonPoint(new LatLng(0, 0)); HashMap<String, String> properties = new HashMap<>(); properties.put("Ocean", "South Atlantic"); GeoJsonFeature pointFeature = new GeoJsonFeature(point, "Origin", properties, null);
כדי להוסיף את התכונה לשכבה, קוראים ל-addFeature()
ומעבירים
את התכונה להוספה.
Kotlin
layer.addFeature(pointFeature)
Java
layer.addFeature(pointFeature);
כדי להסיר פיצ'ר אחרי שמוסיפים אותו לשכבה, צריך לקרוא
ל-removeFeature()
ולהעביר את התכונה כדי להסיר אותה.
Kotlin
layer.removeFeature(pointFeature)
Java
layer.removeFeature(pointFeature);
גישה ל-GeoJsonFeatures ולמאפיינים שלהם
כדי לגשת לכל ה-GeoJsonFeatures שנוספו לשכבה, אפשר להפעיל את getFeatures()
ב-GeoJsonLayer
שיצרת. הפעולה הזו תחזיר את הערך GeoJsonFeatures
שניתן לגשת אליו באמצעות לולאת for כל אחת כפי שמתואר בהמשך.
Kotlin
for (feature in layer.features) { // Do something to the feature }
Java
for (GeoJsonFeature feature : layer.getFeatures()) { // Do something to the feature }
אפשר להשתמש בשיטות hasProperty()
ו-getProperty()
בשילוב עם השיטה getFeatures()
כדי לבדוק אם לכל תכונה מאוחסנת יש נכס מסוים ולגשת אליו אם הוא קיים.
Kotlin
if (feature.hasProperty("Ocean")) { val oceanProperty = feature.getProperty("Ocean") }
Java
if (feature.hasProperty("Ocean")) { String oceanProperty = feature.getProperty("Ocean"); }
אירועי קליקים בגיאומטריה בפורמט GeoJSON
אפשר להשתמש ב-GeoJsonLayer.OnFeatureClickListener()
כדי להאזין לאירועים מסוג קליק בתכונות הגאומטריה במפה. בדוגמה הבאה שמתועדת השם של התכונה כשהמשתמש
לוחץ עליה:
Kotlin
// Set a listener for geometry clicked events. layer.setOnFeatureClickListener { feature -> Log.i("GeoJsonClick", "Feature clicked: ${feature.getProperty("title")}") }
Java
// Set a listener for geometry clicked events. layer.setOnFeatureClickListener(new Layer.OnFeatureClickListener() { @Override public void onFeatureClick(Feature feature) { Log.i("GeoJsonClick", "Feature clicked: " + feature.getProperty("title")); } });
עיצוב התכונות GeoJsonLayer ו-GeoJsonFeatures
אפשר להגדיר סגנונות ברירת מחדל ל-GeoJsonLayer, או לעצב תכונות בודדות בשכבה.
סגנונות ברירת מחדל
ב-GeoJsonLayer אפשר להגדיר סגנונות ברירת מחדל לכל נקודה, מחרוזות קו ופוליגונים שיתווספו לשכבה. סגנונות ברירת מחדל מוחלים רק אם לתכונה לא הוגדר סגנון לאחת מהגיאומטריות שלה. שינויים שיבוצעו בסגנון ברירת המחדל יבואו לידי ביטוי גם בכל התכונות שמשתמשות בסגנון ברירת המחדל.
כדי להחיל סגנון ברירת מחדל יש לבצע את השלבים הבאים:
- אחזור של אובייקט סגנון ברירת המחדל הרלוונטי. אובייקט זה יכול להיות מסוג
GeoJsonPointStyle
,GeoJsonLineStringStyle
אוGeoJsonPolygonStyle
. - מחילים את האפשרויות הרצויות על הסגנון.
לדוגמה, דוגמת הקוד הבאה מראה איך לשנות את סגנון ברירת המחדל של הנקודות, כדי שניתן יהיה לגרור את הנקודות באמצעות כותרת וקטע טקסט.
Kotlin
val pointStyle = layer.defaultPointStyle pointStyle.isDraggable = true pointStyle.title = "Hello, World!" pointStyle.snippet = "I am a draggable marker"
Java
GeoJsonPointStyle pointStyle = layer.getDefaultPointStyle(); pointStyle.setDraggable(true); pointStyle.setTitle("Hello, World!"); pointStyle.setSnippet("I am a draggable marker");
סגנונות ספציפיים ל-GeoJsonFeature
לחלופין, אפשר לעצב תכונות בודדות בשכבה. כדי להחיל סגנון על GeoJsonFeature
:
- יוצרים את אובייקט הסגנון הרלוונטי. אובייקט זה יכול להיות
GeoJsonPointStyle
,GeoJsonLineStringStyle
אוGeoJsonPolygonStyle
. - מחילים את האפשרויות הרצויות על הסגנון.
- מעבירים את אובייקט הסגנון
לשיטה הרלוונטית ב-
GeoJsonFeature
, שתהיהsetPointStyle()
,setLineStringStyle()
אוsetPolygonStyle()
.
לדוגמה, כך מתאימים אישית את סגנון מחרוזת הקווים של GeoJsonFeature
כך שהצבע שלו יהיה אדום.
Kotlin
// Create a new feature containing a linestring val lineStringArray: MutableList<LatLng> = ArrayList() lineStringArray.add(LatLng(0.0, 0.0)) lineStringArray.add(LatLng(50.0, 50.0)) val lineString = GeoJsonLineString(lineStringArray) val lineStringFeature = GeoJsonFeature(lineString, null, null, null) // Set the color of the linestring to red val lineStringStyle = GeoJsonLineStringStyle() lineStringStyle.color = Color.RED // Set the style of the feature lineStringFeature.lineStringStyle = lineStringStyle
Java
// Create a new feature containing a linestring List<LatLng> lineStringArray = new ArrayList<LatLng>(); lineStringArray.add(new LatLng(0, 0)); lineStringArray.add(new LatLng(50, 50)); GeoJsonLineString lineString = new GeoJsonLineString(lineStringArray); GeoJsonFeature lineStringFeature = new GeoJsonFeature(lineString, null, null, null); // Set the color of the linestring to red GeoJsonLineStringStyle lineStringStyle = new GeoJsonLineStringStyle(); lineStringStyle.setColor(Color.RED); // Set the style of the feature lineStringFeature.setLineStringStyle(lineStringStyle);
לצפייה באפליקציית ההדגמה
לקבלת דוגמה לייבוא קובץ GeoJSON מכתובת URL וליצירת שכבה
באמצעותו, אפשר להציץ ב-GeoJsonDemoActivity
באפליקציית ההדגמה
שכלולה בספריית כלי השירות. במדריך ההגדרה מוסבר איך להפעיל את אפליקציית ההדגמה.