כלי השירות GeoJSON Utility של מפות Google ב-Android

בחירת פלטפורמה: Android iOS JavaScript
  1. מבוא
  2. הוספת GeoJsonLayer למפה
  3. הסרת GeoJsonLayer
  4. הוספה והסרה של GeoJsonFeature
  5. גישה ל-GeoJsonFeatures ולנכסים שלהן
  6. עיצוב של GeoJsonLayer ושל GeoJsonFeatures
  7. לצפייה באפליקציית ההדגמה

מבוא

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 אפשר להגדיר סגנונות ברירת מחדל לכל נקודה, מחרוזות קו ופוליגונים שיתווספו לשכבה. סגנונות ברירת מחדל מוחלים רק אם לתכונה לא הוגדר סגנון לאחת מהגיאומטריות שלה. שינויים שיבוצעו בסגנון ברירת המחדל יבואו לידי ביטוי גם בכל התכונות שמשתמשות בסגנון ברירת המחדל.

כדי להחיל סגנון ברירת מחדל יש לבצע את השלבים הבאים:

  1. אחזור של אובייקט סגנון ברירת המחדל הרלוונטי. אובייקט זה יכול להיות מסוג GeoJsonPointStyle, GeoJsonLineStringStyle או GeoJsonPolygonStyle.
  2. מחילים את האפשרויות הרצויות על הסגנון.

לדוגמה, דוגמת הקוד הבאה מראה איך לשנות את סגנון ברירת המחדל של הנקודות, כדי שניתן יהיה לגרור את הנקודות באמצעות כותרת וקטע טקסט.

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:

  1. יוצרים את אובייקט הסגנון הרלוונטי. אובייקט זה יכול להיות GeoJsonPointStyle, GeoJsonLineStringStyle או GeoJsonPolygonStyle.
  2. מחילים את האפשרויות הרצויות על הסגנון.
  3. מעבירים את אובייקט הסגנון לשיטה הרלוונטית ב-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 באפליקציית ההדגמה שכלולה בספריית כלי השירות. במדריך ההגדרה מוסבר איך להפעיל את אפליקציית ההדגמה.