- Giới thiệu
- Thêm một lớp KML
- Xoá lớp KML
- Truy cập vùng chứa KML
- Truy cập vào dấu vị trí KML và lớp phủ mặt đất KML
- Truy cập vào các thuộc tính KML
- Các tính năng được hỗ trợ KML
Giới thiệu
KML là một phần mở rộng của định dạng dữ liệu XML và thể hiện dữ liệu địa lý trên một bản đồ. Khi sử dụng tiện ích này, bạn có thể chuyển đổi các đối tượng KML thành hình dạng địa lý và hiển thị các đối tượng đó dưới dạng một lớp ở đầu bản đồ. Để thêm và xoá dữ liệu KML của bạn khỏi bản đồ và ngược lại, hãy gọi
addLayerToMap()
và removeLayerFromMap()
tương ứng. Để truy cập vào các thuộc tính trong một đối tượng KML, hãy gọi getProperties()
trên Dấu vị trí, GroundOverlay, Tài liệu hoặc Thư mục bất kỳ.
Thêm một lớp KML vào bản đồ
Để thêm một lớp dữ liệu vào bản đồ, trước tiên, hãy tạo một bản sao của lớp KmlLayer
. Có 2 cách để tạo thực thể cho KmlLayer
.
Để nhập và hiển thị tập dữ liệu KML từ một tài nguyên cục bộ, bạn cần:
- Đối tượng
GoogleMap
nơi lớp sẽ được kết xuất. - Tệp tài nguyên cục bộ chứa dữ liệu KML.
- Đối tượng
Context
để mở tệp tài nguyên cục bộ.
Kotlin
val layer = KmlLayer(map, R.raw.geojson_file, context)
Java
KmlLayer layer = new KmlLayer(map, R.raw.geojson_file, context);
Để nhập và hiển thị tập dữ liệu KML từ một luồng cục bộ, bạn cần:
- Đối tượng
GoogleMap
nơi lớp sẽ được kết xuất. InputStream
chứa dữ liệu KML.- Đối tượng
Context
để mở tài nguyên cục bộ.
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);
Sau khi bạn tạo KmlLayer
, hãy gọi addLayerToMap()()
để thêm dữ liệu đã nhập vào bản đồ.
Kotlin
layer.addLayerToMap()
Java
layer.addLayerToMap();
Xoá lớp KML
Giả sử bạn đã tạo KmlLayer
này:
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);
Để xoá lớp khỏi bản đồ, hãy gọi removeLayerFromMap()
:
Kotlin
layer.removeLayerFromMap()
Java
layer.removeLayerFromMap();
Truy cập vùng chứa KML
Để truy cập vào bất kỳ vùng chứa nào đã được thêm vào lớp, bạn có thể gọi getContainers()
trên lớp đã tạo.
Để kiểm tra xem có vùng chứa nào lồng nhau hay không, bạn có thể gọi hasContainers()
. Để truy cập vào các vùng chứa lồng nhau này, tương tự như những thao tác bạn có thể thực hiện trong lớp của mình, bạn có thể gọi getContainers()
Để truy cập vào các vùng chứa không được lồng trong KmlLayer
hoặc KmlContainer:
Kotlin
for (containers in layer.containers) { // Do something to container }
Java
for (KmlContainer containers : layer.getContainers()) { // Do something to container }
Cách truy cập vào các vùng chứa được lồng trong KmlLayer
hoặc 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()); } } }
Truy cập dấu vị trí KML và lớp phủ mặt đất KML
Để truy cập vào bất kỳ dấu vị trí hoặc lớp phủ mặt đất nào đã được thêm vào lớp, bạn có thể gọi getPlacemarks()
hoặc getGroundOverlays()
trên một lớp hoặc vùng chứa. Thao tác gọi sẽ trả về một giá trị lặp lại của KmlPlacemarks
hoặc KmlGroundOverlays
tương ứng.
Ví dụ: để truy cập vào các đối tượng KmlPlacemark
từ một lớp:
Kotlin
for (placemark in layer.placemarks) { // Do something to Placemark }
Java
for (KmlPlacemark placemark : layer.getPlacemarks()) { // Do something to Placemark }
Truy cập các thuộc tính KML
Để truy cập vào bất kỳ thuộc tính nào trong vùng chứa hoặc dấu vị trí, hãy gọi
getProperty()
và cung cấp cho thuộc tính đó khoá thuộc tính. Bạn cũng có thể gọi hasProperty()
để kiểm tra xem có tồn tại hay không. Mẫu này cho biết cách truy xuất giá trị thuộc tính "name" từ một vùng chứa, nếu có.
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")); } }
Sự kiện nhấp chuột hình học KML
Bạn có thể sử dụng KmlLayer.OnFeatureClickListener()
để theo dõi các sự kiện nhấp chuột đối với các đối tượng hình học trên bản đồ. Ví dụ sau đây sẽ ghi lại mã nhận dạng của một tính năng khi người dùng nhấp vào tính năng đó:
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()); } });
Xem ứng dụng minh hoạ
Để tham khảo ví dụ về cách nhập tệp KML và tạo một lớp bằng tệp đó, hãy xem KmlDemoActivity
trong ứng dụng minh hoạ đi kèm thư viện tiện ích. Hướng dẫn thiết lập sẽ cho bạn biết cách chạy ứng dụng minh hoạ.
Các tính năng được hỗ trợ KML
Phần tử KML | Có được hỗ trợ không? | Bình luận |
---|---|---|
<address> | một phần | Được lưu trữ dưới dạng giá trị thuộc tính |
<AddressDetails> | no | |
<Alias> | no | |
<altitude> | no | |
<altitudeMode> | no | |
<atom:author> | no | |
<atom:link> | no | |
<atom:name> | no | |
<BalloonStyle> | một phần | chỉ hỗ trợ <text> |
<begin> | Không áp dụng | Không hỗ trợ <TimeSpan> |
<bgColor> | no | |
<bottomFov> | Không áp dụng | <ẢnhOverlay> không được hỗ trợ |
<Camera> | no | |
<Thay đổi> | một phần | chỉ hỗ trợ thay đổi kiểu |
<color> | một phần | bao gồm #AABBGGRR và #BBGGRR; không được hỗ trợ trong <ScreenOverlay> và <GroundOverlay> |
<colorMode> | đồng ý | |
<cookie> | no | <NetworkLinkControl> không được hỗ trợ |
<coordinates> | đồng ý | |
<Tạo> | no | |
<Data> | no | |
<Xoá> | no | |
<description> | đồng ý | Chỉ hỗ trợ văn bản thuần tuý, không hỗ trợ nội dung HTML |
<displayMode> | no | |
<displayName> | no | |
<Document> | đồng ý | |
<drawOrder> | đồng ý | |
<east> | đồng ý | |
<end> | Không áp dụng | Không hỗ trợ <TimeSpan> |
<expires> | no | <NetworkLinkControl> không được hỗ trợ |
<ExtendedData> | một phần | chỉ hỗ trợ <Data> chưa nhập, không có <SimpleData> hoặc <Schema> và các giá trị thay thế thực thể dạng$[dataName] không được hỗ trợ. |
<extrude> | no | |
<fill> | đồng ý | |
<flyToView> | no | <NetworkLinkControl> không được hỗ trợ |
<Thư mục> | đồng ý | |
<gridOrigin> | Không áp dụng | <ẢnhOverlay> không được hỗ trợ |
<GroundOverlay> | đồng ý | |
<heading> | đồng ý | |
<hotSpot> | đồng ý | |
<href> | đồng ý | |
<httpQuery> | no | |
<Icon> | đồng ý | |
<IconStyle> | đồng ý | |
<ImagePyramid> | Không áp dụng | <ẢnhOverlay> không được hỗ trợ |
<innerBoundaryIs> | đồng ý | ngầm ẩn từ thứ tự <LinearRing> |
<ItemIcon> | Không áp dụng | <ListStyle> không được hỗ trợ |
<key> | đồng ý | |
<kml> | đồng ý | |
<LabelStyle> | no | |
<latitude> | đồng ý | |
<LatLonAltBox> | no | |
<LatLonBox> | đồng ý | |
<leftFov> | Không áp dụng | <ẢnhOverlay> không được hỗ trợ |
<LinearRing> | đồng ý | |
<LineString> | đồng ý | |
<LineStyle> | đồng ý | |
<Link> | no | |
<linkDescription> | Không áp dụng | <NetworkLinkControl> không được hỗ trợ |
<linkName> | Không áp dụng | <NetworkLinkControl> không được hỗ trợ |
<linkSnippet> | Không áp dụng | <NetworkLinkControl> không được hỗ trợ |
<listItemType> | Không áp dụng | <ListStyle> không được hỗ trợ |
<ListStyle> | no | |
<Vị trí> | Không áp dụng | <Model> không được hỗ trợ |
<Lod> | đồng ý | |
<longitude> | đồng ý | |
<LookAt> | no | |
<maxAltitude> | no | |
<maxFadeExtent> | no | |
<maxHeight> | Không áp dụng | <ẢnhOverlay> không được hỗ trợ |
<maxLodPixels> | no | |
<maxSessionLength> | no | |
<maxWidth> | Không áp dụng | <ẢnhOverlay> không được hỗ trợ |
<message> | no | |
<minAltitude> | no | |
<minFadeExtent> | no | |
<minLodPixels> | no | |
<minRefreshPeriod> | no | <NetworkLink> |
<Kiểu máy> | no | |
<MultiGeometry> | đồng ý | |
<name> | đồng ý | |
<gần> | Không áp dụng | <ẢnhOverlay> không được hỗ trợ |
<NetworkLink> | no | |
<NetworkLinkControl> | no | |
<north> | đồng ý | |
<open> | đồng ý | Được lưu trữ dưới dạng giá trị thuộc tính |
<Orientation> | Không áp dụng | <Model> không được hỗ trợ |
<outerBoundaryIs> | đồng ý | ngầm ẩn từ thứ tự <LinearRing> |
<outline> | đồng ý | |
<overlayXY> | no | |
<Pair> | đồng ý | |
<phoneNumber> | một phần | Được lưu trữ dưới dạng giá trị thuộc tính |
<PhotoOverlay> | no | |
<Placemark> | đồng ý | |
<Point> | đồng ý | |
<Polygon> | đồng ý | |
<PolyStyle> | đồng ý | |
<range> | đồng ý | |
<refreshInterval> | no | |
<refreshMode> | no | |
<refreshVisibility> | no | |
<Region> | đồng ý | |
<ResourceMap> | Không áp dụng | <Model> không được hỗ trợ |
<rightFov> | Không áp dụng | <ẢnhOverlay> không được hỗ trợ |
<roll> | Không áp dụng | <Camera> và <Model> không được hỗ trợ |
<rotation> | đồng ý | |
<rotationXY> | no | |
<Tỷ lệ> | Không áp dụng | <Model> không được hỗ trợ |
<scale> | đồng ý | |
<Schema> | no | |
<SchemaData> | no | |
<ScreenOverlay> | no | |
<screenXY> | Không áp dụng | <ScreenOverlay> không được hỗ trợ |
<shape> | Không áp dụng | <ẢnhOverlay> không được hỗ trợ |
<SimpleData> | Không áp dụng | <SchemaData> không được hỗ trợ |
<SimpleField> | Không áp dụng | <Giản đồ> không được hỗ trợ |
<size> | đồng ý | |
<Snippet> | no | |
<south> | đồng ý | |
<state> | Không áp dụng | <ListStyle> không được hỗ trợ |
<Style> | đồng ý | |
<StyleMap> | một phần | Chưa cung cấp kiểu được đánh dấu. Không hỗ trợ StyleMaps cùng dòng |
<styleUrl> | đồng ý | |
<targetHref> | no | <Alias> không được hỗ trợ |
<tessellate> | no | |
<text> | đồng ý | |
<textColor> | no | |
<tileSize> | Không áp dụng | <ẢnhOverlay> không được hỗ trợ |
<tilt> | no | |
<TimeSpan> | no | |
<TimeStamp> | no | |
<topFov> | Không áp dụng | <ẢnhOverlay> không được hỗ trợ |
<Cập nhật> | Không áp dụng | <NetworkLinkControl< không được hỗ trợ |
<value> | đồng ý | |
<viewBoundScale> | no | |
<viewFormat> | no | |
<viewRefreshMode> | no | |
<viewRefreshTime> | no | |
<ViewVolume> | Không áp dụng | <ẢnhOverlay> không được hỗ trợ |
<visibility> | đồng ý | |
<west> | đồng ý | |
<when> | Không áp dụng | Không hỗ trợ <TimeStamp> |
<width> | đồng ý |