- مقدمه
- افزودن لایه KML
- پاک کردن لایه KML
- دسترسی به محتویات KML
- دسترسی به مکاننشانهای KML و پوششهای زمینی KML
- دسترسی به مشخصههای KML
- ویژگیهای پشتیبانیشده KML
مقدمه
KML
افزونهای از قالب داده
XML
است و دادههای جغرافیایی را روی نقشه نشان میدهد. بااستفاده از این ابزار، میتوانید
اشیا KML را به شکلهای جغرافیایی تبدیل کنید و آنها را بهعنوان لایهای در
بالای نقشه پرداز کنید. برای افزودن و برداشتن دادههای KML از نقشه، بهترتیب
addLayerToMap() و removeLayerFromMap()
را فراخوانی کنید. برای دسترسی به داراییهای یک شیء KML،
getProperties() را در هر «مکاننشان»، «پوشش زمین»، «سند»، یا
«پوشه» فراخوانی کنید.
افزودن لایه KML به نقشه
برای افزودن لایه داده به نقشه، ابتدا نمونهای از کلاس
KmlLayer ایجاد کنید. دو روش برای نمونهسازی
KmlLayer وجود دارد.
برای وارد کردن و رندر کردن مجموعه داده KML از منبع محلی، به موارد زیر نیاز دارید:
- شیء
GoogleMapکه لایه در آن پرداز میشود. - فایل منبع محلی حاوی دادههای KML.
- یک شیء
Contextکه برای باز کردن فایل منبع محلی لازم است.
Kotlin
val layer = KmlLayer(map, R.raw.kml_file, context)
جاوا
KmlLayer layer = new KmlLayer(map, R.raw.kml_file, context);
برای وارد کردن و پرداز کردن مجموعه داده KML از جاریسازی محلی، به موارد زیر نیاز دارید:
- شیء
GoogleMapکه لایه باید در آن رندر شود. - یک
InputStreamحاوی دادههای KML. - شیء
Contextکه برای باز کردن منابع محلی لازم است.
Kotlin
val inputStream: InputStream = context.resources.openRawResource(R.raw.kml_file) val layer = KmlLayer(map, inputStream, context)
جاوا
InputStream inputStream = context.getResources().openRawResource(R.raw.kml_file); KmlLayer layer = new KmlLayer(map, inputStream, context);
پساز ایجاد KmlLayer،
addLayerToMap()() را فراخوانی کنید تا دادههای واردشده به نقشه اضافه شود.
Kotlin
layer.addLayerToMap()
جاوا
layer.addLayerToMap();
پاک کردن لایه KML
فرض کنیم که این KmlLayer را ایجاد کردهاید:
Kotlin
val inputStream: InputStream = context.resources.openRawResource(R.raw.kml_file) val layer = KmlLayer(map, inputStream, context)
جاوا
InputStream inputStream = context.getResources().openRawResource(R.raw.kml_file); KmlLayer layer = new KmlLayer(map, inputStream, context);
برای برداشتن لایه از نقشه، removeLayerFromMap() را فراخوانی کنید:
Kotlin
layer.removeLayerFromMap()
جاوا
kmlLayer.removeLayerFromMap();
دسترسی به کانتینرهای KML
برای دسترسی به هر محفظهای که به لایهتان اضافه شده است،
میتوانید getContainers() را در لایهای که ایجاد کردهاید فراخوانی کنید.
برای بررسی اینکه آیا محفظهای دارای محفظههای تودرتو است یا نه، میتوانید
hasContainers() را فراخوانی کنید. برای دسترسی به این محتویهای تودرتو، مشابه
آنچه در لایهتان میتوانید انجام دهید، میتوانید
getContainers() را فراخوانی کنید
برای دسترسی به محفظههایی که در KmlLayer
یا KmlContainer: تودرتو نیستند
Kotlin
for (container in layer.getContainers()) { // Do something to container }
جاوا
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.getContainers()) } }
جاوا
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.getPlacemarks()) { // Do something to Placemark }
جاوا
for (KmlPlacemark placemark : layer.getPlacemarks()) { // Do something to Placemark }
دسترسی به خصوصیات KML
برای دسترسی به هر ویژگی در ظرف یا مکاننشان،
getProperty() را فراخوانی کنید و کلید ویژگی را به آن بدهید. همچنین میتوانید با
hasProperty() تماس بگیرید تا ببینید وجود دارد یا نه. این نمونه نشان میدهد چگونه
مقدار دارایی «نام» را از یک محتوی، درصورت وجود، بازیابی کنید.
Kotlin
for (container in layer.getContainers()) { if (container.hasProperty("name")) { Log.i("KML", container.getProperty("name") ?: "") } }
جاوا
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.getId()}") }
جاوا
// 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> | no | |
| <Alias> | no | |
| <altitude> | no | |
| <altitudeMode> | no | |
| <atom:author> | no | |
| <atom:link> | no | |
| <atom:name> | no | |
| <BalloonStyle> | تاحدی | فقط <text> پشتیبانی میشود |
| <begin> | موجود نیست | <TimeSpan> پشتیبانی نمیشود |
| <bgColor> | no | |
| <bottomFov> | موجود نیست | از <PhotoOverlay> پشتیبانی نمیشود |
| <Camera> | no | |
| <تغییر> | تاحدودی | فقط تغییرات سبک پشتیبانی میشود |
| <color> | تاحدودی | شامل #AABBGGRR و #BBGGRR؛ در <ScreenOverlay> و <GroundOverlay> پشتیبانی نمیشود |
| <colorMode> | بله | |
| <cookie> | no | <NetworkLinkControl> پشتیبانی نمیشود |
| <coordinates> | بله | |
| <Create> | no | |
| <Data> | no | |
| <Delete> | no | |
| <description> | بله | فقط از نوشتار ساده پشتیبانی میشود، از محتوای HTML پشتیبانی نمیشود |
| <displayMode> | no | |
| <displayName> | no | |
| <Document> | بله | |
| <drawOrder> | بله | |
| <east> | بله | |
| <end> | موجود نیست | از <TimeSpan> پشتیبانی نمیشود |
| <expires> | no | <NetworkLinkControl> پشتیبانی نمیشود |
| <ExtendedData> | تاحدودی | فقط <Data> بدون نوع، بدون <SimpleData> یا <Schema>، و جایگزینیهای نهاد از نوع$[dataName] پشتیبانی نمیشود. |
| <extrude> | no | |
| <fill> | بله | |
| <flyToView> | no | <NetworkLinkControl> پشتیبانی نمیشود |
| <Folder> | بله | |
| <gridOrigin> | موجود نیست | از <PhotoOverlay> پشتیبانی نمیشود |
| <GroundOverlay> | بله | |
| <heading> | بله | |
| <hotSpot> | بله | |
| <href> | بله | |
| <httpQuery> | no | |
| <Icon> | بله | |
| <IconStyle> | بله | |
| <ImagePyramid> | موجود نیست | از <PhotoOverlay> پشتیبانی نمیشود |
| <innerBoundaryIs> | بله | بهطور ضمنی از ترتیب <LinearRing> |
| <ItemIcon> | موجود نیست | <ListStyle> پشتیبانی نمیشود |
| <key> | بله | |
| <kml> | بله | |
| <LabelStyle> | no | |
| <latitude> | بله | |
| <LatLonAltBox> | no | |
| <LatLonBox> | بله | |
| <leftFov> | موجود نیست | <PhotoOverlay> پشتیبانی نمیشود |
| <LinearRing> | بله | |
| <LineString> | بله | |
| <LineStyle> | بله | |
| <Link> | no | |
| <linkDescription> | موجود نیست | <NetworkLinkControl> پشتیبانی نمیشود |
| <linkName> | موجود نیست | <NetworkLinkControl> پشتیبانی نمیشود |
| <linkSnippet> | موجود نیست | <NetworkLinkControl> پشتیبانی نمیشود |
| <listItemType> | موجود نیست | <ListStyle> پشتیبانی نمیشود |
| <ListStyle> | no | |
| <Location> | موجود نیست | از <Model> پشتیبانی نمیشود |
| <Lod> | بله | |
| <longitude> | بله | |
| <LookAt> | no | |
| <maxAltitude> | no | |
| <maxFadeExtent> | no | |
| <maxHeight> | موجود نیست | از <PhotoOverlay> پشتیبانی نمیشود |
| <maxLodPixels> | no | |
| <maxSessionLength> | no | |
| <maxWidth> | موجود نیست | از <PhotoOverlay> پشتیبانی نمیشود |
| <پیام> | no | |
| <minAltitude> | no | |
| <minFadeExtent> | no | |
| <minLodPixels> | no | |
| <minRefreshPeriod> | no | <NetworkLink> |
| <Model> | no | |
| <MultiGeometry> | بله | |
| <name> | بله | |
| <near> | موجود نیست | از <PhotoOverlay> پشتیبانی نمیشود |
| <NetworkLink> | no | |
| <NetworkLinkControl> | no | |
| <north> | بله | |
| <open> | بله | بهعنوان مقدار دارایی ذخیره شد |
| <Orientation> | موجود نیست | از <Model> پشتیبانی نمیشود |
| <outerBoundaryIs> | بله | بهطور ضمنی از ترتیب <LinearRing> |
| <outline> | بله | |
| <overlayXY> | no | |
| <Pair> | بله | |
| <phoneNumber> | تاحدی | بهعنوان مقدار خصوصیت ذخیره شده است |
| <PhotoOverlay> | no | |
| <Placemark> | بله | |
| <Point> | بله | |
| <Polygon> | بله | |
| <PolyStyle> | بله | |
| <range> | بله | |
| <refreshInterval> | no | |
| <refreshMode> | no | |
| <refreshVisibility> | no | |
| <Region> | بله | |
| <ResourceMap> | موجود نیست | از <Model> پشتیبانی نمیشود |
| <rightFov> | موجود نیست | از <PhotoOverlay> پشتیبانی نمیشود |
| <roll> | موجود نیست | <Camera> و <Model> پشتیبانی نمیشوند |
| <rotation> | بله | |
| <rotationXY> | no | |
| <Scale> | موجود نیست | از <Model> پشتیبانی نمیشود |
| <مقیاس> | بله | |
| <Schema> | no | |
| <SchemaData> | no | |
| <ScreenOverlay> | no | |
| <screenXY> | موجود نیست | <ScreenOverlay> پشتیبانی نمیشود |
| <شکل> | موجود نیست | از <PhotoOverlay> پشتیبانی نمیشود |
| <SimpleData> | موجود نیست | <SchemaData> پشتیبانی نمیشود |
| <SimpleField> | موجود نیست | <Schema> پشتیبانی نمیشود |
| <size> | بله | |
| <Snippet> | no | |
| <جنوب> | بله | |
| <state> | موجود نیست | <ListStyle> پشتیبانی نمیشود |
| <Style> | بله | |
| <StyleMap> | تاحدودی | سبک برجسته ارائه نشده است. StyleMaps بهخط پشتیبانی نمیشود |
| <styleUrl> | بله | |
| <targetHref> | no | از <Alias> پشتیبانی نمیشود |
| <tessellate> | no | |
| <نوشتار> | بله | |
| <textColor> | no | |
| <tileSize> | موجود نیست | از <PhotoOverlay> پشتیبانی نمیشود |
| <tilt> | no | |
| <TimeSpan> | no | |
| <TimeStamp> | no | |
| <topFov> | موجود نیست | از <PhotoOverlay> پشتیبانی نمیشود |
| <Update> | موجود نیست | <NetworkLinkControl< پشتیبانی نمیشود |
| <value> | بله | |
| <viewBoundScale> | no | |
| <viewFormat> | no | |
| <viewRefreshMode> | no | |
| <viewRefreshTime> | no | |
| <ViewVolume> | موجود نیست | از <PhotoOverlay> پشتیبانی نمیشود |
| <visibility> | بله | |
| <west> | بله | |
| <when> | موجود نیست | <TimeStamp> پشتیبانی نمیشود |
| <width> | بله |