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 lớp KML
  3. Xoá lớp KML
  4. Truy cập vào 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 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()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
&lt;address&gt; một phần Được lưu trữ dưới dạng giá trị thuộc tính
&lt;AddressDetails&gt; không
&lt;Alias&gt; không
&lt;altitude&gt; không
&lt;altitudeMode&gt; không
&lt;atom:author&gt; không
&lt;atom:link&gt; không
&lt;atom:name&gt; không
&lt;BalloonStyle&gt; một phần chỉ <text> được hỗ trợ
&lt;begin&gt; Không áp dụng &lt;TimeSpan&gt; không được hỗ trợ
&lt;bgColor&gt; không
&lt;bottomFov&gt; Không áp dụng &lt;PhotoOverlay&gt; không được hỗ trợ
&lt;Camera&gt; không
&lt;Change&gt; một phần chỉ hỗ trợ thay đổi kiểu
&lt;color&gt; một phần bao gồm #AABBGGRR và #BBGGRR; không được hỗ trợ trong <ScreenOverlay> và <GroundOverlay>
&lt;colorMode&gt;
&lt;cookie&gt; không &lt;NetworkLinkControl&gt; không được hỗ trợ
&lt;coordinates&gt;
&lt;Create&gt; không
&lt;Data&gt; không
&lt;Delete&gt; không
&lt;description&gt; Chỉ văn bản thuần tuý, không hỗ trợ nội dung HTML
&lt;displayMode&gt; không
&lt;displayName&gt; không
&lt;Document&gt;
&lt;drawOrder&gt;
&lt;east&gt;
&lt;end&gt; Không áp dụng &lt;TimeSpan&gt; không được hỗ trợ
&lt;expires&gt; không &lt;NetworkLinkControl&gt; không được hỗ trợ
&lt;ExtendedData&gt; 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].
&lt;extrude&gt; không
&lt;fill&gt;
&lt;flyToView&gt; không &lt;NetworkLinkControl&gt; không được hỗ trợ
&lt;Folder&gt;
&lt;gridOrigin&gt; Không áp dụng &lt;PhotoOverlay&gt; không được hỗ trợ
&lt;GroundOverlay&gt;
&lt;heading&gt;
&lt;hotSpot&gt;
&lt;href&gt;
&lt;httpQuery&gt; không
&lt;Icon&gt;
&lt;IconStyle&gt;
&lt;ImagePyramid&gt; Không áp dụng &lt;PhotoOverlay&gt; không được hỗ trợ
&lt;innerBoundaryIs&gt; hoàn toàn từ <LinearRing> đơn đặt hàng
&lt;ItemIcon&gt; Không áp dụng &lt;ListStyle&gt; không được hỗ trợ
&lt;key&gt;
&lt;kml&gt;
&lt;LabelStyle&gt; không
<vĩ độ>
&lt;LatLonAltBox&gt; không
&lt;LatLonBox&gt;
&lt;leftFov&gt; Không áp dụng &lt;PhotoOverlay&gt; không được hỗ trợ
&lt;LinearRing&gt;
&lt;LineString&gt;
&lt;LineStyle&gt;
<Đường liên kết> không
&lt;linkDescription&gt; Không áp dụng &lt;NetworkLinkControl&gt; không được hỗ trợ
&lt;linkName&gt; Không áp dụng &lt;NetworkLinkControl&gt; không được hỗ trợ
&lt;linkSnippet&gt; Không áp dụng &lt;NetworkLinkControl&gt; không được hỗ trợ
&lt;listItemType&gt; Không áp dụng &lt;ListStyle&gt; không được hỗ trợ
&lt;ListStyle&gt; không
&lt;Location&gt; Không áp dụng &lt;Model&gt; không được hỗ trợ
&lt;Lod&gt;
<kinh độ>
&lt;LookAt&gt; không
&lt;maxAltitude&gt; không
&lt;maxFadeExtent&gt; không
&lt;maxHeight&gt; Không áp dụng &lt;PhotoOverlay&gt; không được hỗ trợ
&lt;maxLodPixels&gt; không
&lt;maxSessionLength&gt; không
&lt;maxWidth&gt; Không áp dụng &lt;PhotoOverlay&gt; không được hỗ trợ
<message> không
&lt;minAltitude&gt; không
&lt;minFadeExtent&gt; không
&lt;minLodPixels&gt; không
&lt;minRefreshPeriod&gt; không &lt;NetworkLink&gt;
&lt;Model&gt; không
&lt;MultiGeometry&gt;
&lt;name&gt;
&lt;near&gt; Không áp dụng &lt;PhotoOverlay&gt; không được hỗ trợ
&lt;NetworkLink&gt; không
&lt;NetworkLinkControl&gt; không
&lt;north&gt;
&lt;open&gt; Được lưu trữ dưới dạng giá trị thuộc tính
<Hướng> Không áp dụng &lt;Model&gt; không được hỗ trợ
&lt;outerBoundaryIs&gt; hoàn toàn từ <LinearRing> đơn đặt hàng
&lt;outline&gt;
&lt;overlayXY&gt; không
&lt;Pair&gt;
&lt;phoneNumber&gt; một phần Được lưu trữ dưới dạng giá trị thuộc tính
&lt;PhotoOverlay&gt; không
<Dấu vị trí>
&lt;Point&gt;
&lt;Polygon&gt;
&lt;PolyStyle&gt;
&lt;range&gt;
&lt;refreshInterval&gt; không
&lt;refreshMode&gt; không
&lt;refreshVisibility&gt; không
&lt;Region&gt;
&lt;ResourceMap&gt; Không áp dụng &lt;Model&gt; không được hỗ trợ
&lt;rightFov&gt; Không áp dụng &lt;PhotoOverlay&gt; không được hỗ trợ
&lt;roll&gt; Không áp dụng &lt;Camera&gt; và <Model> không được hỗ trợ
&lt;rotation&gt;
&lt;rotationXY&gt; không
&lt;Scale&gt; Không áp dụng &lt;Model&gt; không được hỗ trợ
&lt;scale&gt;
&lt;Schema&gt; không
&lt;SchemaData&gt; không
&lt;ScreenOverlay&gt; không
&lt;screenXY&gt; Không áp dụng &lt;ScreenOverlay&gt; không được hỗ trợ
&lt;shape&gt; Không áp dụng &lt;PhotoOverlay&gt; không được hỗ trợ
&lt;SimpleData&gt; Không áp dụng &lt;SchemaData&gt; không được hỗ trợ
&lt;SimpleField&gt; Không áp dụng &lt;Schema&gt; không được hỗ trợ
&lt;size&gt;
&lt;Snippet&gt; không
&lt;south&gt;
&lt;state&gt; Không áp dụng &lt;ListStyle&gt; không được hỗ trợ
&lt;Style&gt;
&lt;StyleMap&gt; 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
&lt;styleUrl&gt;
&lt;targetHref&gt; không &lt;Alias&gt; không được hỗ trợ
&lt;tessellate&gt; không
&lt;text&gt;
&lt;textColor&gt; không
&lt;tileSize&gt; Không áp dụng &lt;PhotoOverlay&gt; không được hỗ trợ
&lt;tilt&gt; không
&lt;TimeSpan&gt; không
&lt;TimeStamp&gt; không
&lt;topFov&gt; Không áp dụng &lt;PhotoOverlay&gt; không được hỗ trợ
<Cập nhật> Không áp dụng &lt;NetworkLinkControl&lt; không được hỗ trợ
&lt;value&gt;
&lt;viewBoundScale&gt; không
&lt;viewFormat&gt; không
&lt;viewRefreshMode&gt; không
&lt;viewRefreshTime&gt; không
&lt;ViewVolume&gt; Không áp dụng &lt;PhotoOverlay&gt; không được hỗ trợ
&lt;visibility&gt;
&lt;west&gt;
&lt;when&gt; Không áp dụng &lt;TimeStamp&gt; không được hỗ trợ
&lt;width&gt;