12/08/2018, 15:00

Google Maps Android GeoJSON Utility

Giới thiệu GeoJSON là một phần mở rộng của định dạng dữ liệu JSON và là kiểu dữ liệu địa lý. Sử dụng tiện ích này, bạn có thể lưu trữ các đặc điểm địa lý theo định dạng GeoJSON và biến chúng thành một layer trên bản đồ. Để thêm và xóa dữ liệu GeoJSON của bạn từ bản đồ, hãy gọi addLayerToMap () và ...

Giới thiệu GeoJSON là một phần mở rộng của định dạng dữ liệu JSON và là kiểu dữ liệu địa lý. Sử dụng tiện ích này, bạn có thể lưu trữ các đặc điểm địa lý theo định dạng GeoJSON và biến chúng thành một layer trên bản đồ. Để thêm và xóa dữ liệu GeoJSON của bạn từ bản đồ, hãy gọi addLayerToMap () và removeLayerFromMap () tương ứng. Tương tự, bạn có thể thêm và xóa từng đối tượng bằng cách gọi hàm addFeature () và removeFeature () và thông qua đối tượng GeoJsonFeature. Nếu sau này bạn muốn truy cập, bạn có thể gọi getFeatures () để có được một iterable của tất cả các đối tượng GeoJsonFeature đã được thêm vào layer. Bạn cũng có thể đặt các kiểu mặc định sẽ được áp dụng cho các tính năng trước khi chúng được thêm vào layer, bằng cách gọi hàm getDefaultPointStyle (), getDefaultLineStringStyle () hoặc getDefaultPolygonStyle () và mỗi hàm sẽ có 1 kiểu tùy chọn. Ngoài ra, bạn có thể thiết lập kiểu cho một cá nhân GeoJsonFeature bằng cách gọi setPointStyle (), setLineStringStyle () hoặc setPolygonStyle () với các tính năng và các kiểu đối tượng thíc hợp.

Thêm một GeoJsonLayer vào Map

Để thêm một GeoJson layer đến Map, trước tiên tạo một instance của một GeoJsonLayer class. Có hai cách để làm việc này:

  1. Đưa vào từ một JSONObject, bạn cần:
    • Đối tượng GoogleMap nơi mà layer được render.
      
    • JSONObject chứa dữ liệu GeoJSON được bổ sung vào layer.
      
    GeoJsonLayer layer = new GeoJsonLayer(getMap(), geoJsonData);
    
  2. Đưa vào từ local GeoJSON file bạn cần:
    • Đối tượng GoogleMap nơi mà layer được render.
      
    • Tập tin resource local chứa dữ liệu GeoJSON.
      
    • Đối tượng Context, cái mà được yêu cầu mở local resource file.
      
    GeoJsonLayer layer = new GeoJsonLayer(getMap(), R.raw.geoJsonFile,
    getApplicationContext());
    

Sau khi bạn đã tạo GeoJsonLayer, gọi addLayerToMap() để thêm dữ liệu được nhập đến map:

layer.addLayerToMap();

Remove the GeoJsonLayer

Giả sử bạn đã thêm layer này

GeoJsonLayer layer = new GeoJsonLayer(getMap(), geoJsonData);

Để clear GeoJsonLayer, gọi removeLayerFromMap()

layer.removeLayerFromMap();

Thêm và remove một GeoJsonFeature

Một tính năng trong GeoJSON có kiểu "feature". Nó chứa một hình học, một thuộc tính member và tùy chọn có một hộp bao quanh hoặc một id. Bạn có thể tự tạo các đối tượng GeoJsonFeature, và thêm chúng vào GeoJsonLayer. Giả sử rằng bạn đã tạo một tính năng có chứa một điểm tại 0, 0 với một mục trong thuộc tính của nó và không có hộp bao quanh (bounding box)

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

Để thêm tính năng cho layer, gọi addFeature() và truyền dữ liệu vào đó

layer.addFeature(pointFeature);

Để remove đi, bạn cũng làm tương tự:

layer.removeFeature(pointFeature);

Truy cập GeoJsonFeatures và các thuộc tính của chúng Để truy cập vào GeoJsonFeatures đã được thêm vào layer, bạn có thể gọi phương thức getFeatures() trên GeoJsonLayer đã được tạo. Sẽ trả lại một iterable của GeoJsonFeatures, bạn có thể truy cập sử dụng cho mỗi vòng lặp được hiển thị bên dưới.

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

Sử dụng phương thức hasProperty() và getProperty() kết hợp với phương thức getFeatures() để kiểm tra mỗi feature được lưu lại có thuộc tính cụ thể và truy cập vào nếu nó có.

GeoJsonPoint point = new Point(new LatLng(0, 0));
HashMap<String, String> properties = new HashMap<String, String>();
properties.put(“Ocean”, “South Atlantic”);
GeoJsonFeature pointFeature = new GeoJsonFeature(point, “Origin”, properties, null);
for (GeoJsonFeature feature : layer.getFeatures()) {
  if (feature.hasProperty(“Ocean”)) {
    String oceanProperty = feature.getProperty(“Ocean”);
  }
}

GeoJSON Geometry Click Events Bạn có thể sử dụng GeoJsonLayer.OnFeatureClickListener() để lắng nghe đối với mỗi một sự kiện click trên geometry features trên map. theo dõi ví dụ Log sau để biết được sự kiên khi người dùng click:

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

Style the GeoJsonLayer and GeoJsonFeatures

Bạn có thể thiết lập các kiểu mặc định cho một GeoJsonLayer, hoặc kiểu các tính năng riêng lẻ trong layer. 1. Default Styles Trong GeoJsonLayer, bạn có thể đặt các kiểu mặc định cho bất kỳ điểm, đường kẻ và đa giác nào được thêm vào layer. Default Styles chỉ được áp dụng nếu đối tượng địa lý không có kiểu được đặt cho một trong hai hình học của nó. Mọi thay đổi bạn thực hiện trên 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: * Lấy ra các kiểu đối tượng mặc định, cái này có thể là một GeoJsonPointStyle, một GeoJsonLineStringStyle hoặc một GeoJsonPolygonStyle. * Áp dụng các mong muốn tuỳ chọn của bạn theo style. Ví dụ, mẫu sau đây cho thấy làm thế nào để thay đổi kiểu điểm mặc định(default point style) cái mà sẽ tạo ra draggable với một tiêu đề và đoạn trích.

GeoJsonPointStyle pointStyle = layer.getDefaultPointStyle();
pointStyle.setDraggable(true);
pointStyle.setTitle(“Hello, World!”);
pointStyle.setSnippet(“I am a draggable marker”);
  1. Style cụ thể cho một GeoJsonFeature Ngoài ra, bạn có thể tùy chỉnh các tính năng riêng lẻ trong layer. Các bước để áp dụng một style trên GeoJsonFeature như sau:

    • Tạo đối tượng kiểu có liên quan, đây có thể là một GeoJsonPointStyle, GeoJsonLineStringStyle hoặc GeoJsonPolygonStyle
    • Áp dụng các lựa chọn mong muốn của bạn theo style.
    • Truyền đối tượng kiểu đến phương thức liên quan trên GeoJsonFeature, nó sẽ là setPointStyle (), setLineStringStyle () hoặc setPolygonStyle ()

    Ví dụ: Làm thế nào để tuỳ chỉnh cho linestring style cho một GeoJsonFeature là màu đỏ.

        // Create a new feature containing a linestring
        ArrayList<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);

Bài viết được dịch từ Maps Android API/Google Maps Android GeoJSON Utility

0