أداة استيراد KML في خرائط Google

اختَر النظام الأساسي: Android iOS JavaScript
  1. مقدمة
  2. إضافة طبقة KML
  3. محو طبقة KML
  4. الوصول إلى حاويات KML
  5. الوصول إلى العلامات الموضعية في KML وتراكبات صور KML
  6. الوصول إلى مواقع KML
  7. الميزات المتوافقة مع 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> نعم