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 lokalizacji do mapy GeoJsonLayer
  3. Usuwanie elementu GeoJsonLayer
  4. Dodawanie i usuwanie elementu GeoJsonFeature
  5. Dostęp do obiektów GeoJsonFeatures i ich właściwości
  6. Zmienianie stylu obiektów GeoJsonLayer i GeoJsonFeatures
  7. Zobacz aplikację demonstracyjną

Wstęp

GeoJSON to rozszerzenie formatu danych JSON i reprezentuje 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(). Podobnie możesz dodawać i usuwać poszczególne funkcje, wywołując właściwości addFeature() i removeFeature() i 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ż skonfigurować style domyślne, które będą stosowane do funkcji, zanim zostaną dodane do warstwy, wywołując atrybuty getDefaultPointStyle(), getDefaultLineStringStyle() lub getDefaultPolygonStyle() i ustawiając opcje stylu dla każdego z nich. Możesz też ustawić styl dla pojedynczego elementu GeoJsonFeature, wywołując funkcję setPointStyle(), setLineStringStyle() lub setPolygonStyle() w elemencie 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 utworzenia instancji GeoJsonLayer.

Aby zaimportować z pliku JSONObject, musisz:

  • Obiekt GoogleMap, na 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 zaimportować dane z lokalnego pliku GeoJSON, musisz mieć:

  • Obiekt GoogleMap, na którym ma być renderowana warstwa
  • Plik lokalnego zasobu zawierający dane GeoJSON
  • Obiekt Context, który jest wymagany do otwarcia pliku lokalnego zasobu

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 funkcję addLayerToMap(), aby dodać zaimportowane dane do mapy:

Java


layer.addLayerToMap();

      

Kotlin


layer.addLayerToMap()

      

Usuwanie elementu GeoJsonLayer

Załóżmy, że masz tę warstwę.

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, zadzwoń do: removeLayerFromMap()

Java


layer.removeLayerFromMap();

      

Kotlin


layer.removeLayerFromMap()

      

Dodawanie i usuwanie elementu GeoJsonFeature

Element w pliku GeoJSON ma typ "feature". Zawiera ona geometrię, element usługi i opcjonalnie pole ograniczenia lub identyfikator.

Możesz tworzyć obiekty GeoJsonFeature pojedynczo i dodawać je do właściwości GeoJsonLayer.

Załóżmy, że masz utworzony obiekt zawierający punkt 0, 0 z 1 wpisem w jego właściwości i bez 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 element addFeature() i przekaż go.

Java


layer.addFeature(pointFeature);

      

Kotlin


layer.addFeature(pointFeature)

      

Aby usunąć obiekt po dodaniu go do warstwy, wywołaj element removeFeature() i przekaż go.

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ć getFeatures() w utworzonym obiekcie GeoJsonLayer. Spowoduje to zwrócenie iteracji GeoJsonFeatures, do której możesz uzyskać dostęp w pętli, jak pokazano poniżej.

Java


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

      

Kotlin


for (feature in layer.features) {
    // Do something to the feature
}

      

Korzystaj z metod hasProperty() i getProperty() w połączeniu z metodą getFeatures(), aby sprawdzić, czy każda przechowywana funkcja ma określoną właściwość, i otwórz ją, 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ęć GeoJSON

Za pomocą właściwości GeoJsonLayer.OnFeatureClickListener() możesz nasłuchiwać zdarzeń kliknięcia w funkcjach geometrycznych na mapie. Ten przykład rejestruje tytuł 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")}")
}

      

Dostosuj styl GeoJsonLayer i GeoJsonFeatures

Możesz ustawić domyślne style GeoJsonLayer lub poszczególne style w warstwie.

Style domyślne

W GeoJsonLayer możesz ustawić domyślne style wszystkich punktów, łańcuchów znaków i wielokątów dodanych do warstwy. Style domyślne są stosowane tylko wtedy, gdy obiekt nie ma ustawionego stylu dla żadnej z jego geometrii. Zmiany dotyczące stylu domyślnego będą odzwierciedlane we wszystkich funkcjach, które go używają.

Aby zastosować styl domyślny:

  1. Pobierz odpowiedni obiekt stylu domyślnego. Może to być GeoJsonPointStyle, GeoJsonLineStringStyle lub GeoJsonPolygonStyle.
  2. Zastosuj wybrane opcje do stylu.

Na przykład ten przykładowy kod pokazuje, jak zmienić domyślny styl punktu, który można przeciągnąć z tytułem i fragmentem 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 specyficzne dla funkcji GeoJsonFeature

Możesz też zmienić styl poszczególnych cech w warstwie. Aby zastosować styl do elementu GeoJsonFeature, wykonaj te czynności:

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

W ten sposób możesz dostosować styl ciągu znaków w polu GeoJsonFeature, tak 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 aplikację demonstracyjną

Importując plik GeoJSON z adresu URL i tworząc w nim warstwę, możesz zapoznać się z tagiem GeoJsonDemoActivity w aplikacji demonstracyjnej, która jest wysyłana z biblioteką narzędziową. Z przewodnika po konfiguracji dowiesz się, jak uruchomić aplikację w wersji demonstracyjnej.