Narzędzie GeoJSON w Mapach Google na Androida

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Wybierz platformę: Android iOS JavaScript
  1. Wprowadzenie
  2. Dodawanie do mapy obiektu GeoJsonLayer
  3. Usuwanie obiektu GeoJsonLayer
  4. Dodawanie i usuwanie obiektu GeoJsonFeature
  5. Dostęp do obiektów GeoJsonFeatures i ich właściwości
  6. Określanie stylu obiektów GeoJsonLayer i GeoJsonFeatures
  7. 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 warstwa
  • JSONObject 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:

  1. Pobierz odpowiedni obiekt stylu domyślnego: może to być obiekt GeoJsonPointStyle, GeoJsonLineStringStyle lub GeoJsonPolygonStyle.
  2. 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:

  1. Utwórz odpowiedni obiekt stylu, którym może być GeoJsonPointStyle, GeoJsonLineStringStyle lub GeoJsonPolygonStyle.
  2. Zastosuj odpowiednie opcje do stylu.
  3. Przekaż obiekt stylu do odpowiedniej metody w GeoJsonFeature, która jest typu setPointStyle(), setLineStringStyle() lub setPolygonStyle().

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.