Tiện ích Nhập KML của Google Maps

Chọn nền tảng: Android iOS JavaScript
  1. Giới thiệu
  2. Thêm một lớp KML
  3. Xoá lớp KML
  4. Truy cập vùng chứa KML
  5. Truy cập vào dấu vị trí KML và lớp phủ mặt đất KML
  6. Truy cập vào các thuộc tính KML
  7. 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()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 ý