- מבוא
- הוספה של שכבת KML
- ניקוי של שכבת KML
- גישה למאגרים של KML
- גישה לסמנים של KML ולשכבות-על של קרקע ב-KML
- גישה למאפייני KML
- תכונות נתמכות ב-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> | כן |