Narzędzie GeoJSON na Androida Map Google

Wybierz platformę: Android iOS JavaScript
  1. Wprowadzenie
  2. Dodaj GeoJsonLayer na mapie
  3. Usuń tag GeoJsonLayer
  4. Dodaj lub usuń GeoJsonFeature
  5. Dostęp do funkcji GeoJsonFeatures i ich właściwości
  6. Określ styl GeoJsonLayer GeoJsonFeatures
  7. Zobacz aplikację w wersji demonstracyjnej

Wprowadzenie

GeoJSON jest rozszerzeniem danych JSON. i reprezentuje dane geograficzne. Za pomocą tego narzędzia można przechowywać funkcji geograficznych w formacie GeoJSON i renderować je jako warstwę mapę. Aby dodać dane GeoJSON i z nich korzystać, wywołaj addLayerToMap() i removeLayerFromMap(). Podobna można dodawać i usuwać poszczególne funkcje, addFeature() i removeFeature() i zaliczenie: GeoJsonFeature obiekt. Aby uzyskać dostęp do tych funkcji, może wywołać funkcję 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, zanim zostaną zastosowane. została dodana do warstwy, wywołując funkcję getDefaultPointStyle(), getDefaultLineStringStyle() lub getDefaultPolygonStyle() i ustawianie opcji stylu w każdym z nich. Możesz też ustawić styl dla pojedynczej osoby, GeoJsonFeature, dzwoniąc do: setPointStyle(), setLineStringStyle() lub setPolygonStyle() w: i przekazywać odpowiednie obiekty stylu.

Dodaj GeoJsonLayer do swojej mapy

Aby dodać do mapy warstwę GeoJson, najpierw utwórz instancję warstwy GeoJsonLayer zajęcia. Istnieją 2 sposoby tworzenia instancji GeoJsonLayer.

Aby zaimportować dane z usługi JSONObject, potrzebne są:

  • GoogleMap obiekt, w którym ma zostać wyrenderowana warstwa
  • JSONObject zawierający dane GeoJSON, które należy dodać do warstwa

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ć dane z lokalnego pliku GeoJSON, potrzebujesz:

  • GoogleMap obiekt, w którym ma zostać wyrenderowana warstwa
  • Lokalny plik zasobów zawierający dane GeoJSON
  • Context obiekt wymagany do otwarcia zasobu lokalnego plik

Kotlin



val layer = GeoJsonLayer(map, R.raw.geojson_file, context)

      

Java


GeoJsonLayer layer = new GeoJsonLayer(map, R.raw.geojson_file, context);

      

Po utworzeniu funkcji GeoJsonLayer wywołaj addLayerToMap(), aby dodać zaimportowane dane do mapy:

Kotlin



layer.addLayerToMap()

      

Java


layer.addLayerToMap();

      

Usuwanie warstwy 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 usunąć GeoJsonLayer, wywołaj removeLayerFromMap()

Kotlin



layer.removeLayerFromMap()

      

Java


layer.removeLayerFromMap();

      

Dodawanie i usuwanie obiektu GeoJSON

Cecha w GeoJSON ma typ „feature”. Zawiera geometrię, element usługi i opcjonalnie ma ramkę ograniczającą lub identyfikator.

Możesz utworzyć GeoJsonFeature obiektów i je dodać do: GeoJsonLayer.

Załóżmy, że został przez Ciebie utworzony obiekt zawierający punkt 0, 0 i argument jeden wpis 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ć element do warstwy, wywołaj funkcję addFeature() i przekaż ją obiekt, który ma być dodany.

Kotlin



layer.addFeature(pointFeature)

      

Java


layer.addFeature(pointFeature);

      

Aby usunąć funkcję po dodaniu jej do warstwy, wywołaj removeFeature() i przekaż element do usunięcia.

Kotlin



layer.removeFeature(pointFeature)

      

Java


layer.removeFeature(pointFeature);

      

Dostęp do funkcji GeoJsonFeatures i ich właściwości

Aby uzyskać dostęp do wszystkich obiektów GeoJSON, które zostały dodane do warstwy, możesz Zadzwoń do firmy getFeatures() na urządzeniu GeoJsonLayer, które utworzone przez użytkowników. Spowoduje to zwrócenie iteracji o wartości GeoJsonFeatures do których można uzyskać dostęp za pomocą pętli for, 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: w połączeniu z metodą getFeatures(), aby sprawdzić, czy każdy zapisany obiekt ma określoną właściwość i uzyskuje 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 geometrycznego GeoJSON

Za pomocą GeoJsonLayer.OnFeatureClickListener() możesz nasłuchiwać zdarzeń kliknięcia na stronie obiektów geometrycznych na mapie. W poniższym przykładzie zapisywany jest tytuł funkcji, gdy użytkownik kliknie tę funkcję:

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ślanie stylu obiektu GeoJsonLayer i GeoJsonFeatures

Można ustawić style domyślne dla warstwy geograficznej lub określić styl poszczególnych obiektów w warstwie.

Style domyślne

W funkcji 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. Dowolne zmiany wprowadzone w stylu domyślnym zostaną również odzwierciedlone we wszystkich elementach korzystających ze stylu domyślnego.

Aby zastosować styl domyślny, wykonaj następujące czynności:

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

Na przykład ten przykładowy kod pokazuje, jak zmienić punkt domyślny stylu, w którym punkty można przeciągać z tytułem i krótkim opisem.

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 typowe dla obiektu GeoJSON

Możesz też określić styl poszczególnych elementów w warstwie. Czynności, które należy wykonać, zastosować styl do elementów typu GeoJsonFeature w następujący sposób.

  1. Utwórz odpowiedni obiekt stylu. Może to być GeoJsonPointStyle, GeoJsonLineStringStyle lub GeoJsonPolygonStyle.
  2. Zastosuj odpowiednie opcje do stylu.
  3. Przekaż obiekt stylu do odpowiednią metodę GeoJsonFeature, która zostanie setPointStyle(), setLineStringStyle() lub setPolygonStyle()

W ten sposób można np. dostosować styl ciągu znaków do wiersza GeoJsonFeature na 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ę w wersji demonstracyjnej

Przykład importowania pliku GeoJSON z adresu URL i tworzenia warstwy obejrzyj GeoJsonDemoActivity w aplikacji w wersji demonstracyjnej z biblioteką narzędziową. Z przewodnika konfiguracji dowiesz się, aby uruchomić aplikację w wersji demonstracyjnej.