أدوات الموقع الجغرافي من Android في "خرائط 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 لإضافتها إلى الطبقة

Java


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

      

Kotlin


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

      

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

  • عنصر GoogleMap حيث يتم عرض الطبقة
  • ملف مورد محلي يحتوي على بيانات GeoJSON
  • عنصر Context مطلوب لفتح ملف موارد محلية

Java


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

      

Kotlin


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

      

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

Java


layer.addLayerToMap();

      

Kotlin


layer.addLayerToMap()

      

إزالة GeoJsonLayer

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

Java


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

      

Kotlin


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

      

لمحو GeoJsonLayer، يمكنك طلب removeLayerFromMap()

Java


layer.removeLayerFromMap();

      

Kotlin


layer.removeLayerFromMap()

      

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

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

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

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

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);

      

Kotlin


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

      

لإضافة الميزة إلى الطبقة، اتّصِل بـ addFeature() ومرِّر الميزة لإضافتها.

Java


layer.addFeature(pointFeature);

      

Kotlin


layer.addFeature(pointFeature)

      

لإزالة ميزة بعد إضافتها إلى الطبقة، اتّصِل بالرقم removeFeature() وأدخِل الميزة المطلوب إزالتها.

Java


layer.removeFeature(pointFeature);

      

Kotlin


layer.removeFeature(pointFeature)

      

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

للوصول إلى كل GeoJsonFeatures التي تمت إضافتها إلى الطبقة، يمكنك استدعاء getFeatures() على GeoJsonLayer التي أنشأتها. سيؤدي ذلك إلى عرض نسخة طبق الأصل من GeoJsonFeatures يمكنك الوصول إليها باستخدام حلقة لكل مشارك كما هو موضّح أدناه.

Java


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

      

Kotlin


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

      

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

Java


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

      

Kotlin


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

      

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

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

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"));
    }
});

      

Kotlin


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

      

غيِّر تصميم GeoJsonLayer وGeoJsonFeatures.

يمكنك ضبط أنماط تلقائية لطبقة الموقع الجغرافي GeoJsonLayer، أو تصميم أنماط فردية في الطبقة.

التصميمات التلقائية

في GeoJsonLayer، يمكنك ضبط الأنماط التلقائية لأي نقاط وأسطر الخطوط والمضلعات التي تتم إضافتها إلى الطبقة. لا يتم تطبيق الأنماط التلقائية إلا إذا لم يتم ضبط نمط للشكل لأي من هندستها. وستنعكس أي تغييرات تجريها على النمط التلقائي في جميع الميزات التي تستخدم النمط التلقائي.

في ما يلي خطوات تطبيق نمط تلقائي:

  1. يمكنك استرداد كائن النمط التلقائي ذي الصلة، ويمكن أن يكون واحدًا من GeoJsonPointStyle أو GeoJsonLineStringStyle أو GeoJsonPolygonStyle.
  2. طبِّق الخيارات المطلوبة على النمط.

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

Java


GeoJsonPointStyle pointStyle = layer.getDefaultPointStyle();
pointStyle.setDraggable(true);
pointStyle.setTitle("Hello, World!");
pointStyle.setSnippet("I am a draggable marker");

      

Kotlin


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

      

الأنماط الخاصة بميزة GeoJsonFeature

يمكنك بدلاً من ذلك تصميم ميزات فردية في الطبقة. خطوات تطبيق نمط على GeoJsonFeature كما يلي

  1. أنشِئ كائن النمط ذي الصلة، ويمكن أن يكون إما GeoJsonPointStyle أو GeoJsonLineStringStyle أو GeoJsonPolygonStyle.
  2. طبِّق الخيارات المطلوبة على النمط.
  3. اضبط كائن النمط على الطريقة المناسبة على GeoJsonFeature التي ستكون setPointStyle() أو setLineStringStyle() أو setPolygonStyle().

على سبيل المثال، في ما يلي طريقة تخصيص نمط السلسلة لـ GeoJsonFeature بحيث يكون لونه أحمر.

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);

      

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

      

عرض التطبيق التجريبي

للحصول على مثال على استيراد ملف GeoJSON من عنوان URL وإنشاء طبقة به، يمكنك الاطّلاع على GeoJsonDemoActivity في التطبيق التجريبي الذي يتم شحنه مع مكتبة الأدوات. يوضّح لك دليل الإعداد كيفية تشغيل التطبيق التجريبي.