Narzędzie GeoJSON na Androida Map Google

Wybierz platformę: Android iOS JavaScript
  1. Wprowadzenie
  2. Dodawanie do mapy obiektu GeoJsonLayer
  3. Usuwanie GeoJsonLayer
  4. Dodawanie i usuwanie funkcji GeoJsonFeature
  5. Dostęp do GeoJsonFeatures i ich właściwości
  6. Określ styl obiektów GeoJsonLayer i GeoJsonFeatures
  7. 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 warstwa
  • JSONObject 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:

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

  1. Utwórz odpowiedni obiekt stylu. Może to być GeoJsonPointStyle, GeoJsonLineStringStyle lub GeoJsonPolygonStyle.
  2. Zastosuj odpowiednie opcje stylu.
  3. Przekaż obiekt stylu do odpowiedniej metody w obiekcie GeoJsonFeature. Jest to setPointStyle(), setLineStringStyle() lub setPolygonStyle().

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.