- Giới thiệu
- Thêm lớp KML
- Xoá lớp KML
- Truy cập vào 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
XML
và trình bày dữ liệu địa lý trên 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 các hình dạng địa lý và kết xuất chúng dưới dạng một lớp trên
đầu bản đồ. Để thêm và xóa dữ liệu KML của bạn vào và ra khỏi bản đồ, hãy gọi
addLayerToMap()
và removeLayerFromMap()
. Để truy cập các thuộc tính trong một đối tượng KML, hãy gọi
getProperties()
trên bất kỳ Dấu vị trí, GroundOverlay, Tài liệu hoặc
Thư mục.
Thêm 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 thực thể của
Lớp KmlLayer
. Có hai cách để tạo thực thể
KmlLayer
.
Để nhập và kết xuất tập dữ liệu KML từ một tài nguyên cục bộ, bạn cần:
- Đối tượng
GoogleMap
mà 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
cần có để mở 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à kết xuất tập dữ liệu KML từ một luồng cục bộ, bạn cần:
- Đối tượng
GoogleMap
mà lớp sẽ được kết xuất. InputStream
chứa dữ liệu KML.- Đối tượng
Context
được yêu cầu để 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 một KmlLayer
, hãy gọi
addLayerToMap()()
để thêm dữ liệu đã nhập vào bản đồ.
Kotlin
layer.addLayerToMap()
Java
layer.addLayerToMap();
Xóa 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ào 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 của bạn,
bạn có thể gọi getContainers()
trên lớp mà bạn đã tạo.
Để kiểm tra xem có vùng chứa nào có các vùng chứa lồng nhau không, bạn có thể gọi
hasContainers()
. Để truy cập vào những vùng chứa lồng nhau này, tương tự như
những gì bạn có thể làm trong lớp, bạn có thể gọi
getContainers()
Cách 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 bất kỳ dấu vị trí hoặc lớp phủ mặt đất nào đã
đã 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. Việc gọi một trong hai thiết bị sẽ
trả về một đối tượng có thể lặp lại là KmlPlacemarks
hoặc
KmlGroundOverlays
.
Ví dụ: để truy cập vào các đối tượng KmlPlacemark
qua 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 vào các thuộc tính KML
Để truy cập vào bất kỳ tài sản nào trong vùng chứa hoặc dấu vị trí, hãy gọi
getProperty()
rồi cấp cho lớp này một khoá thuộc tính. Bạn cũng có thể gọi
hasProperty()
để kiểm tra xem tệp có tồn tại hay không. Mẫu này trình bày 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 trên
đối tượng hình học trên bản đồ. Ví dụ sau đây 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ạ
Để có ví dụ về việc nhập tệp KML và tạo một lớp
với nó, hãy xem KmlDemoActivity
trong ứng dụng minh hoạ
đi kèm với thư viện tiện ích. Hướng dẫn thiết lập cho bạn biết cách
để chạy ứng dụng minh hoạ.
Các tính năng được KML hỗ trợ
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> | không | |
<Alias> | không | |
<altitude> | không | |
<altitudeMode> | không | |
<atom:author> | không | |
<atom:link> | không | |
<atom:name> | không | |
<BalloonStyle> | một phần | chỉ <text> được hỗ trợ |
<begin> | Không áp dụng | <TimeSpan> không được hỗ trợ |
<bgColor> | không | |
<bottomFov> | Không áp dụng | <PhotoOverlay> không được hỗ trợ |
<Camera> | không | |
<Change> | 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> | có | |
<cookie> | không | <NetworkLinkControl> không được hỗ trợ |
<coordinates> | có | |
<Create> | không | |
<Data> | không | |
<Delete> | không | |
<description> | có | Chỉ văn bản thuần tuý, không hỗ trợ nội dung HTML |
<displayMode> | không | |
<displayName> | không | |
<Document> | có | |
<drawOrder> | có | |
<east> | có | |
<end> | Không áp dụng | <TimeSpan> không được hỗ trợ |
<expires> | không | <NetworkLinkControl> không được hỗ trợ |
<ExtendedData> | một phần | <Dữ liệu> chưa được nhập chỉ, không có <SimpleData> hoặc <Schema>> và không hỗ trợ việc thay thế thực thể cho biểu mẫu$[dataName]. |
<extrude> | không | |
<fill> | có | |
<flyToView> | không | <NetworkLinkControl> không được hỗ trợ |
<Folder> | có | |
<gridOrigin> | Không áp dụng | <PhotoOverlay> không được hỗ trợ |
<GroundOverlay> | có | |
<heading> | có | |
<hotSpot> | có | |
<href> | có | |
<httpQuery> | không | |
<Icon> | có | |
<IconStyle> | có | |
<ImagePyramid> | Không áp dụng | <PhotoOverlay> không được hỗ trợ |
<innerBoundaryIs> | có | hoàn toàn từ <LinearRing> đơn đặt hàng |
<ItemIcon> | Không áp dụng | <ListStyle> không được hỗ trợ |
<key> | có | |
<kml> | có | |
<LabelStyle> | không | |
<vĩ độ> | có | |
<LatLonAltBox> | không | |
<LatLonBox> | có | |
<leftFov> | Không áp dụng | <PhotoOverlay> không được hỗ trợ |
<LinearRing> | có | |
<LineString> | có | |
<LineStyle> | có | |
<Đường liên kết> | không | |
<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> | không | |
<Location> | Không áp dụng | <Model> không được hỗ trợ |
<Lod> | có | |
<kinh độ> | có | |
<LookAt> | không | |
<maxAltitude> | không | |
<maxFadeExtent> | không | |
<maxHeight> | Không áp dụng | <PhotoOverlay> không được hỗ trợ |
<maxLodPixels> | không | |
<maxSessionLength> | không | |
<maxWidth> | Không áp dụng | <PhotoOverlay> không được hỗ trợ |
<message> | không | |
<minAltitude> | không | |
<minFadeExtent> | không | |
<minLodPixels> | không | |
<minRefreshPeriod> | không | <NetworkLink> |
<Model> | không | |
<MultiGeometry> | có | |
<name> | có | |
<near> | Không áp dụng | <PhotoOverlay> không được hỗ trợ |
<NetworkLink> | không | |
<NetworkLinkControl> | không | |
<north> | có | |
<open> | có | Được lưu trữ dưới dạng giá trị thuộc tính |
<Hướng> | Không áp dụng | <Model> không được hỗ trợ |
<outerBoundaryIs> | có | hoàn toàn từ <LinearRing> đơn đặt hàng |
<outline> | có | |
<overlayXY> | không | |
<Pair> | có | |
<phoneNumber> | một phần | Được lưu trữ dưới dạng giá trị thuộc tính |
<PhotoOverlay> | không | |
<Dấu vị trí> | có | |
<Point> | có | |
<Polygon> | có | |
<PolyStyle> | có | |
<range> | có | |
<refreshInterval> | không | |
<refreshMode> | không | |
<refreshVisibility> | không | |
<Region> | có | |
<ResourceMap> | Không áp dụng | <Model> không được hỗ trợ |
<rightFov> | Không áp dụng | <PhotoOverlay> không được hỗ trợ |
<roll> | Không áp dụng | <Camera> và <Model> không được hỗ trợ |
<rotation> | có | |
<rotationXY> | không | |
<Scale> | Không áp dụng | <Model> không được hỗ trợ |
<scale> | có | |
<Schema> | không | |
<SchemaData> | không | |
<ScreenOverlay> | không | |
<screenXY> | Không áp dụng | <ScreenOverlay> không được hỗ trợ |
<shape> | Không áp dụng | <PhotoOverlay> không được hỗ trợ |
<SimpleData> | Không áp dụng | <SchemaData> không được hỗ trợ |
<SimpleField> | Không áp dụng | <Schema> không được hỗ trợ |
<size> | có | |
<Snippet> | không | |
<south> | có | |
<state> | Không áp dụng | <ListStyle> không được hỗ trợ |
<Style> | có | |
<StyleMap> | một phần | Kiểu được đánh dấu không được cung cấp. Không hỗ trợ StyleMaps cùng dòng |
<styleUrl> | có | |
<targetHref> | không | <Alias> không được hỗ trợ |
<tessellate> | không | |
<text> | có | |
<textColor> | không | |
<tileSize> | Không áp dụng | <PhotoOverlay> không được hỗ trợ |
<tilt> | không | |
<TimeSpan> | không | |
<TimeStamp> | không | |
<topFov> | Không áp dụng | <PhotoOverlay> không được hỗ trợ |
<Cập nhật> | Không áp dụng | <NetworkLinkControl< không được hỗ trợ |
<value> | có | |
<viewBoundScale> | không | |
<viewFormat> | không | |
<viewRefreshMode> | không | |
<viewRefreshTime> | không | |
<ViewVolume> | Không áp dụng | <PhotoOverlay> không được hỗ trợ |
<visibility> | có | |
<west> | có | |
<when> | Không áp dụng | <TimeStamp> không được hỗ trợ |
<width> | có |