الأداة المساعدة 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 وخصائصها

للوصول إلى جميع ميزات GeoJsonFeature التي تمت إضافتها إلى الطبقة، يمكنك استدعاء دالة 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
}

      

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