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