أداة استيراد 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، وهو مطلوب لفتح ملف موارد محلي.

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> نعم