- مقدمة
- إضافة طبقة KML
- محو طبقة KML
- الوصول إلى حاويات KML
- الوصول إلى العلامات الموضعية في KML وتراكبات صور KML
- الوصول إلى مواقع KML
- الميزات المتوافقة مع KML
مقدمة
تشكّل KML
امتدادًا لتنسيق بيانات
XML
وتمثّل البيانات الجغرافية على الخريطة. وباستخدام هذه الأداة، يمكنك تحويل كائنات KML إلى أشكال جغرافية وعرضها كطبقة على الخريطة. لإضافة بيانات KML إلى الخريطة وإزالتها منها، يمكنك طلب
addLayerToMap()
وremoveLayerFromMap()
على التوالي. للوصول إلى المواقع في عنصر KML، يمكنك استدعاء getProperties()
على أي علامة موضعية أو علامة أرضية أو مستند أو مجلد.
إضافة طبقة KML إلى الخريطة
لإضافة طبقة بيانات إلى الخريطة، عليك أولاً إنشاء مثيل للفئة
KmlLayer
. هناك طريقتان لإنشاء مثيل KmlLayer
.
لاستيراد مجموعة بيانات KML من مورد محلي وعرضها.
- عنصر
GoogleMap
حيث يتم عرض الطبقة. - ملف مورد محلي يحتوي على بيانات KML.
- عنصر
Context
مطلوب لفتح ملف موارد محلية.
Java
KmlLayer layer = new KmlLayer(map, R.raw.geojson_file, context);
Kotlin
val layer = KmlLayer(map, R.raw.geojson_file, context)
لاستيراد وعرض مجموعة بيانات KML من بث محلي، يجب أن يكون لديك ما يلي:
- عنصر
GoogleMap
حيث يتم عرض الطبقة. InputStream
يحتوي على بيانات KML.- عنصر
Context
مطلوب لفتح الموارد المحلية.
Java
InputStream inputStream = // InputStream containing KML data KmlLayer layer = new KmlLayer(map, inputStream, context);
Kotlin
val inputStream: InputStream? = // InputStream containing KML data val layer = KmlLayer(map, inputStream, context)
بعد إنشاء KmlLayer
، يمكنك استدعاء
addLayerToMap()()
لإضافة البيانات التي تم استيرادها إلى الخريطة.
Java
layer.addLayerToMap();
Kotlin
layer.addLayerToMap()
محو طبقة KML
لنفترض أنّك أنشأت ملف KmlLayer
هذا:
Java
InputStream inputStream = // InputStream containing KML data KmlLayer layer = new KmlLayer(map, inputStream, context);
Kotlin
val inputStream: InputStream? = // InputStream containing KML data val layer = KmlLayer(map, inputStream, context)
لإزالة الطبقة من الخريطة، اتصل بـ removeLayerFromMap()
:
Java
layer.removeLayerFromMap();
Kotlin
layer.removeLayerFromMap()
الوصول إلى حاويات KML
للوصول إلى أي حاويات تمت إضافتها إلى طبقتك،
يمكنك استدعاء getContainers()
على الطبقة التي أنشأتها.
للتحقّق مما إذا كانت أي حاوية تتضمّن حاويات متداخلة، يمكنك طلب
hasContainers()
. للوصول إلى هذه الحاويات المتداخلة،
تمامًا مثل ما يمكنك فعله في الطبقة، يمكنك استدعاء
getContainers()
للوصول إلى الحاويات غير المُدمَجة في KmlLayer
أو KmlContainer:
Java
for (KmlContainer containers : layer.getContainers()) { // Do something to container }
Kotlin
for (containers in layer.containers) { // Do something to container }
للوصول إلى الحاويات المدمجة في KmlLayer
أو KmlContainer
:
Java
public void accessContainers(Iterable<KmlContainer> containers) { for (KmlContainer container : containers) { if (container.hasContainers()) { accessContainers(container.getContainers()); } } }
Kotlin
fun accessContainers(containers: Iterable<KmlContainer>) { for (container in containers) { if (container.hasContainers()) { accessContainers(container.containers) } }
الوصول إلى علامات موضعية في KML وتراكبات على سطح KML
للوصول إلى أي علامة موضعية أو تراكب أرض تمت إضافته
إلى الطبقة، يمكنك استدعاء getPlacemarks()
أو
getGroundOverlays()
على طبقة أو حاوية. سيؤدي الاتصال إما إلى عرض تكرار في KmlPlacemarks
أو KmlGroundOverlays
على التوالي.
على سبيل المثال، للوصول إلى عناصر KmlPlacemark
من طبقة:
Java
for (KmlPlacemark placemark : layer.getPlacemarks()) { // Do something to Placemark }
Kotlin
for (placemark in layer.placemarks) { // Do something to Placemark }
الدخول إلى مواقع KML
للوصول إلى أي موقع في الحاوية أو العلامة الموضعية، اطلب
getProperty()
وامنحه مفتاح الموقع. ويمكنك أيضًا الاتصال
برقم hasProperty()
للتأكد من توفّر العنصر. يعرض هذا النموذج كيفية
استرداد قيمة الخاصية "name;quot; من الحاوية، في حال وجودها.
Java
for (KmlContainer container : layer.getContainers()) { if (container.hasProperty("name")) { Log.i("KML", container.getProperty("name")); } }
Kotlin
for (container in layer.containers) { if (container.hasProperty("name")) { Log.i("KML", container.getProperty("name")) } }
أحداث النقر الهندسي في KML
يمكنك استخدام KmlLayer.OnFeatureClickListener()
للاستماع إلى فعاليات النقر على الميزات الهندسية على الخريطة. يسجّل المثال التالي رقم تعريف ميزة عندما ينقر المستخدم على الميزة:
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()); } });
Kotlin
// Set a listener for geometry clicked events. layer.setOnFeatureClickListener { feature -> Log.i( "KML", "Feature clicked: " + feature.id ) }
عرض التطبيق التجريبي
للحصول على مثال لاستيراد ملف KML وإنشاء طبقة به، يمكنك الاطّلاع على KmlDemoActivity
في التطبيق التجريبي الذي يتم شحنه مع مكتبة الأدوات. يوضّح لك دليل الإعداد كيفية
تشغيل التطبيق التجريبي.
الميزات المتوافقة مع KML
عنصر KML | متوافق؟ | تعليق |
---|---|---|
<address> | بشكل جزئي | يتم تخزينها كقيمة للموقع |
<AddressDetails> | لا | |
<Alias> | لا | |
<height> | لا | |
<heightMode> | لا | |
<atom:author> | لا | |
<atom:link> | لا | |
<atom:name> | لا | |
<BalloonStyle> | بشكل جزئي | لا يمكن استخدام سوى <text> |
<begin> | لا ينطبق | <TimeSpan> غير متاح |
<bgColor> | لا | |
< السفليFov> | لا ينطبق | <PHOTOتراكب> غير متوافق |
<الكاميرا> | لا | |
<Change> | بشكل جزئي | يتم تطبيق تغييرات النمط فقط |
<color> | بشكل جزئي | تتضمن #AABBGGRR و #BBGGRR، وهي غير متاحة في <Screenتراكب> و <Groundتراكب> |
<colorMode> | نعم | |
<cookie> | لا | <NetworkLinkControl> غير متاحة |
<إحداثيات> | نعم | |
<Create> | لا | |
<Data> | لا | |
<Delete> | لا | |
<description> | نعم | نص عادي فقط، ولا يتم دعم محتوى HTML |
<displayMode> | لا | |
<displayName> | لا | |
<Documents> | نعم | |
<DrawOrder> | نعم | |
<east> | نعم | |
<end> | لا ينطبق | <TimeSpan> غير متاح |
<expires> | لا | <NetworkLinkControl> غير متاحة |
<ExtendedData> | بشكل جزئي | غير من نوع <Data> فقط; أو لا <SimpleData> أو <Schema> واستبدال عناصر نموذج$[dataName]. |
<extrude> | لا | |
<fill> | نعم | |
<flyToView> | لا | <NetworkLinkControl> غير متاحة |
<Folder> | نعم | |
<gridOrigin> | لا ينطبق | <PHOTOتراكب> غير متوافق |
<Groundتراكب> | نعم | |
<head> | نعم | |
<hotSpot> | نعم | |
<href> | نعم | |
<httpQuery> | لا | |
<رمز> | نعم | |
<IconStyle> | نعم | |
<ImagePyramid> | لا ينطبق | <PHOTOتراكب> غير متوافق |
<innerBoundaryIs> | نعم | ضمنيًا من <LineRing> ترتيب |
<ItemIcon> | لا ينطبق | <ListStyle> غير متاح |
<key> | نعم | |
<KML> | نعم | |
<LabelStyle> | لا | |
<width> | نعم | |
<LatLonAltBox> | لا | |
<LatLonBox> | نعم | |
<leftFov> | لا ينطبق | <PHOTOتراكب> غير متوافق |
<LineRing> | نعم | |
<LineString> | نعم | |
<LineStyle> | نعم | |
<Link> | لا | |
<linkDescription> | لا ينطبق | <NetworkLinkControl> غير متاحة |
<linkName> | لا ينطبق | <NetworkLinkControl> غير متاحة |
<linksnippet> | لا ينطبق | <NetworkLinkControl> غير متاحة |
<listItemType> | لا ينطبق | <ListStyle> غير متاح |
<ListStyle> | لا | |
<Location> | لا ينطبق | <Model> غير متوافق |
<Lod> | نعم | |
<length> | نعم | |
<LookAt> | لا | |
<maxAltitude> | لا | |
<maxFadeExtent> | لا | |
<maxHeight> | لا ينطبق | <PHOTOتراكب> غير متوافق |
<maxLodPixels> | لا | |
<maxSessionLength> | لا | |
<maxWidth> | لا ينطبق | <PHOTOتراكب> غير متوافق |
<message> | لا | |
<minAltitude> | لا | |
<minFadeExtent> | لا | |
<minLodPixels> | لا | |
<minUpdatePeriod> | لا | <NetworkLink> |
<Model> | لا | |
<MultiGeometry> | نعم | |
<name> | نعم | |
<بالقرب> | لا ينطبق | <PHOTOتراكب> غير متوافق |
<NetworkLink> | لا | |
<NetworkLinkControl> | لا | |
<north> | نعم | |
<open> | نعم | يتم تخزينها كقيمة للموقع |
<Orientation> | لا ينطبق | <Model> غير متوافق |
<outerBoundaryIs> | نعم | ضمنيًا من <LineRing> ترتيب |
<outline> | نعم | |
<تراكبXY> | لا | |
<إقران> | نعم | |
<phoneNumber> | بشكل جزئي | يتم تخزينها كقيمة للموقع |
<PHOTOتراكب> | لا | |
< الموضعية> | نعم | |
<Point> | نعم | |
<Polygon> | نعم | |
<PolyStyle> | نعم | |
<range> | نعم | |
<updateInterval> | لا | |
<updateMode> | لا | |
<إعادة تحميل خط العرض> | لا | |
<منطقة> | نعم | |
<ResourceMap> | لا ينطبق | <Model> غير متوافق |
<rightFov> | لا ينطبق | <PHOTOتراكب> غير متوافق |
<roll> | لا ينطبق | <Camera> و <Model> غير متاحة |
< Rotation> | نعم | |
<rotationXY> | لا | |
<Scale> | لا ينطبق | <Model> غير متوافق |
<Scale> | نعم | |
<Schema> | لا | |
<SchemaData> | لا | |
<Screenتراكب> | لا | |
<screenXY> | لا ينطبق | <Screenتراكب> غير متاح |
<shape> | لا ينطبق | <PHOTOتراكب> غير متوافق |
<SimpleData> | لا ينطبق | <SchemaData> غير متاحة |
<SimpleField> | لا ينطبق | <Schema> غير متاحة |
<size> | نعم | |
<snippet> | لا | |
<south> | نعم | |
<state> | لا ينطبق | <ListStyle> غير متاح |
<Style> | نعم | |
<StyleMaps> | بشكل جزئي | لم يتم توفير النمط المميّز. لا يتم توفير نمط التصميم المضمَّن. |
<styleUrl> | نعم | |
<targetHref> | لا | <Alias> غير متوفر |
<tessellate> | لا | |
<text> | نعم | |
<textColor> | لا | |
<tileSize> | لا ينطبق | <PHOTOتراكب> غير متوافق |
<tilt> | لا | |
<TimeSpan> | لا | |
<TimeStamp> | لا | |
<topFov> | لا ينطبق | <PHOTOتراكب> غير متوافق |
<Update> | لا ينطبق | <NetworkLinkControl< غير متاحة |
<value> | نعم | |
<viewBoundScale> | لا | |
<viewFormat> | لا | |
<viewUpdateMode> | لا | |
<viewUpdateTime> | لا | |
<ViewVolume> | لا ينطبق | <PHOTOتراكب> غير متوافق |
<visible> | نعم | |
<west> | نعم | |
<when> | لا ينطبق | <TimeStamp> غير متاح |
<width> | نعم |