כלי לייבוא 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() בכל סמן, שכבת-על של קרקע, מסמך או תיקייה.

הוספת שכבת 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() כדי לבדוק אם הוא קיים. הדוגמה הזו מראה איך לאחזר את ערך המאפיין 'name' ממאגר תגים, אם קיים.

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 יש תמיכה? תגובה
&lt;address&gt; באופן חלקי מאוחסן כערך נכס
&lt;AddressDetails&gt; לא
&lt;Alias&gt; לא
&lt;altitude&gt; לא
&lt;altitudeMode&gt; לא
&lt;atom:author&gt; לא
&lt;atom:link&gt; לא
&lt;atom:name&gt; לא
&lt;BalloonStyle&gt; באופן חלקי רק <טקסט> נתמך
&lt;begin&gt; לא רלוונטי &lt;TimeSpan&gt; לא נתמך
&lt;bgColor&gt; לא
&lt;bottomFov&gt; לא רלוונטי &lt;PhotoOverlay&gt; לא נתמך
&lt;Camera&gt; לא
&lt;Change&gt; באופן חלקי יש תמיכה רק בשינויי סגנון
&lt;color&gt; באופן חלקי כולל #AABBGGRR ו- #BBGGRR; לא נתמכת בשכבות <ScreenOverlay> ו-<GroundOverlay>
&lt;colorMode&gt; כן
&lt;cookie&gt; לא &lt;NetworkLinkControl&gt; לא נתמך
&lt;coordinates&gt; כן
&lt;Create&gt; לא
&lt;Data&gt; לא
&lt;Delete&gt; לא
&lt;description&gt; כן טקסט פשוט בלבד, אין תמיכה בתוכן HTML
&lt;displayMode&gt; לא
&lt;displayName&gt; לא
&lt;Document&gt; כן
&lt;drawOrder&gt; כן
&lt;east&gt; כן
&lt;end&gt; לא רלוונטי &lt;TimeSpan&gt; לא נתמך
&lt;expires&gt; לא &lt;NetworkLinkControl&gt; לא נתמך
&lt;ExtendedData&gt; באופן חלקי untyped <Data> בלבד, לא <SimpleData> או <Schema>, וחלופי ישויות של הטופס$[dataName].
&lt;extrude&gt; לא
&lt;fill&gt; כן
&lt;flyToView&gt; לא &lt;NetworkLinkControl&gt; לא נתמך
&lt;Folder&gt; כן
&lt;gridOrigin&gt; לא רלוונטי &lt;PhotoOverlay&gt; לא נתמך
&lt;GroundOverlay&gt; כן
&lt;heading&gt; כן
&lt;hotSpot&gt; כן
&lt;href&gt; כן
&lt;httpQuery&gt; לא
&lt;Icon&gt; כן
&lt;IconStyle&gt; כן
&lt;ImagePyramid&gt; לא רלוונטי &lt;PhotoOverlay&gt; לא נתמך
&lt;innerBoundaryIs&gt; כן באופן מרומז מ-<LinearRing> הזמנה
&lt;ItemIcon&gt; לא רלוונטי &lt;ListStyle&gt; לא נתמך
&lt;key&gt; כן
&lt;kml&gt; כן
&lt;LabelStyle&gt; לא
<latitude> כן
&lt;LatLonAltBox&gt; לא
&lt;LatLonBox&gt; כן
&lt;leftFov&gt; לא רלוונטי &lt;PhotoOverlay&gt; לא נתמך
&lt;LinearRing&gt; כן
&lt;LineString&gt; כן
&lt;LineStyle&gt; כן
<קישור> לא
&lt;linkDescription&gt; לא רלוונטי &lt;NetworkLinkControl&gt; לא נתמך
&lt;linkName&gt; לא רלוונטי &lt;NetworkLinkControl&gt; לא נתמך
&lt;linkSnippet&gt; לא רלוונטי &lt;NetworkLinkControl&gt; לא נתמך
&lt;listItemType&gt; לא רלוונטי &lt;ListStyle&gt; לא נתמך
&lt;ListStyle&gt; לא
&lt;Location&gt; לא רלוונטי &lt;Model&gt; לא נתמך
&lt;Lod&gt; כן
<longitude> כן
&lt;LookAt&gt; לא
&lt;maxAltitude&gt; לא
&lt;maxFadeExtent&gt; לא
&lt;maxHeight&gt; לא רלוונטי &lt;PhotoOverlay&gt; לא נתמך
&lt;maxLodPixels&gt; לא
&lt;maxSessionLength&gt; לא
&lt;maxWidth&gt; לא רלוונטי &lt;PhotoOverlay&gt; לא נתמך
<message> לא
&lt;minAltitude&gt; לא
&lt;minFadeExtent&gt; לא
&lt;minLodPixels&gt; לא
&lt;minRefreshPeriod&gt; לא &lt;NetworkLink&gt;
&lt;Model&gt; לא
&lt;MultiGeometry&gt; כן
&lt;name&gt; כן
&lt;near&gt; לא רלוונטי &lt;PhotoOverlay&gt; לא נתמך
&lt;NetworkLink&gt; לא
&lt;NetworkLinkControl&gt; לא
&lt;north&gt; כן
&lt;open&gt; כן מאוחסן כערך נכס
<כיוון> לא רלוונטי &lt;Model&gt; לא נתמך
&lt;outerBoundaryIs&gt; כן באופן מרומז מ-<LinearRing> הזמנה
&lt;outline&gt; כן
&lt;overlayXY&gt; לא
&lt;Pair&gt; כן
&lt;phoneNumber&gt; באופן חלקי מאוחסן כערך נכס
&lt;PhotoOverlay&gt; לא
<סמן> כן
&lt;Point&gt; כן
&lt;Polygon&gt; כן
&lt;PolyStyle&gt; כן
&lt;range&gt; כן
&lt;refreshInterval&gt; לא
&lt;refreshMode&gt; לא
&lt;refreshVisibility&gt; לא
&lt;Region&gt; כן
&lt;ResourceMap&gt; לא רלוונטי &lt;Model&gt; לא נתמך
&lt;rightFov&gt; לא רלוונטי &lt;PhotoOverlay&gt; לא נתמך
&lt;roll&gt; לא רלוונטי &lt;Camera&gt; ו-<Model> הן לא נתמכות
&lt;rotation&gt; כן
&lt;rotationXY&gt; לא
&lt;Scale&gt; לא רלוונטי &lt;Model&gt; לא נתמך
&lt;scale&gt; כן
&lt;Schema&gt; לא
&lt;SchemaData&gt; לא
&lt;ScreenOverlay&gt; לא
&lt;screenXY&gt; לא רלוונטי &lt;ScreenOverlay&gt; לא נתמך
&lt;shape&gt; לא רלוונטי &lt;PhotoOverlay&gt; לא נתמך
&lt;SimpleData&gt; לא רלוונטי &lt;SchemaData&gt; הן לא נתמכות
&lt;SimpleField&gt; לא רלוונטי &lt;Schema&gt; הן לא נתמכות
&lt;size&gt; כן
&lt;Snippet&gt; לא
&lt;south&gt; כן
&lt;state&gt; לא רלוונטי &lt;ListStyle&gt; לא נתמך
&lt;Style&gt; כן
&lt;StyleMap&gt; באופן חלקי הסגנון המודגש לא נבחר. אין תמיכה במפות סגנונות מוטבעות
&lt;styleUrl&gt; כן
&lt;targetHref&gt; לא &lt;Alias&gt; לא נתמך
&lt;tessellate&gt; לא
&lt;text&gt; כן
&lt;textColor&gt; לא
&lt;tileSize&gt; לא רלוונטי &lt;PhotoOverlay&gt; לא נתמך
&lt;tilt&gt; לא
&lt;TimeSpan&gt; לא
&lt;TimeStamp&gt; לא
&lt;topFov&gt; לא רלוונטי &lt;PhotoOverlay&gt; לא נתמך
<עדכון> לא רלוונטי &lt;NetworkLinkControl&lt; לא נתמך
&lt;value&gt; כן
&lt;viewBoundScale&gt; לא
&lt;viewFormat&gt; לא
&lt;viewRefreshMode&gt; לא
&lt;viewRefreshTime&gt; לא
&lt;ViewVolume&gt; לא רלוונטי &lt;PhotoOverlay&gt; לא נתמך
&lt;visibility&gt; כן
&lt;west&gt; כן
&lt;when&gt; לא רלוונטי &lt;TimeStamp&gt; לא נתמך
&lt;width&gt; כן