ابزار وارد کردن KML Maps 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() را در هر Placemark، GroundOverlay، Document یا Folder فراخوانی کنید.

یک لایه KML به نقشه اضافه کنید

برای افزودن یک لایه داده به نقشه، ابتدا یک نمونه از کلاس KmlLayer ایجاد کنید. دو راه برای نمونه سازی KmlLayer وجود دارد.

برای وارد کردن و ارائه یک مجموعه داده KML از یک منبع محلی، شما نیاز دارید:

  • یک شی GoogleMap که در آن لایه قرار است رندر شود.
  • یک فایل منبع محلی حاوی داده های KML.
  • یک شی Context ، که برای باز کردن یک فایل منبع محلی مورد نیاز است.

کاتلین

val layer = KmlLayer(map, R.raw.geojson_file, context)

      

جاوا

KmlLayer layer = new KmlLayer(map, R.raw.geojson_file, context);

      

برای وارد کردن و ارائه یک مجموعه داده KML از یک جریان محلی، شما نیاز دارید:

  • یک شی GoogleMap که در آن لایه قرار است رندر شود.
  • یک InputStream حاوی داده های KML.
  • یک شی Context که برای باز کردن منابع محلی لازم است.

کاتلین

val inputStream: InputStream? =  // InputStream containing KML data
val layer = KmlLayer(map, inputStream, context)

      

جاوا

InputStream inputStream = // InputStream containing KML data
KmlLayer layer = new KmlLayer(map, inputStream, context);

      

پس از ایجاد KmlLayer ، addLayerToMap()() را فراخوانی کنید تا داده های وارد شده را به نقشه اضافه کنید.

کاتلین

layer.addLayerToMap()

      

جاوا

layer.addLayerToMap();

      

یک لایه KML را پاک کنید

بیایید فرض کنیم که شما این KmlLayer را ایجاد کرده اید:

کاتلین

val inputStream: InputStream? =  // InputStream containing KML data
val layer = KmlLayer(map, inputStream, context)

      

جاوا

InputStream inputStream = // InputStream containing KML data
KmlLayer layer = new KmlLayer(map, inputStream, context);

      

برای حذف لایه از نقشه، removeLayerFromMap() را فراخوانی کنید:

کاتلین

layer.removeLayerFromMap()

      

جاوا

layer.removeLayerFromMap();

      

به کانتینرهای KML دسترسی داشته باشید

برای دسترسی به هر کانتینری که به لایه شما اضافه شده است، می توانید getContainers() در لایه ای که ایجاد کرده اید فراخوانی کنید. برای بررسی اینکه آیا هر کانتینری دارای کانتینرهای تو در تو است، می توانید hasContainers() را فراخوانی کنید. برای دسترسی به این کانتینرهای تو در تو، مشابه آنچه که می توانید در لایه خود انجام دهید، می توانید getContainers() را فراخوانی کنید.

برای دسترسی به کانتینرهایی که در KmlLayer یا KmlContainer: تودرتو نیستند :

کاتلین

for (containers in layer.containers) {
    // Do something to container
}

      

جاوا

for (KmlContainer containers : layer.getContainers()) {
    // Do something to container
}

      

برای دسترسی به کانتینرهایی که در یک KmlLayer یا KmlContainer تودرتو هستند :

کاتلین

fun accessContainers(containers: Iterable<KmlContainer>) {
    for (container in containers) {
        if (container.hasContainers()) {
            accessContainers(container.containers)
        }
    }

      

جاوا

public void accessContainers(Iterable<KmlContainer> containers) {
    for (KmlContainer container : containers) {
        if (container.hasContainers()) {
            accessContainers(container.getContainers());
        }
    }
}

      

به مکان‌نماهای KML و همپوشانی‌های زمینی KML دسترسی داشته باشید

برای دسترسی به هر نشانک یا همپوشانی زمینی که به لایه اضافه شده است، می توانید getPlacemarks() یا getGroundOverlays() را روی یک لایه یا ظرف فراخوانی کنید. با تماس با هر یک به ترتیب KmlPlacemarks یا KmlGroundOverlays قابل تکراری برمی گردد.

به عنوان مثال، برای دسترسی به اشیاء KmlPlacemark از یک لایه:

کاتلین

for (placemark in layer.placemarks) {
    // Do something to Placemark
}

      

جاوا

for (KmlPlacemark placemark : layer.getPlacemarks()) {
    // Do something to Placemark
}

      

دسترسی به خصوصیات KML

برای دسترسی به هر خاصیت در یک کانتینر یا نشانگر، getProperty() را فراخوانی کنید و یک کلید ویژگی به آن بدهید. همچنین می توانید برای بررسی وجود hasProperty() تماس بگیرید. این نمونه نحوه بازیابی مقدار ویژگی "name" را از یک ظرف، در صورت وجود نشان می دهد.

کاتلین

for (container in layer.containers) {
    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() برای گوش دادن به رویدادهای کلیک روی ویژگی‌های هندسه روی نقشه استفاده کنید. مثال زیر زمانی که کاربر روی ویژگی کلیک می کند، شناسه یک ویژگی را ثبت می کند:

کاتلین

// Set a listener for geometry clicked events.
layer.setOnFeatureClickListener { feature ->
    Log.i(
        "KML",
        "Feature clicked: " + feature.id
    )
}

      

جاوا

// 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 پشتیبانی می شود؟ نظر دهید
<آدرس> تا حدی به عنوان ارزش دارایی ذخیره می شود
<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> پشتیبانی نمی شود
<عرض> بله