- บทนำ
- เพิ่มเลเยอร์ KML
- ล้างเลเยอร์ KML
- เข้าถึงคอนเทนเนอร์ KML
- เข้าถึงหมุด KML และการวางซ้อนพื้น KML
- เข้าถึงพร็อพเพอร์ตี้ KML
- ฟีเจอร์ที่รองรับของ KML
เกริ่นนำ
KML เป็นส่วนขยายของรูปแบบข้อมูล XML และแสดงข้อมูลทางภูมิศาสตร์บนแผนที่ เมื่อใช้ยูทิลิตีนี้ คุณจะสามารถแปลงวัตถุ KML เป็นรูปร่างทางภูมิศาสตร์และแสดงผลเป็นเลเยอร์ที่ด้านบนของแผนที่ได้ หากต้องการเพิ่มและนำข้อมูล KML ออกจากแผนที่ โปรดเรียก addLayerToMap()
และ removeLayerFromMap()
ตามลำดับ หากต้องการเข้าถึงพร็อพเพอร์ตี้ในออบเจ็กต์ KML ให้เรียกใช้ getProperties()
บนหมุด, GroundOverlay, เอกสาร หรือโฟลเดอร์
เพิ่มเลเยอร์ KML ลงในแผนที่
หากต้องการเพิ่มชั้นข้อมูลลงในแผนที่ ก่อนอื่นให้สร้างอินสแตนซ์ของคลาส KmlLayer
การสร้าง KmlLayer
ทำได้ 2 วิธี
หากต้องการนำเข้าและแสดงผลชุดข้อมูล 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> | บางส่วน | รองรับเฉพาะ <text> |
<begin> | ไม่มีข้อมูล | ไม่รองรับ <TimeSpan> |
<bgColor> | ไม่ | |
<bottomFov> | ไม่มีข้อมูล | ไม่รองรับ <PhotoOverlay> |
<Camera> | ไม่ | |
<เปลี่ยน> | บางส่วน | รองรับเฉพาะการเปลี่ยนแปลงรูปแบบ |
<color> | บางส่วน | รวม #AABBGGRR และ #BBGGRR แต่ไม่รองรับใน <ScreenOverlay> และ <GroundOverlay> |
<colorMode> | ใช่ | |
<cookie> | ไม่ | ไม่รองรับ <NetworkLinkControl> |
<coordinates> | ใช่ | |
<สร้าง> | ไม่ | |
<Data> | ไม่ | |
<ลบ> | ไม่ | |
<description> | ใช่ | ข้อความธรรมดาเท่านั้น ไม่รองรับเนื้อหา HTML |
<displayMode> | ไม่ | |
<displayName> | ไม่ | |
<Document> | ใช่ | |
<drawOrder> | ใช่ | |
<east> | ใช่ | |
<end> | ไม่มีข้อมูล | ไม่รองรับ <TimeSpan> |
<expires> | ไม่ | ไม่รองรับ <NetworkLinkControl> |
<ExtendedData> | บางส่วน | ไม่ได้พิมพ์ <Data> เท่านั้น ไม่มี <SimpleData> หรือ <Schema> และระบบไม่รองรับการแทนที่เอนทิตีของแบบฟอร์ม$[dataName] |
<extrude> | ไม่ | |
<fill> | ใช่ | |
<flyToView> | ไม่ | ไม่รองรับ <NetworkLinkControl> |
<โฟลเดอร์> | ใช่ | |
<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> | ใช่ | |
<Link> | ไม่ | |
<linkDescription> | ไม่มีข้อมูล | ไม่รองรับ <NetworkLinkControl> |
<linkName> | ไม่มีข้อมูล | ไม่รองรับ <NetworkLinkControl> |
<linkSnippet> | ไม่มีข้อมูล | ไม่รองรับ <NetworkLinkControl> |
<listItemType> | ไม่มีข้อมูล | ไม่รองรับ <ListStyle> |
<ListStyle> | ไม่ | |
<สถานที่ตั้ง> | ไม่มีข้อมูล | ไม่รองรับ <Model> |
<Lod> | ใช่ | |
<longitude> | ใช่ | |
<LookAt> | ไม่ | |
<maxAltitude> | ไม่ | |
<maxFadeExtent> | ไม่ | |
<maxHeight> | ไม่มีข้อมูล | ไม่รองรับ <PhotoOverlay> |
<maxLodPixels> | ไม่ | |
<maxSessionLength> | ไม่ | |
<maxWidth> | ไม่มีข้อมูล | ไม่รองรับ <PhotoOverlay> |
<message> | ไม่ | |
<minAltitude> | ไม่ | |
<minFadeExtent> | ไม่ | |
<minLodPixels> | ไม่ | |
<minRefreshPeriod> | ไม่ | <NetworkLink> |
<รุ่น> | ไม่ | |
<MultiGeometry> | ใช่ | |
<name> | ใช่ | |
<ใกล้> | ไม่มีข้อมูล | ไม่รองรับ <PhotoOverlay> |
<NetworkLink> | ไม่ | |
<NetworkLinkControl> | ไม่ | |
<north> | ใช่ | |
<open> | ใช่ | จัดเก็บเป็นค่าพร็อพเพอร์ตี้ |
<Orientation> | ไม่มีข้อมูล | ไม่รองรับ <Model> |
<outerBoundaryIs> | ใช่ | โดยปริยายจากคำสั่งซื้อ <LinearRing> |
<outline> | ใช่ | |
<overlayXY> | ไม่ | |
<Pair> | ใช่ | |
<phoneNumber> | บางส่วน | จัดเก็บเป็นค่าพร็อพเพอร์ตี้ |
<PhotoOverlay> | ไม่ | |
<Placemark> | ใช่ | |
<Point> | ใช่ | |
<Polygon> | ใช่ | |
<PolyStyle> | ใช่ | |
<range> | ใช่ | |
<refreshInterval> | ไม่ | |
<refreshMode> | ไม่ | |
<refreshVisibility> | ไม่ | |
<Region> | ใช่ | |
<ResourceMap> | ไม่มีข้อมูล | ไม่รองรับ <Model> |
<rightFov> | ไม่มีข้อมูล | ไม่รองรับ <PhotoOverlay> |
<โรลล์> | ไม่มีข้อมูล | ไม่รองรับ <camera> และ <Model> |
<rotation> | ใช่ | |
<rotationXY> | ไม่ | |
<สเกล> | ไม่มีข้อมูล | ไม่รองรับ <Model> |
<scale> | ใช่ | |
<Schema> | ไม่ | |
<SchemaData> | ไม่ | |
<ScreenOverlay> | ไม่ | |
<screenXY> | ไม่มีข้อมูล | ไม่รองรับ <ScreenOverlay> |
<shape> | ไม่มีข้อมูล | ไม่รองรับ <PhotoOverlay> |
<SimpleData> | ไม่มีข้อมูล | ไม่รองรับ <SchemaData> |
<SimpleField> | ไม่มีข้อมูล | ไม่รองรับ <สคีมา> |
<size> | ใช่ | |
<Snippet> | ไม่ | |
<south> | ใช่ | |
<state> | ไม่มีข้อมูล | ไม่รองรับ <ListStyle> |
<Style> | ใช่ | |
<StyleMap> | บางส่วน | ไม่ได้ระบุรูปแบบที่ไฮไลต์ ไม่รองรับ StyleMaps แบบในบรรทัด |
<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> | ใช่ |