כלי השירות 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 באפליקציית ההדגמה שכלולה בספריית כלי השירות. במדריך ההגדרה מוסבר איך להפעיל את אפליקציית ההדגמה.