- Giới thiệu
- Thêm GeoJsonLayer vào bản đồ của bạn
- Xoá GeoJsonLayer
- Thêm và xoá GeoJsonFeature
- Truy cập vào GeoJsonFeatures và thuộc tính của chúng
- Tạo kiểu GeoJsonLayer và GeoJsonFeatures
- 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()
và 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()
và 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()
và 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
- 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ặcGeoJsonPolygonStyle
. - Á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.
- Tạo đối tượng kiểu có liên quan, đây có thể là
GeoJsonPointStyle
,GeoJsonLineStringStyle
hoặcGeoJsonPolygonStyle
. - Áp dụng các tuỳ chọn bạn muốn cho kiểu.
- Truyền đối tượng kiểu vào
phương thức phù hợp trên
GeoJsonFeature
.setPointStyle()
,setLineStringStyle()
hoặcsetPolygonStyle()
.
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ạ.