כלי לייבוא 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> חלקית מאוחסן כערך נכס
<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> כן
<יצירה> no
<Data> no
<מחיקה> no
<description> כן טקסט פשוט בלבד, אין תמיכה בתוכן HTML
<displayMode> no
<displayName> no
<Document> כן
<drawOrder> כן
<east> כן
<end> לא רלוונטי אין תמיכה ב-<TimeSpan>
<expires> no אין תמיכה ב-<NetworkLinkControl>
<ExtendedData> חלקית ללא תמיכה בטיפוס <Data> בלבד, אין תמיכה ב-<SimpleData> או ב-<Schema> החלופי, ויש גם תחליפי ישות של form$[dataName] ללא תמיכה.
<extrude> no
<fill> כן
<flyToView> no אין תמיכה ב-<NetworkLinkControl>
<תיקייה> כן
<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
<מיקום> לא רלוונטי אין תמיכה ב-<Model>
<Lod> כן
<longitude> כן
<LookAt> no
<maxAltitude> no
<maxFadeExtent> no
<maxHeight> לא רלוונטי אין תמיכה ב-<PhotoOverlay>
<maxLodPixels> no
<maxSessionLength> no
<maxWidth> לא רלוונטי אין תמיכה ב-<PhotoOverlay>
<message> no
<minAltitude> no
<minFadeExtent> no
<minLodPixels> no
<minRefreshPeriod> no <NetworkLink>
<דגם> no
<MultiGeometry> כן
<name> כן
<ליד> לא רלוונטי אין תמיכה ב-<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> לא רלוונטי אין תמיכה ב<מצלמה> וב <דגם>
<rotation> כן
<rotationXY> no
<קנה מידה> לא רלוונטי אין תמיכה ב-<Model>
<scale> כן
<Schema> no
<SchemaData> no
<ScreenOverlay> no
<screenXY> לא רלוונטי אין תמיכה ב-<ScreenOverlay>
<shape> לא רלוונטי אין תמיכה ב-<PhotoOverlay>
<SimpleData> לא רלוונטי אין תמיכה ב-<SchemaData>
<SimpleField> לא רלוונטי המאפיינים <Schema> אינם נתמכים
<size> כן
<Snippet> no
<south> כן
<state> לא רלוונטי <ListStyle> אינו נתמך
<Style> כן
<StyleMap> חלקית הסגנון המודגש לא סופק. אין תמיכה ב-StyleMaps בתוך השורה
<styleUrl> כן
<targetHref> no אין תמיכה ב-<Alias>
<tessellate> no
<text> כן
<textColor> no
<tileSize> לא רלוונטי אין תמיכה ב-<PhotoOverlay>
<tilt> no
<TimeSpan> no
<TimeStamp> no
<topFov> לא רלוונטי אין תמיכה ב-<PhotoOverlay>
<עדכון> לא רלוונטי אין תמיכה ב-<NetworkLinkControl<
<value> כן
<viewBoundScale> no
<viewFormat> no
<viewRefreshMode> no
<viewRefreshTime> no
<ViewVolume> לא רלוונטי אין תמיכה ב-<PhotoOverlay>
<visibility> כן
<west> כן
<when> לא רלוונטי אין תמיכה ב-<TimeStamp>
<width> כן