أداة استيراد 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() على أي علامة موضعية أو 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> جزئيًا مُخزَّنة كقيمة للموقع
&lt;AddressDetails&gt; لا
&lt;Alias&gt; لا
&lt;altitude&gt; لا
&lt;altitudeMode&gt; لا
&lt;atom:author&gt; لا
&lt;atom:link&gt; لا
&lt;atom:name&gt; لا
&lt;BalloonStyle&gt; جزئيًا فقط <text> متاح
&lt;begin&gt; لا ينطبق &lt;TimeSpan&gt; غير متاح
&lt;bgColor&gt; لا
&lt;bottomFov&gt; لا ينطبق &lt;PhotoOverlay&gt; غير متاح
&lt;Camera&gt; لا
&lt;Change&gt; جزئيًا يُسمح فقط بتغييرات النمط
&lt;color&gt; جزئيًا تتضمن AABBGGRR و#BBGGRR. غير متاحة في <screenOverlay> و<GroundOverlay>
&lt;colorMode&gt; نعم
&lt;cookie&gt; لا &lt;NetworkLinkControl&gt; غير متاح
&lt;coordinates&gt; نعم
&lt;Create&gt; لا
&lt;Data&gt; لا
&lt;Delete&gt; لا
&lt;description&gt; نعم نص عادي فقط، ولا يتم دعم محتوى HTML
&lt;displayMode&gt; لا
&lt;displayName&gt; لا
&lt;Document&gt; نعم
&lt;drawOrder&gt; نعم
&lt;east&gt; نعم
&lt;end&gt; لا ينطبق &lt;TimeSpan&gt; غير متاح
&lt;expires&gt; لا &lt;NetworkLinkControl&gt; غير متاح
&lt;ExtendedData&gt; جزئيًا <البيانات> غير المكتوبة فقط، لا يتم استخدام <SimpleData> أو <Schema>، ولا يُسمح باستبدال الكيانات للنموذج$[dataName].
&lt;extrude&gt; لا
&lt;fill&gt; نعم
&lt;flyToView&gt; لا &lt;NetworkLinkControl&gt; غير متاح
&lt;Folder&gt; نعم
&lt;gridOrigin&gt; لا ينطبق &lt;PhotoOverlay&gt; غير متاح
&lt;GroundOverlay&gt; نعم
&lt;heading&gt; نعم
&lt;hotSpot&gt; نعم
&lt;href&gt; نعم
&lt;httpQuery&gt; لا
&lt;Icon&gt; نعم
&lt;IconStyle&gt; نعم
&lt;ImagePyramid&gt; لا ينطبق &lt;PhotoOverlay&gt; غير متاح
&lt;innerBoundaryIs&gt; نعم ضمنيًا من <LinearRing> طلب
&lt;ItemIcon&gt; لا ينطبق &lt;ListStyle&gt; غير متاح
&lt;key&gt; نعم
&lt;kml&gt; نعم
&lt;LabelStyle&gt; لا
<خط العرض> نعم
&lt;LatLonAltBox&gt; لا
&lt;LatLonBox&gt; نعم
&lt;leftFov&gt; لا ينطبق &lt;PhotoOverlay&gt; غير متاح
&lt;LinearRing&gt; نعم
&lt;LineString&gt; نعم
&lt;LineStyle&gt; نعم
<الرابط> لا
&lt;linkDescription&gt; لا ينطبق &lt;NetworkLinkControl&gt; غير متاح
&lt;linkName&gt; لا ينطبق &lt;NetworkLinkControl&gt; غير متاح
&lt;linkSnippet&gt; لا ينطبق &lt;NetworkLinkControl&gt; غير متاح
&lt;listItemType&gt; لا ينطبق &lt;ListStyle&gt; غير متاح
&lt;ListStyle&gt; لا
&lt;Location&gt; لا ينطبق &lt;Model&gt; غير متاح
&lt;Lod&gt; نعم
<longitude> نعم
&lt;LookAt&gt; لا
&lt;maxAltitude&gt; لا
&lt;maxFadeExtent&gt; لا
&lt;maxHeight&gt; لا ينطبق &lt;PhotoOverlay&gt; غير متاح
&lt;maxLodPixels&gt; لا
&lt;maxSessionLength&gt; لا
&lt;maxWidth&gt; لا ينطبق &lt;PhotoOverlay&gt; غير متاح
<message> لا
&lt;minAltitude&gt; لا
&lt;minFadeExtent&gt; لا
&lt;minLodPixels&gt; لا
&lt;minRefreshPeriod&gt; لا &lt;NetworkLink&gt;
&lt;Model&gt; لا
&lt;MultiGeometry&gt; نعم
&lt;name&gt; نعم
&lt;near&gt; لا ينطبق &lt;PhotoOverlay&gt; غير متاح
&lt;NetworkLink&gt; لا
&lt;NetworkLinkControl&gt; لا
&lt;north&gt; نعم
&lt;open&gt; نعم مُخزَّنة كقيمة للموقع
<الاتجاه> لا ينطبق &lt;Model&gt; غير متاح
&lt;outerBoundaryIs&gt; نعم ضمنيًا من <LinearRing> طلب
&lt;outline&gt; نعم
&lt;overlayXY&gt; لا
&lt;Pair&gt; نعم
&lt;phoneNumber&gt; جزئيًا مُخزَّنة كقيمة للموقع
&lt;PhotoOverlay&gt; لا
<علامة موضعية> نعم
&lt;Point&gt; نعم
&lt;Polygon&gt; نعم
&lt;PolyStyle&gt; نعم
&lt;range&gt; نعم
&lt;refreshInterval&gt; لا
&lt;refreshMode&gt; لا
&lt;refreshVisibility&gt; لا
&lt;Region&gt; نعم
&lt;ResourceMap&gt; لا ينطبق &lt;Model&gt; غير متاح
&lt;rightFov&gt; لا ينطبق &lt;PhotoOverlay&gt; غير متاح
&lt;roll&gt; لا ينطبق &lt;Camera&gt; و<Model> غير متاحة
&lt;rotation&gt; نعم
&lt;rotationXY&gt; لا
&lt;Scale&gt; لا ينطبق &lt;Model&gt; غير متاح
&lt;scale&gt; نعم
&lt;Schema&gt; لا
&lt;SchemaData&gt; لا
&lt;ScreenOverlay&gt; لا
&lt;screenXY&gt; لا ينطبق &lt;ScreenOverlay&gt; غير متاح
&lt;shape&gt; لا ينطبق &lt;PhotoOverlay&gt; غير متاح
&lt;SimpleData&gt; لا ينطبق &lt;SchemaData&gt; غير متاحة
&lt;SimpleField&gt; لا ينطبق &lt;Schema&gt; غير متاحة
&lt;size&gt; نعم
&lt;Snippet&gt; لا
&lt;south&gt; نعم
&lt;state&gt; لا ينطبق &lt;ListStyle&gt; غير متاح
&lt;Style&gt; نعم
&lt;StyleMap&gt; جزئيًا لم يتم توفير النمط المميز. خرائط الأنماط المضمّنة غير متاحة
&lt;styleUrl&gt; نعم
&lt;targetHref&gt; لا &lt;Alias&gt; غير متاح
&lt;tessellate&gt; لا
&lt;text&gt; نعم
&lt;textColor&gt; لا
&lt;tileSize&gt; لا ينطبق &lt;PhotoOverlay&gt; غير متاح
&lt;tilt&gt; لا
&lt;TimeSpan&gt; لا
&lt;TimeStamp&gt; لا
&lt;topFov&gt; لا ينطبق &lt;PhotoOverlay&gt; غير متاح
<تحديث> لا ينطبق &lt;NetworkLinkControl&lt; غير متاح
&lt;value&gt; نعم
&lt;viewBoundScale&gt; لا
&lt;viewFormat&gt; لا
&lt;viewRefreshMode&gt; لا
&lt;viewRefreshTime&gt; لا
&lt;ViewVolume&gt; لا ينطبق &lt;PhotoOverlay&gt; غير متاح
&lt;visibility&gt; نعم
&lt;west&gt; نعم
&lt;when&gt; لا ينطبق &lt;TimeStamp&gt; غير متاح
&lt;width&gt; نعم