الأداة المساعدة GeoJSON في "خرائط Google"

اختيار النظام الأساسي: 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-each كما هو موضح أدناه.

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" في التطبيق. يتم تضمينها مع مكتبة الخدمات. يوضح لك دليل الإعداد كيفية لتشغيل التطبيق التجريبي.