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