- Wprowadzenie
- Dodawanie do mapy obiektu GeoJsonLayer
- Usuwanie GeoJsonLayer
- Dodawanie i usuwanie funkcji GeoJsonFeature
- Dostęp do GeoJsonFeatures i ich właściwości
- Określ styl obiektów GeoJsonLayer i GeoJsonFeatures
- Zobacz aplikację demonstracyjną
Wstęp
GeoJSON to rozszerzenie formatu danych JSON, które reprezentuje dane geograficzne. Za pomocą tego narzędzia możesz przechowywać cechy geograficzne w formacie GeoJSON i renderować je jako warstwę na mapie. Aby dodawać dane GeoJSON do mapy i usuwać je z mapy, wywołaj odpowiednio addLayerToMap()
i removeLayerFromMap()
. Możesz też dodawać i usuwać poszczególne cechy, wywołując addFeature()
i removeFeature()
oraz przekazując obiekt GeoJsonFeature
. Jeśli chcesz uzyskać dostęp do tych funkcji, możesz wywołać getFeatures()
, aby uzyskać iterację wszystkich obiektów
GeoJsonFeature
dodanych do warstwy.
Możesz też ustawić style domyślne, które będą stosowane do obiektów przed ich dodaniem do warstwy. Aby to zrobić, wywołaj getDefaultPointStyle()
, getDefaultLineStringStyle()
lub
getDefaultPolygonStyle()
i ustaw opcje stylu dla każdej z nich.
Możesz też ustawić styl dla pojedynczego obiektu GeoJsonFeature
, wywołując metodę setPointStyle()
, setLineStringStyle()
lub setPolygonStyle()
i przekazując odpowiedni obiekt stylu.
Dodawanie GeoJsonLayer do mapy
Aby dodać do mapy warstwę GeoJson, najpierw utwórz instancję klasy GeoJsonLayer. Istnieją 2 sposoby tworzenia instancji GeoJsonLayer.
Aby zaimportować dane z JSONObject
, musisz mieć:
GoogleMap
obiekt, w którym ma zostać wyrenderowana warstwaJSONObject
zawierające dane GeoJSON, które mają zostać dodane do warstwy
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);
Aby zaimportować z lokalnego pliku GeoJSON:
GoogleMap
obiekt, w którym ma zostać wyrenderowana warstwa- Lokalny plik zasobów zawierający dane GeoJSON
- Obiekt
Context
wymagany do otwierania lokalnego pliku zasobów
Kotlin
val layer = GeoJsonLayer(map, R.raw.geojson_file, context)
Java
GeoJsonLayer layer = new GeoJsonLayer(map, R.raw.geojson_file, context);
Po utworzeniu obiektu GeoJsonLayer
wywołaj addLayerToMap()
, aby dodać zaimportowane dane na mapę:
Kotlin
layer.addLayerToMap()
Java
layer.addLayerToMap();
Usuwanie GeoJsonLayer
Załóżmy, że ta warstwa została dodana
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);
Aby wyczyścić warstwę GeoJsonLayer, zadzwoń pod numer removeLayerFromMap()
Kotlin
layer.removeLayerFromMap()
Java
layer.removeLayerFromMap();
Dodawanie i usuwanie GeoJsonFeature
Funkcja w GeoJSON ma typ „feature”. Zawiera geometrię, element właściwości oraz opcjonalnie ramkę ograniczającą lub identyfikator.
Możesz tworzyć obiekty GeoJsonFeature
pojedynczo i dodawać je do GeoJsonLayer
.
Załóżmy, że masz utworzoną funkcję zawierającą punkt w punkcie 0, 0 z 1 wpisem we właściwościach i bez ramki ograniczającej.
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);
Aby dodać obiekt do warstwy, wywołaj addFeature()
i przekaż obiekt do dodania.
Kotlin
layer.addFeature(pointFeature)
Java
layer.addFeature(pointFeature);
Aby usunąć cechę po jej dodaniu do warstwy, wywołaj removeFeature()
i przekaż obiekt do usunięcia.
Kotlin
layer.removeFeature(pointFeature)
Java
layer.removeFeature(pointFeature);
Dostęp do GeoJsonFeatures i ich właściwości
Aby uzyskać dostęp do wszystkich funkcji GeoJsonFeature, które zostały dodane do warstwy, możesz wywołać getFeatures()
w utworzonym GeoJsonLayer
. Zwróci on iterację typu GeoJsonFeatures
, do której możesz uzyskać dostęp za pomocą pętli for-każdej, jak pokazano poniżej.
Kotlin
for (feature in layer.features) { // Do something to the feature }
Java
for (GeoJsonFeature feature : layer.getFeatures()) { // Do something to the feature }
Użyj metod hasProperty()
i getProperty()
w połączeniu z metodą getFeatures()
, aby sprawdzić, czy każda przechowywana cecha ma określoną właściwość, i uzyskać do niej dostęp, jeśli istnieje.
Kotlin
if (feature.hasProperty("Ocean")) { val oceanProperty = feature.getProperty("Ocean") }
Java
if (feature.hasProperty("Ocean")) { String oceanProperty = feature.getProperty("Ocean"); }
Zdarzenia kliknięcia w GeoJSON
Za pomocą funkcji GeoJsonLayer.OnFeatureClickListener()
możesz wykrywać zdarzenia kliknięcia dotyczące obiektów geometrycznych na mapie. W tym przykładzie rejestrujemy nazwę funkcji, gdy użytkownik ją kliknie:
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")); } });
Określ styl obiektów GeoJsonLayer i GeoJson
Możesz ustawić style domyślne dla warstwy GeoJsonLayer lub zmienić styl poszczególnych obiektów w warstwie.
Style domyślne
W przypadku warstwy GeoJsonLayer można ustawić style domyślne dla dowolnych punktów, ciągów linii i wielokątów dodanych do warstwy. Style domyślne są stosowane tylko wtedy, gdy obiekt nie ma ustawionego stylu dla żadnej ze swoich geometrii. Wszelkie zmiany, które wprowadzisz w stylu domyślnym, będą też odzwierciedlone we wszystkich funkcjach, w których jest używany.
Aby zastosować styl domyślny, wykonaj te czynności:
- Pobierz odpowiedni obiekt stylu domyślnego. Może to być obiekt
GeoJsonPointStyle
,GeoJsonLineStringStyle
lubGeoJsonPolygonStyle
. - Zastosuj odpowiednie opcje stylu.
Na przykład ten przykładowy kod pokazuje, jak zmienić domyślny styl punktu, aby umożliwić przeciąganie punktów z tytułem i fragmentem kodu.
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");
Style specyficzne dla funkcji GeoJson
Możesz też zmienić styl poszczególnych obiektów w warstwie. Aby zastosować styl do elementu GeoJsonFeature
, wykonaj te czynności.
- Utwórz odpowiedni obiekt stylu. Może to być
GeoJsonPointStyle
,GeoJsonLineStringStyle
lubGeoJsonPolygonStyle
. - Zastosuj odpowiednie opcje stylu.
- Przekaż obiekt stylu do odpowiedniej metody w obiekcie
GeoJsonFeature
. Jest tosetPointStyle()
,setLineStringStyle()
lubsetPolygonStyle()
.
Poniżej dowiesz się na przykład, jak dostosować styl ciągu znaków w elemencie GeoJsonFeature
tak, aby jego kolor był czerwony.
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);
Zobacz aplikację demonstracyjną
Aby zobaczyć przykład importowania pliku GeoJSON z adresu URL i utworzenia za jego pomocą warstwy, przyjrzyj się GeoJsonDemoActivity
w aplikacji demonstracyjnej, która zawiera bibliotekę narzędziową. Z przewodnika po konfiguracji dowiesz się, jak uruchomić aplikację w wersji demonstracyjnej.