- المقدمة
- إضافة طبقة KML
- محو طبقة KML
- الوصول إلى حاويات KML
- الوصول إلى علامات KML الموضعية وتراكبات الأرض في KML
- الوصول إلى خصائص KML
- الميزات المتوافقة مع KML
مقدمة
إنّ ملف KML
هو امتداد لتنسيق بيانات
XML
ويمثّل البيانات الجغرافية على الخريطة. وباستخدام هذه الأداة، يمكنك تحويل كائنات KML إلى أشكال جغرافية وعرضها كطبقة أعلى الخريطة. لإضافة بيانات KML وإزالتها من الخريطة، يمكنك طلب المساعدة
addLayerToMap()
وremoveLayerFromMap()
على التوالي. للوصول إلى الخصائص في كائن KML، يمكنك استدعاء getProperties()
على أي علامة موضعية أو تراكب أرضي أو مستند أو مجلد.
إضافة طبقة KML إلى الخريطة
لإضافة طبقة بيانات إلى الخريطة، أنشئ أولاً مثيلاً للفئة KmlLayer
. هناك طريقتان لإنشاء
KmlLayer
.
لاستيراد مجموعة بيانات KML وعرضها من مورد محلي، ستحتاج إلى ما يلي:
- عنصر
GoogleMap
حيث سيتم عرض الطبقة. - ملف مورد محلي يحتوي على بيانات KML.
- الكائن
Context
، وهو مطلوب لفتح ملف موارد محلي.
Kotlin
val layer = KmlLayer(map, R.raw.geojson_file, context)
Java
KmlLayer layer = new KmlLayer(map, R.raw.geojson_file, context);
لاستيراد مجموعة بيانات KML وعرضها من ساحة مشاركات محلية، ستحتاج إلى ما يلي:
- عنصر
GoogleMap
حيث سيتم عرض الطبقة. InputStream
يحتوي على بيانات KML.- العنصر
Context
، وهو مطلوب لفتح الموارد المحلية.
Kotlin
val inputStream: InputStream? = // InputStream containing KML data val layer = KmlLayer(map, inputStream, context)
Java
InputStream inputStream = // InputStream containing KML data KmlLayer layer = new KmlLayer(map, inputStream, context);
بعد إنشاء KmlLayer
، استدعِ addLayerToMap()()
لإضافة البيانات التي تم استيرادها على الخريطة.
Kotlin
layer.addLayerToMap()
Java
layer.addLayerToMap();
محو طبقة KML
لنفترض أنّك أنشأت KmlLayer
:
Kotlin
val inputStream: InputStream? = // InputStream containing KML data val layer = KmlLayer(map, inputStream, context)
Java
InputStream inputStream = // InputStream containing KML data KmlLayer layer = new KmlLayer(map, inputStream, context);
لإزالة الطبقة من الخريطة، يمكنك طلب الرقم removeLayerFromMap()
:
Kotlin
layer.removeLayerFromMap()
Java
layer.removeLayerFromMap();
الوصول إلى حاويات KML
للوصول إلى أي حاويات تمت إضافتها إلى الطبقة، يمكنك استدعاء getContainers()
على الطبقة التي أنشأتها.
للتحقّق ممّا إذا كانت أيّ حاوية تحتوي على حاويات مدمجة، يمكنك استدعاء السمة hasContainers()
. للوصول إلى هذه الحاويات المتداخلة، يمكنك استدعاء getContainers()
، على غرار
الإجراءات التي يمكنك اتّخاذها في الطبقة.
للوصول إلى الحاويات التي غير مدمجة في KmlLayer
أو KmlContainer:
Kotlin
for (containers in layer.containers) { // Do something to container }
Java
for (KmlContainer containers : layer.getContainers()) { // Do something to container }
للوصول إلى الحاويات المدمجة في KmlLayer
أو KmlContainer
:
Kotlin
fun accessContainers(containers: Iterable<KmlContainer>) { for (container in containers) { if (container.hasContainers()) { accessContainers(container.containers) } }
Java
public void accessContainers(Iterable<KmlContainer> containers) { for (KmlContainer container : containers) { if (container.hasContainers()) { accessContainers(container.getContainers()); } } }
الدخول إلى علامات KML الموضعية وتراكبات الأرض في KML
للوصول إلى أي علامة موضعية أو تراكب أرضي تمت
إضافته إلى الطبقة، يمكنك استدعاء السمة getPlacemarks()
أو
getGroundOverlays()
على طبقة أو حاوية. سيؤدي استدعاء أي منهما إلى عرض قيمة قابلة للتكرار في KmlPlacemarks
أو KmlGroundOverlays
على التوالي.
على سبيل المثال، للوصول إلى عناصر KmlPlacemark
من طبقة معيّنة:
Kotlin
for (placemark in layer.placemarks) { // Do something to Placemark }
Java
for (KmlPlacemark placemark : layer.getPlacemarks()) { // Do something to Placemark }
الوصول إلى خصائص KML
للوصول إلى أي خاصية في حاوية أو علامة موضعية، استدعِ العلامة getProperty()
وامنحها مفتاح خاصية. ويمكنك أيضًا الاتصال بالأرقام
hasProperty()
للتحقّق من توفّرها. يعرض هذا النموذج كيفية استرداد قيمة الخاصية "name" من حاوية، إن كانت موجودة.
Kotlin
for (container in layer.containers) { if (container.hasProperty("name")) { Log.i("KML", container.getProperty("name")) } }
Java
for (KmlContainer container : layer.getContainers()) { if (container.hasProperty("name")) { Log.i("KML", container.getProperty("name")); } }
أحداث النقر على هندسة KML
يمكنك استخدام KmlLayer.OnFeatureClickListener()
لرصد أحداث النقر على الميزات الهندسية على الخريطة. يسجِّل المثال التالي رقم تعريف الميزة عندما ينقر المستخدم عليها:
Kotlin
// Set a listener for geometry clicked events. layer.setOnFeatureClickListener { feature -> Log.i( "KML", "Feature clicked: " + feature.id ) }
Java
// Set a listener for geometry clicked events. layer.setOnFeatureClickListener(new KmlLayer.OnFeatureClickListener() { @Override public void onFeatureClick(Feature feature) { Log.i("KML", "Feature clicked: " + feature.getId()); } });
الاطّلاع على التطبيق التجريبي
للاطّلاع على مثال عن استيراد ملف KML وإنشاء طبقة
به، اطّلِع على KmlDemoActivity
في التطبيق التجريبي المتوفّر مع مكتبة الأدوات المساعدة. يوضِّح لك دليل الإعداد كيفية
تشغيل التطبيق التجريبي.
الميزات المتوافقة مع KML
عنصر KML | هل البيانات متاحة؟ | تعليق |
---|---|---|
<address> | جزئيًا | يتم تخزينها كقيمة للخاصية |
<AddressDetails> | لا | |
<Alias> | لا | |
<altitude> | لا | |
<altitudeMode> | لا | |
<atom:author> | لا | |
<atom:link> | لا | |
<atom:name> | لا | |
<BalloonStyle> | جزئيًا | لا يتوفر سوى <text> |
<begin> | لا ينطبق | <TimeSpan> غير متاح |
<bgColor> | لا | |
<bottomFov> | لا ينطبق | لا يمكن استخدام < PhotoOverlay> |
<Camera> | لا | |
<تغيير> | جزئيًا | لا يُسمح إلا بتغييرات الأنماط |
<color> | جزئيًا | تتضمن #AABBGGRR و #BBGGRR؛ وهي غير متاحة في <ScreenOverlay> و <GroundOverlay> |
<colorMode> | نعم | |
<cookie> | لا | <NetworkLinkControl> غير متاح |
<coordinates> | نعم | |
<إنشاء> | لا | |
<Data> | لا | |
<حذف> | لا | |
<description> | نعم | النص العادي فقط، ولا يُسمح باستخدام محتوى HTML |
<displayMode> | لا | |
<displayName> | لا | |
<Document> | نعم | |
<drawOrder> | نعم | |
<east> | نعم | |
<end> | لا ينطبق | <TimeSpan> غير متاح |
<expires> | لا | <NetworkLinkControl> غير متاح |
<ExtendedData> | جزئيًا | <Data> غير مكتوبة فقط، ولا تتوفر <SimpleData> أو <Schema>، واستبدال الكيان للنموذج$[dataName] غير متاحة. |
<extrude> | لا | |
<fill> | نعم | |
<flyToView> | لا | <NetworkLinkControl> غير متاح |
<مجلد> | نعم | |
<gridOrigin> | لا ينطبق | لا يمكن استخدام < PhotoOverlay> |
<GroundOverlay> | نعم | |
<heading> | نعم | |
<hotSpot> | نعم | |
<href> | نعم | |
<httpQuery> | لا | |
<Icon> | نعم | |
<IconStyle> | نعم | |
<ImagePyramid> | لا ينطبق | لا يمكن استخدام < PhotoOverlay> |
<innerBoundaryIs> | نعم | بشكل ضمني من ترتيب <LinearRing> |
<ItemIcon> | لا ينطبق | <ListStyle> غير متاح |
<key> | نعم | |
<kml> | نعم | |
<LabelStyle> | لا | |
<latitude> | نعم | |
<LatLonAltBox> | لا | |
<LatLonBox> | نعم | |
<leftFov> | لا ينطبق | لا يمكن استخدام < PhotoOverlay> |
<LinearRing> | نعم | |
<LineString> | نعم | |
<LineStyle> | نعم | |
<Link> | لا | |
<linkDescription> | لا ينطبق | <NetworkLinkControl> غير متاح |
<linkName> | لا ينطبق | <NetworkLinkControl> غير متاح |
<linkSnippet> | لا ينطبق | <NetworkLinkControl> غير متاح |
<listItemType> | لا ينطبق | <ListStyle> غير متاح |
<ListStyle> | لا | |
<الموقع الجغرافي> | لا ينطبق | <النموذج> غير متاح. |
<Lod> | نعم | |
<longitude> | نعم | |
<LookAt> | لا | |
<maxAltitude> | لا | |
<maxFadeExtent> | لا | |
<maxHeight> | لا ينطبق | لا يمكن استخدام < PhotoOverlay> |
<maxLodPixels> | لا | |
<maxSessionLength> | لا | |
<maxWidth> | لا ينطبق | لا يمكن استخدام < PhotoOverlay> |
<message> | لا | |
<minAltitude> | لا | |
<minFadeExtent> | لا | |
<minLodPixels> | لا | |
<minRefreshPeriod> | لا | <NetworkLink> |
<النموذج> | لا | |
<MultiGeometry> | نعم | |
<name> | نعم | |
<بالقرب> | لا ينطبق | لا يمكن استخدام < PhotoOverlay> |
<NetworkLink> | لا | |
<NetworkLinkControl> | لا | |
<north> | نعم | |
<open> | نعم | يتم تخزينها كقيمة للخاصية |
<Orientation> | لا ينطبق | <النموذج> غير متاح. |
<outerBoundaryIs> | نعم | بشكل ضمني من ترتيب <LinearRing> |
<outline> | نعم | |
<overlayXY> | لا | |
<Pair> | نعم | |
<phoneNumber> | جزئيًا | يتم تخزينها كقيمة للخاصية |
<PhotoOverlay> | لا | |
<Placemark> | نعم | |
<Point> | نعم | |
<Polygon> | نعم | |
<PolyStyle> | نعم | |
<range> | نعم | |
<refreshInterval> | لا | |
<refreshMode> | لا | |
<refreshVisibility> | لا | |
<Region> | نعم | |
<ResourceMap> | لا ينطبق | <النموذج> غير متاح. |
<rightFov> | لا ينطبق | لا يمكن استخدام < PhotoOverlay> |
<roll> | لا ينطبق | لا يمكن استخدام <الكاميرا> و <النموذج>. |
<rotation> | نعم | |
<rotationXY> | لا | |
<مقياس> | لا ينطبق | <النموذج> غير متاح. |
<scale> | نعم | |
<Schema> | لا | |
<SchemaData> | لا | |
<ScreenOverlay> | لا | |
<screenXY> | لا ينطبق | ميزة <ScreenOverlay> غير متاحة |
<shape> | لا ينطبق | لا يمكن استخدام < PhotoOverlay> |
<SimpleData> | لا ينطبق | لا يمكن استخدام <SchemaData>. |
<SimpleField> | لا ينطبق | لا يُسمح باستخدام <Schema>. |
<size> | نعم | |
<Snippet> | لا | |
<south> | نعم | |
<state> | لا ينطبق | <ListStyle> غير متاح |
<Style> | نعم | |
<StyleMap> | جزئيًا | لم يتم توفير النمط المميّز. خرائط الأنماط المضمّنة غير متاحة |
<styleUrl> | نعم | |
<targetHref> | لا | الاسم <Alias> غير متاح. |
<tessellate> | لا | |
<text> | نعم | |
<textColor> | لا | |
<tileSize> | لا ينطبق | لا يمكن استخدام < PhotoOverlay> |
<tilt> | لا | |
<TimeSpan> | لا | |
<TimeStamp> | لا | |
<topFov> | لا ينطبق | لا يمكن استخدام < PhotoOverlay> |
<تعديل> | لا ينطبق | <NetworkLinkControl< غير متاح |
<value> | نعم | |
<viewBoundScale> | لا | |
<viewFormat> | لا | |
<viewRefreshMode> | لا | |
<viewRefreshTime> | لا | |
<ViewVolume> | لا ينطبق | لا يمكن استخدام < PhotoOverlay> |
<visibility> | نعم | |
<west> | نعم | |
<when> | لا ينطبق | السمة <TimeStamp> غير متاحة |
<width> | نعم |