- บทนำ
- เพิ่มเลเยอร์ KML
- ล้างเลเยอร์ KML
- เข้าถึงคอนเทนเนอร์ KML
- เข้าถึงหมุด KML และการวางซ้อนภาคพื้นของ KML
- เข้าถึงพร็อพเพอร์ตี้ KML
- ฟีเจอร์ที่รองรับ KML
บทนำ
KML เป็นส่วนขยายของรูปแบบข้อมูล XML และแสดงข้อมูลทางภูมิศาสตร์บนแผนที่ เมื่อใช้ยูทิลิตีนี้ คุณจะสามารถแปลงออบเจ็กต์ KML เป็นรูปร่างทางภูมิศาสตร์และแสดงผลเป็นเลเยอร์ที่ด้านบนของแผนที่ได้ หากต้องการเพิ่มและนําข้อมูล KML ออกและออกจากแผนที่ ให้เรียกใช้ addLayerToMap()
และ removeLayerFromMap()
ตามลําดับ หากต้องการเข้าถึงพร็อพเพอร์ตี้ในออบเจ็กต์ KML ให้เรียกใช้ getProperties()
ในหมุด GroundGround เอกสาร หรือโฟลเดอร์
เพิ่มเลเยอร์ KML ลงในแผนที่
หากต้องการเพิ่มชั้นข้อมูลลงในแผนที่ ก่อนอื่นให้สร้างอินสแตนซ์ของคลาส KmlLayer
การเริ่มต้น KmlLayer
ทําได้ 2 วิธี
หากต้องการนําเข้าและแสดงผลชุดข้อมูล KML จากทรัพยากรในเครื่อง คุณต้องมีสิ่งต่อไปนี้
- ออบเจ็กต์
GoogleMap
ที่จะแสดงเลเยอร์ - ไฟล์ทรัพยากรในเครื่องที่มีข้อมูล KML
- ออบเจ็กต์
Context
ซึ่งจําเป็นในการเปิดไฟล์ทรัพยากรในเครื่อง
Java
KmlLayer layer = new KmlLayer(map, R.raw.geojson_file, context);
Kotlin
val layer = KmlLayer(map, R.raw.geojson_file, context)
หากต้องการนําเข้าและแสดงผลชุดข้อมูล KML จากสตรีมในเครื่อง คุณจะต้องมีสิ่งต่อไปนี้
- ออบเจ็กต์
GoogleMap
ที่จะแสดงเลเยอร์ InputStream
ที่มีข้อมูล KML- ออบเจ็กต์
Context
ซึ่งจําเป็นสําหรับการเปิดทรัพยากรในเครื่อง
Java
InputStream inputStream = // InputStream containing KML data KmlLayer layer = new KmlLayer(map, inputStream, context);
Kotlin
val inputStream: InputStream? = // InputStream containing KML data val layer = KmlLayer(map, inputStream, context)
หลังจากที่สร้าง KmlLayer
แล้ว ให้เรียก addLayerToMap()()
เพื่อเพิ่มข้อมูลที่นําเข้าบนแผนที่
Java
layer.addLayerToMap();
Kotlin
layer.addLayerToMap()
ล้างเลเยอร์ KML
สมมติว่าคุณได้สร้าง KmlLayer
นี้
Java
InputStream inputStream = // InputStream containing KML data KmlLayer layer = new KmlLayer(map, inputStream, context);
Kotlin
val inputStream: InputStream? = // InputStream containing KML data val layer = KmlLayer(map, inputStream, context)
หากต้องการนําเลเยอร์ออกจากแผนที่ ให้เรียก removeLayerFromMap()
:
Java
layer.removeLayerFromMap();
Kotlin
layer.removeLayerFromMap()
เข้าถึงคอนเทนเนอร์ KML
หากต้องการเข้าถึงคอนเทนเนอร์ที่เพิ่มลงในเลเยอร์แล้ว คุณสามารถเรียกใช้ getContainers()
ในเลเยอร์ที่สร้างไว้
หากต้องการตรวจสอบว่าคอนเทนเนอร์มีคอนเทนเนอร์ที่ซ้อนกันหรือไม่ คุณสามารถเรียกใช้ hasContainers()
ได้ หากต้องการเข้าถึงคอนเทนเนอร์ที่ซ้อนกันเหล่านี้ คุณสามารถเรียกใช้ getContainers()
ได้ ซึ่งคล้ายกับสิ่งที่คุณสามารถทําได้ในเลเยอร์
วิธีเข้าถึงคอนเทนเนอร์ที่ไม่ได้ฝังอยู่ใน KmlLayer
หรือ KmlContainer:
Java
for (KmlContainer containers : layer.getContainers()) { // Do something to container }
Kotlin
for (containers in layer.containers) { // Do something to container }
วิธีเข้าถึงคอนเทนเนอร์ที่ฝังอยู่ใน KmlLayer
หรือ KmlContainer
Java
public void accessContainers(Iterable<KmlContainer> containers) { for (KmlContainer container : containers) { if (container.hasContainers()) { accessContainers(container.getContainers()); } } }
Kotlin
fun accessContainers(containers: Iterable<KmlContainer>) { for (container in containers) { if (container.hasContainers()) { accessContainers(container.containers) } }
เข้าถึงหมุด KML และการวางซ้อนภาคพื้นของ KML
หากต้องการเข้าถึงหมุดหรือการวางซ้อนพื้นซึ่งถูกเพิ่มลงในเลเยอร์ คุณสามารถเรียก getPlacemarks()
หรือ getGroundOverlays()
บนเลเยอร์หรือคอนเทนเนอร์ การเรียกทั้ง 2 อย่างจะแสดงการทําซ้ําที่ KmlPlacemarks
หรือ KmlGroundOverlays
ตามลําดับ
ตัวอย่างเช่น ในการเข้าถึงออบเจ็กต์ KmlPlacemark
จากเลเยอร์ ให้ทําดังนี้
Java
for (KmlPlacemark placemark : layer.getPlacemarks()) { // Do something to Placemark }
Kotlin
for (placemark in layer.placemarks) { // Do something to Placemark }
เข้าถึงพร็อพเพอร์ตี้ KML
หากต้องการเข้าถึงพร็อพเพอร์ตี้ในคอนเทนเนอร์หรือหมุด ให้เรียก getProperty()
และคีย์พร็อพเพอร์ตี้ หรือจะโทรหา hasProperty()
เพื่อตรวจสอบว่ามีรหัสอยู่ก็ได้ ตัวอย่างนี้แสดงวิธีเรียกค่าพร็อพเพอร์ตี้ "name" จากคอนเทนเนอร์ (หากมี)
Java
for (KmlContainer container : layer.getContainers()) { if (container.hasProperty("name")) { Log.i("KML", container.getProperty("name")); } }
Kotlin
for (container in layer.containers) { if (container.hasProperty("name")) { Log.i("KML", container.getProperty("name")) } }
กิจกรรมการคลิกรูปเรขาคณิตของ KML
คุณใช้ KmlLayer.OnFeatureClickListener()
เพื่อฟังเหตุการณ์การคลิกในฟีเจอร์เรขาคณิตในแผนที่ได้ ตัวอย่างต่อไปนี้จะบันทึกรหัสของฟีเจอร์เมื่อผู้ใช้คลิกฟีเจอร์
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()); } });
Kotlin
// Set a listener for geometry clicked events. layer.setOnFeatureClickListener { feature -> Log.i( "KML", "Feature clicked: " + feature.id ) }
ดูแอปเดโม
โปรดดูตัวอย่างการนําเข้าไฟล์ KML และสร้างเลเยอร์ด้วยไฟล์ KmlDemoActivity
ในแอปสาธิตที่จัดส่งมาพร้อมกับไลบรารียูทิลิตี คู่มือการตั้งค่าจะแสดงวิธีเรียกใช้แอปสาธิต
ฟีเจอร์ที่รองรับ KML
องค์ประกอบ KML | มีการรองรับไหม | ความคิดเห็น |
---|---|---|
<ที่อยู่> | บางส่วน | จัดเก็บเป็นค่าพร็อพเพอร์ตี้ |
<AddressDetails> | no | |
<Alias> | no | |
<ระดับความสูง> | no | |
<altitudeMode> | no | |
<atom:author> | no | |
<atom:link> | no | |
<atom:name> | no | |
<BalloonStyle> | บางส่วน | รองรับเฉพาะ <text> |
<begin> | ไม่มี | <TimeSpan> ไม่ได้รับการสนับสนุน |
<bgColor> | no | |
<BottomFov> | ไม่มี | ไม่สนับสนุน <โฟโต้โอเวอร์> |
<กล้องถ่ายรูป> | no | |
<เปลี่ยน> | บางส่วน | รองรับเฉพาะการเปลี่ยนแปลงรูปแบบเท่านั้น |
<color> | บางส่วน | รวม #AABBGGRR และ #BBGGRR; ไม่สนับสนุนใน <Screenโฆษณาซ้อนทับ> และ <Groundโฆษณาซ้อนทับ> |
<colorMode> | ใช่ | |
<cookie> | no | <NetworkLinkControl> ไม่รองรับ |
<พิกัด> | ใช่ | |
<สร้าง> | no | |
<Data> | no | |
<Delete> | no | |
<description> | ใช่ | ข้อความธรรมดาเท่านั้น ไม่รองรับเนื้อหา HTML |
<displayMode> | no | |
<displayName> | no | |
<เอกสาร> | ใช่ | |
<DrawOrder> | ใช่ | |
<east> | ใช่ | |
<end> | ไม่มี | <TimeSpan> ไม่ได้รับการสนับสนุน |
<expires> | no | <NetworkLinkControl> ไม่รองรับ |
<ExtendedData> | บางส่วน | &type;lt;Data> เท่านั้น ไม่สนับสนุน <SimpleData> หรือ <สคีมา> และการแทนที่เอนทิตีของแบบฟอร์ม$[dataName] |
<extrude> | no | |
<fill> | ใช่ | |
<flyToView> | no | <NetworkLinkControl> ไม่รองรับ |
<Folder> | ใช่ | |
<gridOrigin> | ไม่มี | ไม่สนับสนุน <โฟโต้โอเวอร์> |
<GroundOver> | ใช่ | |
<head> | ใช่ | |
<hotSpot> | ใช่ | |
<href> | ใช่ | |
<httpQuery> | no | |
<Ig> | ใช่ | |
<IconStyle> | ใช่ | |
<ImagePyramid> | ไม่มี | ไม่สนับสนุน <โฟโต้โอเวอร์> |
<internalBoundaryIs> | ใช่ | โดยนัยจาก <LinearRing> ลําดับ |
<ItemIcon> | ไม่มี | <ListStyle> ไม่ได้รับการสนับสนุน |
<key> | ใช่ | |
< KML> | ใช่ | |
<LabelStyle> | no | |
<ละติจูด> | ใช่ | |
<LatLonAltBox> | no | |
<LatLonBox> | ใช่ | |
<leftFov> | ไม่มี | ไม่สนับสนุน <โฟโต้โอเวอร์> |
<LinearRing> | ใช่ | |
<LineString> | ใช่ | |
<LineStyle> | ใช่ | |
<Link> | no | |
<linkDescription> | ไม่มี | <NetworkLinkControl> ไม่รองรับ |
<linkName> | ไม่มี | <NetworkLinkControl> ไม่รองรับ |
<linksnippet> | ไม่มี | <NetworkLinkControl> ไม่รองรับ |
<listItemType> | ไม่มี | <ListStyle> ไม่ได้รับการสนับสนุน |
<ListStyle> | no | |
<ตําแหน่ง> | ไม่มี | <Model> ไม่ได้รับการสนับสนุน |
<Lod> | ใช่ | |
<ลองจิจูด> | ใช่ | |
<LookAt> | no | |
<maxAltitude> | no | |
<maxFadeExtent> | no | |
<maxHeight> | ไม่มี | ไม่สนับสนุน <โฟโต้โอเวอร์> |
<maxLodPixels> | no | |
<maxSessionLength> | no | |
<maxWidth> | ไม่มี | ไม่สนับสนุน <โฟโต้โอเวอร์> |
<message> | no | |
<minAระดับความสูง> | no | |
<minFadeExtent> | no | |
<minLodPixels> | no | |
<minRefreshPeriod> | no | <NetworkLink> |
<Model> | no | |
<MultiGeometry> | ใช่ | |
<name> | ใช่ | |
<ใกล้เคียง> | ไม่มี | ไม่สนับสนุน <โฟโต้โอเวอร์> |
<NetworkLink> | no | |
<NetworkLinkControl> | no | |
<north> | ใช่ | |
<open> | ใช่ | จัดเก็บเป็นค่าพร็อพเพอร์ตี้ |
<การวางแนว> | ไม่มี | <Model> ไม่ได้รับการสนับสนุน |
<outerBoundaryIs> | ใช่ | โดยนัยจาก <LinearRing> ลําดับ |
<outline> | ใช่ | |
<โฆษณาซ้อนทับXY> | no | |
<จับคู่> | ใช่ | |
<phoneNumber> | บางส่วน | จัดเก็บเป็นค่าพร็อพเพอร์ตี้ |
<โฟโต้โอเวอร์> | no | |
<หมุด> | ใช่ | |
<Point> | ใช่ | |
<Polygon> | ใช่ | |
<PolyStyle> | ใช่ | |
<range> | ใช่ | |
<RefreshInterval> | no | |
<RefreshMode> | no | |
<รีเฟรชระดับการเข้าถึง> | no | |
<ภูมิภาค> | ใช่ | |
<Resourcemap> | ไม่มี | <Model> ไม่ได้รับการสนับสนุน |
<rightFov> | ไม่มี | ไม่สนับสนุน <โฟโต้โอเวอร์> |
<roll> | ไม่มี | <Camera> และ <Model> ไม่ได้รับการสนับสนุน |
<การหมุนเวียน> | ใช่ | |
<rotationXY> | no | |
<Scale> | ไม่มี | <Model> ไม่ได้รับการสนับสนุน |
<scale> | ใช่ | |
<สคีมา> | no | |
<SchemaData> | no | |
<ScreenScreen> | no | |
<screenXY> | ไม่มี | <ScreenScreen> ใช้ไม่ได้ |
<รูปร่าง> | ไม่มี | ไม่สนับสนุน <โฟโต้โอเวอร์> |
<SimpleData> | ไม่มี | <SchemaData> ไม่ได้รับการสนับสนุน |
<SimpleField> | ไม่มี | <Schema> ไม่ได้รับการสนับสนุน |
<size> | ใช่ | |
<snippet> | no | |
<south> | ใช่ | |
<state> | ไม่มี | <ListStyle> ไม่ได้รับการสนับสนุน |
<Style> | ใช่ | |
<StyleMap> | บางส่วน | ไม่ได้ใช้รูปแบบที่ไฮไลต์ ไม่รองรับ StyleMaps ในบรรทัด |
<styleUrl> | ใช่ | |
<targetHref> | no | <Alias> ไม่ได้รับการสนับสนุน |
<tessellate> | no | |
<text> | ใช่ | |
<textColor> | no | |
<tileSize> | ไม่มี | ไม่สนับสนุน <โฟโต้โอเวอร์> |
<เอียง> | no | |
<TimeSpan> | no | |
<TimeStamp> | no | |
<topFov> | ไม่มี | ไม่สนับสนุน <โฟโต้โอเวอร์> |
<อัปเดต> | ไม่มี | <NetworkLinkControl< ไม่รองรับ |
<value> | ใช่ | |
<viewBoundScale> | no | |
<viewFormat> | no | |
<viewRefreshMode> | no | |
<viewRefreshTime> | no | |
<ViewVolume> | ไม่มี | ไม่สนับสนุน <โฟโต้โอเวอร์> |
<การมองเห็น> | ใช่ | |
<west> | ใช่ | |
<เวลา> | ไม่มี | <TimeStamp> ไม่ได้รับการสนับสนุน |
<width> | ใช่ |