- مقدمه
- یک لایه KML اضافه کنید
- یک لایه KML را پاک کنید
- به کانتینرهای KML دسترسی داشته باشید
- به مکاننماهای KML و همپوشانیهای زمینی KML دسترسی داشته باشید
- دسترسی به خصوصیات KML
- ویژگی های پشتیبانی شده از KML
مقدمه
KML توسعه فرمت داده XML است و داده های جغرافیایی را بر روی نقشه نشان می دهد. با استفاده از این ابزار، می توانید اشیاء KML را به اشکال جغرافیایی تبدیل کرده و آنها را به صورت یک لایه در بالای نقشه رندر کنید. برای افزودن و حذف دادههای KML خود به نقشه، به addLayerToMap()
adLayerToMap و removeLayerFromMap()
کنید. برای دسترسی به خصوصیات در یک شی KML، getProperties getProperties()
را در هر Placemark، GroundOverlay، Document یا Folder فراخوانی کنید.
یک لایه KML به نقشه اضافه کنید
برای افزودن یک لایه داده به نقشه، ابتدا یک نمونه از کلاس KmlLayer
ایجاد کنید. دو راه برای نمونه سازی KmlLayer
دارد.
برای وارد کردن و ارائه یک مجموعه داده KML از یک منبع محلی، شما نیاز دارید:
- یک شی
GoogleMap
که در آن لایه قرار است رندر شود. - یک فایل منبع محلی حاوی داده های KML.
- یک شی
Context
، که برای باز کردن یک فایل منبع محلی مورد نیاز است.
جاوا
KmlLayer layer = new KmlLayer(map, R.raw.geojson_file, context);
کاتلین
val layer = KmlLayer(map, R.raw.geojson_file, context)
برای وارد کردن و ارائه یک مجموعه داده KML از یک جریان محلی، شما نیاز دارید:
- یک شی
GoogleMap
که در آن لایه قرار است رندر شود. - یک جریان
InputStream
حاوی داده های KML. - یک شی
Context
که برای باز کردن منابع محلی لازم است.
جاوا
InputStream inputStream = // InputStream containing KML data KmlLayer layer = new KmlLayer(map, inputStream, context);
کاتلین
val inputStream: InputStream? = // InputStream containing KML data val layer = KmlLayer(map, inputStream, context)
پس از ایجاد KmlLayer
، addLayerToMap()()
را فراخوانی کنید تا داده های وارد شده را به نقشه اضافه کنید.
جاوا
layer.addLayerToMap();
کاتلین
layer.addLayerToMap()
یک لایه KML را پاک کنید
بیایید فرض کنیم که شما این KmlLayer
را ایجاد کرده اید:
جاوا
InputStream inputStream = // InputStream containing KML data KmlLayer layer = new KmlLayer(map, inputStream, context);
کاتلین
val inputStream: InputStream? = // InputStream containing KML data val layer = KmlLayer(map, inputStream, context)
برای حذف لایه از نقشه، removeLayerFromMap()
را فراخوانی کنید:
جاوا
layer.removeLayerFromMap();
کاتلین
layer.removeLayerFromMap()
به کانتینرهای KML دسترسی داشته باشید
برای دسترسی به هر کانتینری که به لایه شما اضافه شده است، می توانید getContainers()
را در لایه ای که ایجاد کرده اید فراخوانی کنید. برای بررسی اینکه آیا هر کانتینری دارای کانتینرهای تو در تو است، می توانید hasContainers()
را فراخوانی کنید. برای دسترسی به این کانتینرهای تو در تو، مشابه آنچه که می توانید در لایه خود انجام دهید، می توانید getContainers()
را فراخوانی کنید.
برای دسترسی به کانتینرهایی که در KmlLayer
یا KmlContainer تودرتو نیستند KmlContainer:
جاوا
for (KmlContainer containers : layer.getContainers()) { // Do something to container }
کاتلین
for (containers in layer.containers) { // Do something to container }
برای دسترسی به کانتینرهایی که در یک KmlLayer
یا KmlContainer
:
جاوا
public void accessContainers(Iterable<KmlContainer> containers) { for (KmlContainer container : containers) { if (container.hasContainers()) { accessContainers(container.getContainers()); } } }
کاتلین
fun accessContainers(containers: Iterable<KmlContainer>) { for (container in containers) { if (container.hasContainers()) { accessContainers(container.containers) } }
به مکاننماهای KML و همپوشانیهای زمینی KML دسترسی داشته باشید
برای دسترسی به هر نشانک یا همپوشانی زمینی که به لایه اضافه شده است، می توانید getPlacemarks()
یا getGroundOverlays()
را روی یک لایه یا ظرف فراخوانی کنید. با تماس با هر یک به ترتیب KmlPlacemarks
یا KmlGroundOverlays
قابل تکراری برمی گردد.
به عنوان مثال، برای دسترسی به اشیاء KmlPlacemark
از یک لایه:
جاوا
for (KmlPlacemark placemark : layer.getPlacemarks()) { // Do something to Placemark }
کاتلین
for (placemark in layer.placemarks) { // Do something to Placemark }
دسترسی به خصوصیات KML
برای دسترسی به هر خاصیت در یک کانتینر یا نشانگر، getProperty()
را فراخوانی کنید و یک کلید ویژگی به آن بدهید. همچنین می توانید برای بررسی وجود hasProperty()
تماس بگیرید. این نمونه نحوه بازیابی مقدار ویژگی "name" را از یک ظرف، در صورت وجود نشان می دهد.
جاوا
for (KmlContainer container : layer.getContainers()) { if (container.hasProperty("name")) { Log.i("KML", container.getProperty("name")); } }
کاتلین
for (container in layer.containers) { if (container.hasProperty("name")) { Log.i("KML", container.getProperty("name")) } }
رویدادها کلیک کنید هندسه KML
میتوانید از KmlLayer.OnFeatureClickListener()
برای گوش دادن به رویدادهای کلیک روی ویژگیهای هندسه روی نقشه استفاده کنید. مثال زیر زمانی که کاربر روی ویژگی کلیک می کند، شناسه یک ویژگی را ثبت می کند:
جاوا
// 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()); } });
کاتلین
// Set a listener for geometry clicked events. layer.setOnFeatureClickListener { feature -> Log.i( "KML", "Feature clicked: " + feature.id ) }
برنامه دمو را ببینید
برای نمونه ای از وارد کردن یک فایل KML و ایجاد یک لایه با آن، به KmlDemoActivity
در برنامه آزمایشی که با کتابخانه ابزار ارسال می شود، نگاهی بیندازید. راهنمای راه اندازی به شما نشان می دهد که چگونه برنامه آزمایشی را اجرا کنید.
ویژگی های پشتیبانی شده از KML
عنصر KML | پشتیبانی؟ | اظهار نظر |
---|---|---|
<آدرس> | تا اندازه ای | به عنوان ارزش دارایی ذخیره می شود |
<AddressDetails> | نه | |
<نام مستعار> | نه | |
<ارتفاع> | نه | |
<altitudeMode> | نه | |
<atom:author> | نه | |
<atom:link> | نه | |
<atom:name> | نه | |
<BalloonStyle> | تا اندازه ای | فقط <text> پشتیبانی می شود |
<شروع> | N/A | <TimeSpan> پشتیبانی نمی شود |
<bgColor> | نه | |
<bottomFov> | N/A | <PhotoOverlay> پشتیبانی نمی شود |
<دوربین> | نه | |
<تغییر> | تا اندازه ای | فقط تغییرات سبک پشتیبانی می شود |
<رنگ> | تا اندازه ای | شامل #AABBGGRR و #BBGGRR. در <ScreenOverlay> و <GroundOverlay> پشتیبانی نمی شود |
<colorMode> | آره | |
<کوکی> | نه | <NetworkLinkControl> پشتیبانی نمی شود |
<مختصات> | آره | |
<ایجاد> | نه | |
<داده> | نه | |
<حذف> | نه | |
<توضیح> | آره | فقط متن ساده، هیچ محتوای HTML پشتیبانی نمی شود |
<displayMode> | نه | |
<displayName> | نه | |
<سند> | آره | |
<drawOrder> | آره | |
<شرق> | آره | |
<پایان> | N/A | <TimeSpan> پشتیبانی نمی شود |
<منقضی می شود> | نه | <NetworkLinkControl> پشتیبانی نمی شود |
<ExtendedData> | تا اندازه ای | فقط <Data> تایپ نشده، <SimpleData> یا <Schema> وجود ندارد و جایگزینهای موجودیت فرم$[dataName] پشتیبانی نمیشوند. |
<اکسترود کردن> | نه | |
<پر کردن> | آره | |
<flyToView> | نه | <NetworkLinkControl> پشتیبانی نمی شود |
<پوشه> | آره | |
<gridOrigin> | N/A | <PhotoOverlay> پشتیبانی نمی شود |
<GroundOverlay> | آره | |
<عنوان> | آره | |
<hotSpot> | آره | |
<href> | آره | |
<httpQuery> | نه | |
<آیکون> | آره | |
<IconStyle> | آره | |
<ImagePyramid> | N/A | <PhotoOverlay> پشتیبانی نمی شود |
<innerBoundaryIs> | آره | بطور ضمنی از دستور <LinearRing> |
<ItemIcon> | N/A | <ListStyle> پشتیبانی نمی شود |
<کلید> | آره | |
<kml> | آره | |
<LabelStyle> | نه | |
< عرض جغرافیایی > | آره | |
<LatLonAltBox> | نه | |
<LatLonBox> | آره | |
<leftFov> | N/A | <PhotoOverlay> پشتیبانی نمی شود |
<LinearRing> | آره | |
<LineString> | آره | |
<LineStyle> | آره | |
<پیوند> | نه | |
<linkDescription> | N/A | <NetworkLinkControl> پشتیبانی نمی شود |
<linkName> | N/A | <NetworkLinkControl> پشتیبانی نمی شود |
<linkSnippet> | N/A | <NetworkLinkControl> پشتیبانی نمی شود |
<listItemType> | N/A | <ListStyle> پشتیبانی نمی شود |
<ListStyle> | نه | |
<مکان> | N/A | <Model> پشتیبانی نمی شود |
<لود> | آره | |
<طول جغرافیایی> | آره | |
<LookAt> | نه | |
<maxAltitude> | نه | |
<maxFadeExtent> | نه | |
<maxHeight> | N/A | <PhotoOverlay> پشتیبانی نمی شود |
<maxLodPixels> | نه | |
<maxSessionLength> | نه | |
<maxWidth> | N/A | <PhotoOverlay> پشتیبانی نمی شود |
<پیام> | نه | |
<minAltitude> | نه | |
<minFadeExtent> | نه | |
<minLodPixels> | نه | |
<minRefreshPeriod> | نه | <پیوند شبکه> |
<مدل> | نه | |
<MultiGeometry> | آره | |
<نام> | آره | |
<نزدیک> | N/A | <PhotoOverlay> پشتیبانی نمی شود |
<پیوند شبکه> | نه | |
<NetworkLinkControl> | نه | |
<شمال> | آره | |
<باز کردن> | آره | به عنوان ارزش دارایی ذخیره می شود |
<جهتیابی> | N/A | <Model> پشتیبانی نمی شود |
<outerBoundaryIs> | آره | بطور ضمنی از دستور <LinearRing> |
<طرح کلی> | آره | |
<overlayXY> | نه | |
<جفت> | آره | |
<شماره تلفن> | تا اندازه ای | به عنوان ارزش دارایی ذخیره می شود |
<PhotoOverlay> | نه | |
<علامت مکان> | آره | |
<نقطه> | آره | |
<چند ضلعی> | آره | |
<PolyStyle> | آره | |
<محدوده> | آره | |
<refreshInterval> | نه | |
<refreshMode> | نه | |
<RefreshVisibility> | نه | |
<منطقه> | آره | |
<ResourceMap> | N/A | <Model> پشتیبانی نمی شود |
<rightFov> | N/A | <PhotoOverlay> پشتیبانی نمی شود |
<رول> | N/A | <Camera> و <Model> پشتیبانی نمی شوند |
<چرخش> | آره | |
<rotationXY> | نه | |
<مقیاس> | N/A | <Model> پشتیبانی نمی شود |
<مقیاس> | آره | |
<طرحواره> | نه | |
<SchemaData> | نه | |
<ScreenOverlay> | نه | |
<screenXY> | N/A | <ScreenOverlay> پشتیبانی نمی شود |
<شکل> | N/A | <PhotoOverlay> پشتیبانی نمی شود |
<SimpleData> | N/A | <SchemaData> پشتیبانی نمی شوند |
<SimpleField> | N/A | <Schema> پشتیبانی نمی شوند |
<اندازه> | آره | |
<قطعه> | نه | |
<جنوب> | آره | |
<وضعیت> | N/A | <ListStyle> پشتیبانی نمی شود |
<سبک> | آره | |
<StyleMap> | تا اندازه ای | سبک برجسته ارائه نشده است. StyleMaps درون خطی پشتیبانی نمی شود |
<styleUrl> | آره | |
<targetHref> | نه | <Alias> پشتیبانی نمی شود |
<tessellate> | نه | |
<متن> | آره | |
<textColor> | نه | |
<tileSize> | N/A | <PhotoOverlay> پشتیبانی نمی شود |
<تبلیغ> | نه | |
<TimeSpan> | نه | |
<TimeStamp> | نه | |
<topFov> | N/A | <PhotoOverlay> پشتیبانی نمی شود |
<به روز رسانی> | N/A | <NetworkLinkControl< پشتیبانی نمی شود |
<ارزش> | آره | |
<viewBoundScale> | نه | |
<viewFormat> | نه | |
<viewRefreshMode> | نه | |
<viewRefreshTime> | نه | |
<ViewVolume> | N/A | <PhotoOverlay> پشتیبانی نمی شود |
<رؤیت> | آره | |
<غرب> | آره | |
<وقتی> | N/A | <TimeStamp> پشتیبانی نمی شود |
<عرض> | آره |