- บทนำ
- เพิ่มเลเยอร์ KML
- ล้างเลเยอร์ KML
- เข้าถึงคอนเทนเนอร์ KML
- เข้าถึงหมุด KML และการวางซ้อน KML จากพื้นดิน
- เข้าถึงคุณสมบัติ KML
- ฟีเจอร์ที่รองรับ KML
บทนำ
KML
เป็นส่วนขยายของ
XML
และแสดงข้อมูลทางภูมิศาสตร์บนแผนที่ เมื่อใช้ยูทิลิตีนี้
สามารถแปลงวัตถุ KML เป็นรูปทรงทางภูมิศาสตร์และแสดงผลเป็นเลเยอร์
ที่ด้านบนของแผนที่ ในการเพิ่มและนำข้อมูล KML ออกไปยังและออกจากแผนที่ ให้
addLayerToMap()
และ removeLayerFromMap()
ตามลำดับ ในการเข้าถึงคุณสมบัติในออบเจ็กต์ KML ให้เรียก
getProperties()
บนหมุด, GroundOverlay, เอกสาร หรือ
โฟลเดอร์
เพิ่มเลเยอร์ KML ลงในแผนที่
หากต้องการเพิ่มชั้นข้อมูลลงในแผนที่ ให้สร้างอินสแตนซ์ของ
KmlLayer
ชั้นเรียน การสร้างอินสแตนซ์มี 2 วิธี
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> | บางส่วน | เฉพาะ <text> ได้รับการสนับสนุน |
<begin> | ไม่มี | <TimeSpan> ไม่รองรับ |
<bgColor> | ไม่ | |
<bottomFov> | ไม่มี | <PhotoOverlay> ไม่รองรับ |
<Camera> | ไม่ | |
<Change> | บางส่วน | รองรับเฉพาะการเปลี่ยนแปลงรูปแบบเท่านั้น |
<color> | บางส่วน | มี #AABBGGRR และ #BBGGRR ไม่รองรับใน <ScreenOverlay> และ <GroundOverlay> |
<colorMode> | ใช่ | |
<cookie> | ไม่ | <NetworkLinkControl> ไม่รองรับ [not_supported] |
<coordinates> | ใช่ | |
<Create> | ไม่ | |
<Data> | ไม่ | |
<Delete> | ไม่ | |
<description> | ใช่ | ข้อความล้วนเท่านั้น ไม่รองรับเนื้อหา HTML |
<displayMode> | ไม่ | |
<displayName> | ไม่ | |
<Document> | ใช่ | |
<drawOrder> | ใช่ | |
<east> | ใช่ | |
<end> | ไม่มี | <TimeSpan> ไม่รองรับ |
<expires> | ไม่ | <NetworkLinkControl> ไม่รองรับ [not_supported] |
<ExtendedData> | บางส่วน | <Data> ที่ไม่ได้พิมพ์ เท่านั้น ไม่มี <SimpleData> หรือ <สคีมา> และระบบไม่รองรับการแทนที่เอนทิตีของ form$[dataName] |
<extrude> | ไม่ | |
<fill> | ใช่ | |
<flyToView> | ไม่ | <NetworkLinkControl> ไม่รองรับ [not_supported] |
<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> ไม่รองรับ [not_supported] |
<linkName> | ไม่มี | <NetworkLinkControl> ไม่รองรับ [not_supported] |
<linkSnippet> | ไม่มี | <NetworkLinkControl> ไม่รองรับ [not_supported] |
<listItemType> | ไม่มี | <ListStyle> ไม่รองรับ |
<ListStyle> | ไม่ | |
<Location> | ไม่มี | <Model> ไม่รองรับ |
<Lod> | ใช่ | |
<ลองจิจูด> | ใช่ | |
<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> | บางส่วน | ไม่ได้ระบุรูปแบบที่ไฮไลต์ ไม่รองรับ StyleMaps แบบแทรกในบรรทัด |
<styleUrl> | ใช่ | |
<targetHref> | ไม่ | <Alias> ไม่รองรับ |
<tessellate> | ไม่ | |
<text> | ใช่ | |
<textColor> | ไม่ | |
<tileSize> | ไม่มี | <PhotoOverlay> ไม่รองรับ |
<tilt> | ไม่ | |
<TimeSpan> | ไม่ | |
<TimeStamp> | ไม่ | |
<topFov> | ไม่มี | <PhotoOverlay> ไม่รองรับ |
<อัปเดต> | ไม่มี | <NetworkLinkControl< ไม่รองรับ [not_supported] |
<value> | ใช่ | |
<viewBoundScale> | ไม่ | |
<viewFormat> | ไม่ | |
<viewRefreshMode> | ไม่ | |
<viewRefreshTime> | ไม่ | |
<ViewVolume> | ไม่มี | <PhotoOverlay> ไม่รองรับ |
<visibility> | ใช่ | |
<west> | ใช่ | |
<when> | ไม่มี | <TimeStamp> ไม่รองรับ |
<width> | ใช่ |