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

Kotlin



for (feature in layer.features) {
    // Do something to the feature
}

      

Java


for (GeoJsonFeature feature : layer.getFeatures()) {
    // Do something to the feature
}

      

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