أدوات الموقع الجغرافي من Android في "خرائط Google"

اختيار نظام أساسي: Android iOS JavaScript
  1. المقدمة
  2. إضافة GeoJsonLayer إلى خريطتك
  3. إزالة GeoJsonLayer
  4. إضافة ميزة GeoJsonFeature وإزالتها
  5. الوصول إلى ميزات GeoJson وخصائصها
  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()

      

إضافة ميزة GeoJson أو إزالتها

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