- مقدمة
- إضافة طبقة KML
- محو طبقة KML
- الوصول إلى حاويات KML
- الدخول إلى العلامات الموضعية لملفات KML وتراكبات الأرض لملفات KML
- الوصول إلى خصائص KML
- ميزات KML المتوافقة
مقدمة
KML
يُعد امتدادًا
XML
البيانات ويمثل البيانات الجغرافية على الخريطة. باستخدام هذه الأداة، يمكنك
تحويل كائنات KML إلى أشكال جغرافية وعرضها كطبقة على
أعلى الخريطة. لإضافة وإزالة بيانات KML من وإلى الخريطة، يمكنك إجراء مكالمة
addLayerToMap()
وremoveLayerFromMap()
على التوالي. للوصول إلى الخصائص في كائن KML، اتصل
getProperties()
على أي علامة موضعية أو GroundOverlay أو مستند أو
مجلد.
إضافة طبقة 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()
لمعرفة ما إذا كان متوفّرًا. يوضح هذا النموذج كيفية
استرداد قيمة الخاصية "الاسم" من أي حاوية، إذا كانت موجودة.
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> | لا | |
<Change> | جزئيًا | يُسمح فقط بتغييرات النمط |
<color> | جزئيًا | تتضمن AABBGGRR و#BBGGRR. غير متاحة في <screenOverlay> و<GroundOverlay> |
<colorMode> | نعم | |
<cookie> | لا | <NetworkLinkControl> غير متاح |
<coordinates> | نعم | |
<Create> | لا | |
<Data> | لا | |
<Delete> | لا | |
<description> | نعم | نص عادي فقط، ولا يتم دعم محتوى HTML |
<displayMode> | لا | |
<displayName> | لا | |
<Document> | نعم | |
<drawOrder> | نعم | |
<east> | نعم | |
<end> | لا ينطبق | <TimeSpan> غير متاح |
<expires> | لا | <NetworkLinkControl> غير متاح |
<ExtendedData> | جزئيًا | <البيانات> غير المكتوبة فقط، لا يتم استخدام <SimpleData> أو <Schema>، ولا يُسمح باستبدال الكيانات للنموذج$[dataName]. |
<extrude> | لا | |
<fill> | نعم | |
<flyToView> | لا | <NetworkLinkControl> غير متاح |
<Folder> | نعم | |
<gridOrigin> | لا ينطبق | <PhotoOverlay> غير متاح |
<GroundOverlay> | نعم | |
<heading> | نعم | |
<hotSpot> | نعم | |
<href> | نعم | |
<httpQuery> | لا | |
<Icon> | نعم | |
<IconStyle> | نعم | |
<ImagePyramid> | لا ينطبق | <PhotoOverlay> غير متاح |
<innerBoundaryIs> | نعم | ضمنيًا من <LinearRing> طلب |
<ItemIcon> | لا ينطبق | <ListStyle> غير متاح |
<key> | نعم | |
<kml> | نعم | |
<LabelStyle> | لا | |
<خط العرض> | نعم | |
<LatLonAltBox> | لا | |
<LatLonBox> | نعم | |
<leftFov> | لا ينطبق | <PhotoOverlay> غير متاح |
<LinearRing> | نعم | |
<LineString> | نعم | |
<LineStyle> | نعم | |
<الرابط> | لا | |
<linkDescription> | لا ينطبق | <NetworkLinkControl> غير متاح |
<linkName> | لا ينطبق | <NetworkLinkControl> غير متاح |
<linkSnippet> | لا ينطبق | <NetworkLinkControl> غير متاح |
<listItemType> | لا ينطبق | <ListStyle> غير متاح |
<ListStyle> | لا | |
<Location> | لا ينطبق | <Model> غير متاح |
<Lod> | نعم | |
<longitude> | نعم | |
<LookAt> | لا | |
<maxAltitude> | لا | |
<maxFadeExtent> | لا | |
<maxHeight> | لا ينطبق | <PhotoOverlay> غير متاح |
<maxLodPixels> | لا | |
<maxSessionLength> | لا | |
<maxWidth> | لا ينطبق | <PhotoOverlay> غير متاح |
<message> | لا | |
<minAltitude> | لا | |
<minFadeExtent> | لا | |
<minLodPixels> | لا | |
<minRefreshPeriod> | لا | <NetworkLink> |
<Model> | لا | |
<MultiGeometry> | نعم | |
<name> | نعم | |
<near> | لا ينطبق | <PhotoOverlay> غير متاح |
<NetworkLink> | لا | |
<NetworkLinkControl> | لا | |
<north> | نعم | |
<open> | نعم | مُخزَّنة كقيمة للموقع |
<الاتجاه> | لا ينطبق | <Model> غير متاح |
<outerBoundaryIs> | نعم | ضمنيًا من <LinearRing> طلب |
<outline> | نعم | |
<overlayXY> | لا | |
<Pair> | نعم | |
<phoneNumber> | جزئيًا | مُخزَّنة كقيمة للموقع |
<PhotoOverlay> | لا | |
<علامة موضعية> | نعم | |
<Point> | نعم | |
<Polygon> | نعم | |
<PolyStyle> | نعم | |
<range> | نعم | |
<refreshInterval> | لا | |
<refreshMode> | لا | |
<refreshVisibility> | لا | |
<Region> | نعم | |
<ResourceMap> | لا ينطبق | <Model> غير متاح |
<rightFov> | لا ينطبق | <PhotoOverlay> غير متاح |
<roll> | لا ينطبق | <Camera> و<Model> غير متاحة |
<rotation> | نعم | |
<rotationXY> | لا | |
<Scale> | لا ينطبق | <Model> غير متاح |
<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> | نعم |