- المقدمة
- إضافة GeoJsonLayer إلى خريطتك
- إزالة GeoJsonLayer
- إضافة GeoJsonFeature وإزالتها
- الوصول إلى ميزات GeoJsonFeatures وخصائصها
- استخدام تصميم GeoJsonLayer وGeoJsonFeatures
- الاطّلاع على التطبيق التجريبي
مقدمة
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، يمكنك ضبط أنماط تلقائية لأي نقاط وسلاسل خطوط ومضلعات تتم إضافتها إلى الطبقة. يتم تطبيق الأنماط التلقائية فقط إذا لم يتم ضبط نمط للميزة لأي شكل من أشكالها الهندسية. أي تغييرات تجريها على النمط التلقائي ستنعكس أيضًا على جميع الميزات التي تستخدم النمط التلقائي.
في ما يلي خطوات تطبيق نمط افتراضي
- استرجع كائن النمط التلقائي ذي الصلة، يمكن أن يكون إما
GeoJsonPointStyle
أوGeoJsonLineStringStyle
أوGeoJsonPolygonStyle
. - طبِّق الخيارات المطلوبة على النمط.
على سبيل المثال، يوضّح نموذج الرمز البرمجي التالي طريقة تعديل نمط النقاط التلقائي الذي سيجعل النقاط قابلة للسحب باستخدام عنوان ومقتطف.
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
.
- أنشئ كائن النمط ذي الصلة، ويمكن أن يكون إما
GeoJsonPointStyle
أوGeoJsonLineStringStyle
أوGeoJsonPolygonStyle
. - طبِّق الخيارات المطلوبة على النمط.
- مرِّر كائن النمط إلى الطريقة ذات الصلة في
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
في التطبيق التجريبي المتوفر مع مكتبة الأدوات المساعدة. يوضِّح لك دليل الإعداد كيفية
تشغيل التطبيق التجريبي.