Tiện ích GeoJSON dành cho Android của Google Maps

Chọn nền tảng: Android iOS JavaScript
  1. Giới thiệu
  2. Thêm GeoJsonLayer vào bản đồ của bạn
  3. Xoá GeoJsonLayer
  4. Thêm và xoá GeoJsonFeature
  5. Truy cập vào GeoJsonFeatures và thuộc tính của chúng
  6. Tạo kiểu GeoJsonLayer và GeoJsonFeatures
  7. Xem ứng dụng minh hoạ

Giới thiệu

GeoJSON là một phần mở rộng của dữ liệu JSON và trình bày dữ liệu địa lý. Khi sử dụng tiện ích này, bạn có thể lưu trữ các đặc điểm địa lý ở định dạng GeoJSON và kết xuất chúng dưới dạng một lớp trên cùng bản đồ. Để thêm và xoá dữ liệu GeoJSON của bạn vào và khỏi bản đồ, hãy gọi addLayerToMap()removeLayerFromMap() tương ứng. Tương tự bạn có thể thêm và xoá từng tính năng bằng cách gọi addFeature()removeFeature() và truyền vào một giá trị Đối tượng GeoJsonFeature. Nếu muốn sử dụng các tính năng, bạn có thể có thể gọi getFeatures() để lấy đối tượng lặp lại của tất cả đối tượng GeoJsonFeature đã được thêm vào lớp.

Bạn cũng có thể đặt kiểu mặc định để áp dụng cho các đối tượng trước khi chúng được được thêm vào lớp bằng cách gọi getDefaultPointStyle(), getDefaultLineStringStyle() hoặc getDefaultPolygonStyle() rồi đặt tuỳ chọn kiểu cho mỗi thứ. Ngoài ra, bạn có thể đặt kiểu cho từng người GeoJsonFeature bằng cách gọi setPointStyle(), setLineStringStyle() hoặc setPolygonStyle() trên và truyền vào đối tượng kiểu có liên quan.

Thêm một GeoJsonLayer vào bản đồ của bạn

Để thêm một lớp GeoJson vào bản đồ, trước tiên hãy tạo một thực thể của GeoJsonLayer . Có hai cách để tạo GeoJsonLayer.

Để nhập từ JSONObject, bạn cần có:

  • Đối tượng GoogleMap nơi lớp sẽ được kết xuất
  • JSONObject chứa dữ liệu GeoJSON sẽ được thêm vào lớp

Kotlin



val geoJsonData: JSONObject? = // JSONObject containing the GeoJSON data
val layer = GeoJsonLayer(map, geoJsonData)

      

Java


JSONObject geoJsonData = // JSONObject containing the GeoJSON data
GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);

      

Để nhập từ tệp GeoJSON cục bộ, bạn cần có:

  • Đố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 GeoJSON
  • Đối tượng Context cần có để mở tài nguyên cục bộ tệp

Kotlin



val layer = GeoJsonLayer(map, R.raw.geojson_file, context)

      

Java


GeoJsonLayer layer = new GeoJsonLayer(map, R.raw.geojson_file, context);

      

Sau khi bạn tạo GeoJsonLayer, hãy gọi addLayerToMap() để thêm dữ liệu đã nhập vào bản đồ:

Kotlin



layer.addLayerToMap()

      

Java


layer.addLayerToMap();

      

Xoá GeoJsonLayer

Giả sử bạn đã thêm lớp này

Kotlin



val geoJsonData: JSONObject? = // JSONObject containing the GeoJSON data
val layer = GeoJsonLayer(map, geoJsonData)

      

Java


JSONObject geoJsonData = // JSONObject containing the GeoJSON data
GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);

      

Để xoá GeoJsonLayer, hãy gọi removeLayerFromMap()

Kotlin



layer.removeLayerFromMap()

      

Java


layer.removeLayerFromMap();

      

Thêm và xoá GeoJsonFeature

Một đối tượng trong GeoJSON có loại "feature". Nó chứa một hình học, một thành viên thuộc tính và có thể có hộp giới hạn hoặc mã nhận dạng (không bắt buộc).

Bạn có thể tạo từng đối tượng GeoJsonFeature và thêm các đối tượng đó vào GeoJsonLayer.

Giả sử bạn đã tạo một đối tượng chứa một điểm tại 0, 0 với một mục trong các thuộc tính và không có hộp giới hạn.

Kotlin



val point = GeoJsonPoint(LatLng(0.0, 0.0))
val properties = hashMapOf("Ocean" to "South Atlantic")
val pointFeature = GeoJsonFeature(point, "Origin", properties, null)

      

Java


GeoJsonPoint point = new GeoJsonPoint(new LatLng(0, 0));
HashMap<String, String> properties = new HashMap<>();
properties.put("Ocean", "South Atlantic");
GeoJsonFeature pointFeature = new GeoJsonFeature(point, "Origin", properties, null);

      

Để thêm đối tượng này vào lớp, hãy gọi addFeature() và truyền vào tính năng cần thêm.

Kotlin



layer.addFeature(pointFeature)

      

Java


layer.addFeature(pointFeature);

      

Để xoá một đối tượng sau khi thêm vào lớp, hãy gọi removeFeature() rồi truyền vào đối tượng này để xoá.

Kotlin



layer.removeFeature(pointFeature)

      

Java


layer.removeFeature(pointFeature);

      

Truy cập vào GeoJsonFeatures và các thuộc tính tương ứng

Để truy cập vào tất cả GeoJsonFeatures đã được thêm vào lớp, bạn có thể gọi cho getFeatures() trên GeoJsonLayer mà bạn đã tạo. Thao tác này sẽ trả về một đối tượng có thể lặp lại là GeoJsonFeatures mà bạn có thể truy cập bằng cách sử dụng vòng lặp cho mỗi như sau.

Kotlin



for (feature in layer.features) {
    // Do something to the feature
}

      

Java


for (GeoJsonFeature feature : layer.getFeatures()) {
    // Do something to the feature
}

      

Sử dụng phương thức hasProperty()getProperty() trong kết hợp với phương thức getFeatures() để kiểm tra xem từng mã theo dõi đã lưu trữ hay chưa tính năng có một thuộc tính cụ thể và truy cập vào thuộc tính đó nếu tính năng đó tồn tại.

Kotlin



if (feature.hasProperty("Ocean")) {
    val oceanProperty = feature.getProperty("Ocean")
}

      

Java


if (feature.hasProperty("Ocean")) {
    String oceanProperty = feature.getProperty("Ocean");
}

      

Sự kiện nhấp vào hình học GeoJSON

Bạn có thể sử dụng GeoJsonLayer.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 tiêu đề 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("GeoJsonClick", "Feature clicked: ${feature.getProperty("title")}")
}

      

Java


// Set a listener for geometry clicked events.
layer.setOnFeatureClickListener(new Layer.OnFeatureClickListener() {
    @Override
    public void onFeatureClick(Feature feature) {
        Log.i("GeoJsonClick", "Feature clicked: " + feature.getProperty("title"));
    }
});

      

Tạo kiểu cho GeoJsonLayer và GeoJsonFeatures

Bạn có thể đặt kiểu mặc định cho GeoJsonLayer hoặc tạo kiểu cho từng đối tượng trong lớp.

Kiểu mặc định

Trong GeoJsonLayer, bạn có thể đặt kiểu mặc định cho bất kỳ điểm, chuỗi dòng nào và đa giác được thêm vào lớp. Kiểu mặc định chỉ được áp dụng nếu đối tượng không có tập hợp kiểu cho một trong hai hình học của đối tượng đó. Bất kỳ hạng nào những thay đổi bạn thực hiện đối với kiểu mặc định cũng sẽ được phản ánh trong tất cả các tính năng đang sử dụng kiểu mặc định.

Các bước để áp dụng kiểu mặc định như sau

  1. Truy xuất đối tượng kiểu mặc định có liên quan. Đối tượng này có thể là một trong GeoJsonPointStyle, GeoJsonLineStringStyle hoặc GeoJsonPolygonStyle.
  2. Áp dụng các tuỳ chọn bạn muốn cho kiểu.

Ví dụ: đoạn mã mẫu sau đây cho biết cách sửa đổi điểm mặc định giúp kéo các điểm bằng tiêu đề và đoạn trích.

Kotlin



val pointStyle = layer.defaultPointStyle
pointStyle.isDraggable = true
pointStyle.title = "Hello, World!"
pointStyle.snippet = "I am a draggable marker"

      

Java


GeoJsonPointStyle pointStyle = layer.getDefaultPointStyle();
pointStyle.setDraggable(true);
pointStyle.setTitle("Hello, World!");
pointStyle.setSnippet("I am a draggable marker");

      

Kiểu dành riêng cho GeoJsonFeature

Ngoài ra, bạn có thể tạo kiểu cho các đối tượng riêng lẻ trong lớp. Các bước để áp dụng kiểu trên GeoJsonFeature như sau.

  1. Tạo đối tượng kiểu có liên quan, đây có thể là GeoJsonPointStyle, GeoJsonLineStringStyle hoặc GeoJsonPolygonStyle.
  2. Áp dụng các tuỳ chọn bạn muốn cho kiểu.
  3. Truyền đối tượng kiểu vào phương thức phù hợp trên GeoJsonFeature. setPointStyle(), setLineStringStyle() hoặc setPolygonStyle().

Ví dụ: đây là cách tuỳ chỉnh kiểu chuỗi dòng cho một GeoJsonFeature để nút này có màu đỏ.

Kotlin



// Create a new feature containing a linestring
val lineStringArray: MutableList<LatLng> = ArrayList()
lineStringArray.add(LatLng(0.0, 0.0))
lineStringArray.add(LatLng(50.0, 50.0))
val lineString = GeoJsonLineString(lineStringArray)
val lineStringFeature = GeoJsonFeature(lineString, null, null, null)

// Set the color of the linestring to red
val lineStringStyle = GeoJsonLineStringStyle()
lineStringStyle.color = Color.RED

// Set the style of the feature
lineStringFeature.lineStringStyle = lineStringStyle

      

Java


// Create a new feature containing a linestring
List<LatLng> lineStringArray = new ArrayList<LatLng>();
lineStringArray.add(new LatLng(0, 0));
lineStringArray.add(new LatLng(50, 50));
GeoJsonLineString lineString = new GeoJsonLineString(lineStringArray);
GeoJsonFeature lineStringFeature = new GeoJsonFeature(lineString, null, null, null);

// Set the color of the linestring to red
GeoJsonLineStringStyle lineStringStyle = new GeoJsonLineStringStyle();
lineStringStyle.setColor(Color.RED);

// Set the style of the feature
lineStringFeature.setLineStringStyle(lineStringStyle);

      

Xem ứng dụng minh hoạ

Ví dụ về cách nhập tệp GeoJSON từ một URL và tạo một lớp với nó, hãy xem GeoJsonDemoActivity 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ạ.