Google Maps KML Importing Utility

انتخاب پلاتفرم: 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.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> بله