الأداة المساعدة 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 المطلوب إضافتها إلى طبقة
KotlinJava
val geoJsonData: JSONObject? = // JSONObject containing the GeoJSON data
val layer = GeoJsonLayer(map, geoJsonData)

      
JSONObject geoJsonData = // JSONObject containing the GeoJSON data
GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);

      

للاستيراد من ملف GeoJSON محلي، ستحتاج إلى ما يلي:

  • كائن GoogleMap في المكان الذي سيتم عرض الطبقة فيه
  • ملف موارد محلي يحتوي على بيانات GeoJSON
  • كائن Context، مطلوب لفتح مورد محلي الملف
KotlinJava
val layer = GeoJsonLayer(map, R.raw.geojson_file, context)

      
GeoJsonLayer layer = new GeoJsonLayer(map, R.raw.geojson_file, context);

      

بعد إنشاء GeoJsonLayer، يمكنك إجراء مكالمة addLayerToMap() لإضافة البيانات التي تم استيرادها إلى الخريطة:

KotlinJava
layer.addLayerToMap()

      
layer.addLayerToMap();

      

إزالة GeoJsonLayer

لنفترض أنك أضفت هذه الطبقة

KotlinJava
val geoJsonData: JSONObject? = // JSONObject containing the GeoJSON data
val layer = GeoJsonLayer(map, geoJsonData)

      
JSONObject geoJsonData = // JSONObject containing the GeoJSON data
GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);

      

لمحو GeoJsonLayer، اتصل بالرقم removeLayerFromMap().

KotlinJava
layer.removeLayerFromMap()

      
layer.removeLayerFromMap();

      

إضافة GeoJsonFeature وإزالتها

تحتوي إحدى الميزات في GeoJSON على النوع "feature". تحتوي على شكل هندسي الخاص بها، واختياريًا يحتوي على مربع إحاطة أو معرف.

يمكنك إنشاء GeoJsonFeature عناصر بشكلٍ فردي وإضافتها إلى GeoJsonLayer.

لنفترض أنك أنشأت موضعًا يشتمل على نقطة عند 0 أو 0 إدخال واحد في خصائصه بدون مربع إحاطة.

KotlinJava
val point = GeoJsonPoint(LatLng(0.0, 0.0))
val properties = hashMapOf("Ocean" to "South Atlantic")
val pointFeature = GeoJsonFeature(point, "Origin", properties, null)

      
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() وإدخال العنصر. الميزة المراد إضافتها.

KotlinJava
layer.addFeature(pointFeature)

      
layer.addFeature(pointFeature);

      

لإزالة ميزة بعد إضافتها إلى الطبقة، قم باستدعاء removeFeature() وتمرير الميزة لإزالته.

KotlinJava
layer.removeFeature(pointFeature)

      
layer.removeFeature(pointFeature);

      

الوصول إلى GeoJsonFeatures وخصائصها

للوصول إلى جميع GeoJsonFeatures التي تمت إضافتها إلى الطبقة، يمكنك الاتصال بـ " getFeatures()" على جهاز GeoJsonLayer الذي أنشأوها. سيؤدي ذلك إلى عرض تكرار للدالة GeoJsonFeatures. الذي يمكنك الوصول إليه باستخدام تكرار حلقي for-each كما هو موضح أدناه.

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

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

      

استخدام الطريقتَين hasProperty() وgetProperty() في مع طريقة getFeatures() للتحقق مما إذا تم تخزين كل عنصر والميزة لها خاصية معينة ويمكن الوصول إليها إذا كانت موجودة.

KotlinJava
if (feature.hasProperty("Ocean")) {
    val oceanProperty = feature.getProperty("Ocean")
}

      
if (feature.hasProperty("Ocean")) {
    String oceanProperty = feature.getProperty("Ocean");
}

      

أحداث النقر على GeoJSON

يمكنك استخدام GeoJsonLayer.OnFeatureClickListener() للاستماع إلى أحداث النقر على السمات الهندسية على الخريطة. يسجل المثال التالي عنوان ميزة عندما يكون المستخدم ينقر على العنصر:

KotlinJava
// Set a listener for geometry clicked events.
layer.setOnFeatureClickListener { feature ->
    Log.i("GeoJsonClick", "Feature clicked: ${feature.getProperty("title")}")
}

      
// 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. طبِّق الخيارات التي تريدها على النمط.

على سبيل المثال، يعرض نموذج الرمز التالي كيفية تعديل النقطة التلقائية. والذي سيجعل النقاط قابلة للسحب باستخدام عنوان ومقتطف.

KotlinJava
val pointStyle = layer.defaultPointStyle
pointStyle.isDraggable = true
pointStyle.title = "Hello, World!"
pointStyle.snippet = "I am a draggable marker"

      
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 بحيث يكون لونها أحمر.

KotlinJava
// 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

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