- Wprowadzenie
- Dodawanie do mapy obiektu GeoJsonLayer
- Usuwanie obiektu GeoJsonLayer
- Dodawanie i usuwanie obiektu GeoJsonFeature
- Dostęp do obiektów GeoJsonFeatures i ich właściwości
- Określanie stylu obiektów GeoJsonLayer i GeoJsonFeatures
- Zobacz aplikację demonstracyjną
Wprowadzenie
GeoJSON to rozszerzenie formatu danych JSON reprezentujące dane geograficzne. Za pomocą tego narzędzia możesz przechowywać obiekty geograficzne w formacie GeoJSON i renderować je jako warstwę na mapie. Aby dodać lub usunąć dane GeoJSON do mapy i z niej, wywołaj odpowiednio addLayerToMap()
i removeLayerFromMap()
. Analogicznie możesz dodawać i usuwać poszczególne funkcje, wywołując metody addFeature()
i removeFeature()
oraz przekazując obiekt GeoJsonFeature
. Jeśli chcesz uzyskać dostęp do tych funkcji, możesz wywołać funkcję getFeatures()
, aby uzyskać iterację wszystkich obiektów
GeoJsonFeature
dodanych do warstwy.
Możesz też skonfigurować style domyślne, które będą stosowane do obiektów przed ich dodaniem do warstwy, wywołując atrybuty getDefaultPointStyle()
, getDefaultLineStringStyle()
lub
getDefaultPolygonStyle()
i ustawiając ich style.
Styl dla obiektu GeoJsonFeature
możesz też ustawić, wywołując obiekt setPointStyle()
, setLineStringStyle()
lub setPolygonStyle()
i przekazując odpowiedni obiekt stylu.
Dodaj GeoJsonLayer do swojej mapy
Aby dodać do mapy warstwę GeoJson, najpierw utwórz instancję klasy GeoJsonLayer. Istnieją 2 sposoby tworzenia instancji GeoJsonLayer.
Aby importować dane z JSONObject
, potrzebujesz:
GoogleMap
obiekt, w którym ma być renderowana warstwaJSONObject
zawierający dane GeoJSON, które zostaną dodane do warstwy
Java
JSONObject geoJsonData = // JSONObject containing the GeoJSON data GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);
Kotlin
val geoJsonData: JSONObject? = // JSONObject containing the GeoJSON data val layer = GeoJsonLayer(map, geoJsonData)
Aby importować dane z lokalnego pliku GeoJSON, potrzebujesz tych elementów:
GoogleMap
obiekt, w którym ma być renderowana warstwa- Plik zasobów lokalnych zawierający dane GeoJSON
- Obiekt
Context
, który jest wymagany do otwarcia pliku zasobów lokalnych
Java
GeoJsonLayer layer = new GeoJsonLayer(map, R.raw.geojson_file, context);
Kotlin
val layer = GeoJsonLayer(map, R.raw.geojson_file, context)
Po utworzeniu obiektu GeoJsonLayer
wywołaj metodę addLayerToMap()
, aby dodać zaimportowane dane do mapy:
Java
layer.addLayerToMap();
Kotlin
layer.addLayerToMap()
Usuwanie GeoJsonLayer
Załóżmy, że ta warstwa została dodana.
Java
JSONObject geoJsonData = // JSONObject containing the GeoJSON data GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);
Kotlin
val geoJsonData: JSONObject? = // JSONObject containing the GeoJSON data val layer = GeoJsonLayer(map, geoJsonData)
Aby wyczyścić GeoJsonLayer, wywołaj removeLayerFromMap()
Java
layer.removeLayerFromMap();
Kotlin
layer.removeLayerFromMap()
Dodawanie i usuwanie obiektu GeoJsonFeature
Obiekt w GeoJSON ma typ „feature”. Zawiera ona geometrię, element usługi i opcjonalnie ma ramkę ograniczającą lub identyfikator.
Obiekty GeoJsonFeature
można tworzyć pojedynczo i dodawać do GeoJsonLayer
.
Załóżmy, że masz utworzoną funkcję zawierającą punkt 0, 0, który ma 1 wpis we właściwościach i nie zawiera ramki ograniczającej.
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);
Kotlin
val point = GeoJsonPoint(LatLng(0.0, 0.0)) val properties = hashMapOf("Ocean" to "South Atlantic") val pointFeature = GeoJsonFeature(point, "Origin", properties, null)
Aby dodać obiekt do warstwy, wywołaj obiekt addFeature()
i przekaż obiekt, który chcesz dodać.
Java
layer.addFeature(pointFeature);
Kotlin
layer.addFeature(pointFeature)
Aby usunąć obiekt po dodaniu go do warstwy, wywołaj obiekt removeFeature()
i przekaż go w celu usunięcia.
Java
layer.removeFeature(pointFeature);
Kotlin
layer.removeFeature(pointFeature)
Dostęp do obiektów GeoJsonFeatures i ich właściwości
Aby uzyskać dostęp do wszystkich obiektów GeoJsonFeatures dodanych do warstwy, możesz wywołać metodę getFeatures()
na utworzonym obiekcie GeoJsonLayer
. Dzięki temu powtarza się parametr GeoJsonFeatures
, do którego możesz uzyskać dostęp w pętle.
Java
for (GeoJsonFeature feature : layer.getFeatures()) { // Do something to the feature }
Kotlin
for (feature in layer.features) { // Do something to the feature }
Użyj metod hasProperty()
i getProperty()
w połączeniu z metodą getFeatures()
, aby sprawdzić, czy każda przechowywana funkcja ma konkretną właściwość, i uzyskać do niej dostęp, jeśli istnieje.
Java
if (feature.hasProperty("Ocean")) { String oceanProperty = feature.getProperty("Ocean"); }
Kotlin
if (feature.hasProperty("Ocean")) { val oceanProperty = feature.getProperty("Ocean") }
Zdarzenia kliknięcia GeoJSON geometryczne
Za pomocą GeoJsonLayer.OnFeatureClickListener()
możesz nasłuchiwać zdarzeń kliknięcia w obiektach geometrycznych na mapie. Poniższy przykład rejestruje nazwę funkcji, gdy użytkownik ją kliknie:
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")); } });
Kotlin
// Set a listener for geometry clicked events. layer.setOnFeatureClickListener { feature -> Log.i("GeoJsonClick", "Feature clicked: ${feature.getProperty("title")}") }
Określanie stylu obiektów GeoJsonLayer i GeoJsonFeatures
Możesz ustawić style domyślne dla obiektów GeoJsonLayer lub styl poszczególnych funkcji w warstwie.
Style domyślne
W funkcji GeoJsonLayer możesz ustawić style domyślne dla wszystkich punktów, ciągów znaków i wielokątów dodanych do warstwy. Style domyślne są stosowane tylko wtedy, gdy dla obiektu nie określono stylu dla żadnej z jego geometrii. Wszelkie zmiany wprowadzone w stylu domyślnym będą odzwierciedlane we wszystkich funkcjach korzystających z tego stylu.
Aby zastosować styl domyślny:
- Pobierz odpowiedni obiekt stylu domyślnego: może to być obiekt
GeoJsonPointStyle
,GeoJsonLineStringStyle
lubGeoJsonPolygonStyle
. - Zastosuj odpowiednie opcje do stylu.
Na przykład przykładowy kod pokazuje, jak zmienić domyślny styl punktu, aby można było przeciągać punkty za pomocą tytułu i fragmentu kodu.
Java
GeoJsonPointStyle pointStyle = layer.getDefaultPointStyle(); pointStyle.setDraggable(true); pointStyle.setTitle("Hello, World!"); pointStyle.setSnippet("I am a draggable marker");
Kotlin
val pointStyle = layer.defaultPointStyle pointStyle.isDraggable = true pointStyle.title = "Hello, World!" pointStyle.snippet = "I am a draggable marker"
Style wybrane do obiektu GeoJsonFeature
Możesz też zmienić styl poszczególnych funkcji w warstwie. Aby zastosować styl do elementu GeoJsonFeature
:
- Utwórz odpowiedni obiekt stylu, którym może być
GeoJsonPointStyle
,GeoJsonLineStringStyle
lubGeoJsonPolygonStyle
. - Zastosuj odpowiednie opcje do stylu.
- Przekaż obiekt stylu do odpowiedniej metody w
GeoJsonFeature
, która jest typusetPointStyle()
,setLineStringStyle()
lubsetPolygonStyle()
.
Oto jak dostosować styl ciągu znaków w polu GeoJsonFeature
, aby jego kolor był czerwony.
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);
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
Zobacz wersję demonstracyjną aplikacji
Przykład importu pliku GeoJSON z adresu URL i tworzenia z niego warstwy znajdziesz w GeoJsonDemoActivity
aplikacji demonstracyjnej dostępnej w bibliotece narzędzi Z przewodnika po konfiguracji dowiesz się, jak uruchomić aplikację w wersji demonstracyjnej.