Utilitaire GeoJSON Google Maps Android

Sélectionnez une plate-forme : Android iOS JavaScript
  1. Introduction
  2. Ajouter un GeoJsonLayer à votre carte
  3. Supprimer le GeoJsonLayer
  4. Ajouter et supprimer un GeoJsonFeature
  5. Accéder aux GeoJsonFeatures et à leurs propriétés
  6. Appliquer un style au GeoJsonLayer et aux GeoJsonFeatures
  7. Voir l'application de démonstration

Introduction

GeoJSON est une extension du format de données JSON et représente des données géographiques. Cet utilitaire permet de stocker des éléments géographiques au format GeoJSON et d'en effectuer le rendu sous forme de calque superposé à la carte. Pour ajouter des données GeoJSON à la carte et les supprimer, appelez respectivement addLayerToMap() et removeLayerFromMap(). De même, vous pouvez ajouter et supprimer des éléments individuels en appelant addFeature() et removeFeature() et en transmettant un objet GeoJsonFeature. Pour accéder aux éléments géographiques, vous pouvez appeler getFeatures() pour obtenir un itérable de tous les objets GeoJsonFeature qui ont été ajoutés au calque.

Vous pouvez également définir des styles par défaut à appliquer aux éléments géographiques avant qu'ils soient ajoutés à la carte, en appelant getDefaultPointStyle(), getDefaultLineStringStyle() ou getDefaultPolygonStyle() et en définissant les options de style pour chacun. Vous avez également la possibilité de définir le style d'un GeoJsonFeature individuel en appelant setPointStyle(), setLineStringStyle() ou setPolygonStyle() sur l'élément géographique et en transmettant l'objet de style concerné.

Ajouter un GeoJsonLayer à votre carte

Pour ajouter un calque GeoJson à votre carte, vous devez d'abord créer une instance de la classe GeoJsonLayer. Il existe deux manières d'instancier le GeoJsonLayer.

Pour importer les données à partir d'un JSONObject, vous avez besoin des éléments suivants :

  • Un objet GoogleMap dans lequel le calque doit être affiché
  • Un JSONObject contenant les données GeoJSON à ajouter au calque

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);

      

Pour importer les données à partir d'un fichier GeoJSON local, vous avez besoin des éléments suivants :

  • Un objet GoogleMap dans lequel le calque doit être affiché
  • Un fichier de ressources local contenant les données GeoJSON
  • Un objet Context, nécessaire pour ouvrir un fichier de ressources local

Kotlin



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

      

Java


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

      

Après avoir créé le GeoJsonLayer, appelez addLayerToMap() pour ajouter les données importées à la carte :

Kotlin



layer.addLayerToMap()

      

Java


layer.addLayerToMap();

      

Supprimer le calque GeoJsonLayer

Supposons que vous ayez ajouté ce calque :

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);

      

Pour supprimer le calque GeoJsonLayer, appelez removeLayerFromMap().

Kotlin



layer.removeLayerFromMap()

      

Java


layer.removeLayerFromMap();

      

Ajouter et supprimer un GeoJsonFeature

Dans GeoJSON, un élément géographique a le type "feature". Il contient une géométrie, une propriété et éventuellement un cadre de délimitation ou un identifiant.

Vous pouvez créer des objets GeoJsonFeature individuellement et les ajouter au GeoJsonLayer.

Imaginons que vous avez créé un élément géographique contenant un point à 0, 0 avec une entrée dans ses propriétés et pas de cadre de délimitation.

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);

      

Pour ajouter l'élément géographique au calque, appelez addFeature() et spécifiez l'élément géographique à ajouter.

Kotlin



layer.addFeature(pointFeature)

      

Java


layer.addFeature(pointFeature);

      

Pour supprimer un élément géographique après l'avoir ajouté au calque, appelez removeFeature() et spécifiez l'élément géographique à supprimer.

Kotlin



layer.removeFeature(pointFeature)

      

Java


layer.removeFeature(pointFeature);

      

Accéder aux GeoJsonFeatures et à leurs propriétés

Pour accéder à tous les GeoJsonFeatures ajoutés au calque, vous pouvez appeler getFeatures() sur le GeoJsonLayer que vous avez créé. Cela renverra un itérable de GeoJsonFeatures auxquels vous pourrez accéder à l'aide d'une boucle "for-each", comme illustré ci-dessous.

Kotlin



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

      

Java


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

      

Utilisez les méthodes hasProperty() et getProperty() conjointement avec la méthode getFeatures() pour vérifier si chaque élément géographique stocké possède une propriété particulière et pour y accéder le cas échéant.

Kotlin



if (feature.hasProperty("Ocean")) {
    val oceanProperty = feature.getProperty("Ocean")
}

      

Java


if (feature.hasProperty("Ocean")) {
    String oceanProperty = feature.getProperty("Ocean");
}

      

Événements de clic sur la géométrie GeoJSON

Vous pouvez utiliser GeoJsonLayer.OnFeatureClickListener() pour écouter les événements de clic sur les éléments géométriques de la carte. L'exemple suivant enregistre le titre d'un élément géographique lorsque l'utilisateur clique dessus :

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"));
    }
});

      

Appliquer un style aux GeoJsonLayer et aux GeoJsonFeatures

Vous pouvez définir des styles par défaut pour un GeoJsonLayer ou appliquer un style à chaque élément géographique du calque.

Styles par défaut

Dans un GeoJsonLayer, vous pouvez définir des styles par défaut pour tous les points, objets LineString et polygones ajoutés au calque. Les styles par défaut ne sont appliqués que si l'élément géographique n'a pas de style défini pour l'une de ces géométries. Toutes les modifications apportées au style par défaut s'appliqueront également à tous les éléments géographiques qui utilisent le style par défaut.

Pour appliquer un style par défaut :

  1. Récupérez l'objet de style par défaut approprié. Il peut s'agir d'un GeoJsonPointStyle, d'un GeoJsonLineStringStyle ou d'un GeoJsonPolygonStyle.
  2. Appliquez les options souhaitées au style.

Par exemple, l'exemple de code suivant montre comment modifier le style de point par défaut afin de pouvoir déplacer les points avec un titre et un extrait.

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");

      

Styles spécifiques d'un GeoJsonFeature

Vous pouvez également appliquer un style à des éléments géographiques individuels dans le calque. Pour appliquer un style à un GeoJsonFeature :

  1. Créez l'objet de style concerné (il peut s'agir d'un GeoJsonPointStyle, d'un GeoJsonLineStringStyle ou d'un GeoJsonPolygonStyle).
  2. Appliquez les options souhaitées au style.
  3. Transmettez l'objet de style à la méthode appropriée sur GeoJsonFeature, qui peut être setPointStyle(), setLineStringStyle() ou setPolygonStyle().

Par exemple, voici comment personnaliser le style d'objet LineString d'un GeoJsonFeature pour qu'il soit de couleur rouge.

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);

      

Voir l'application de démonstration

Pour savoir comment importer un fichier GeoJSON à partir d'une URL et créer un calque avec ce fichier, consultez GeoJsonDemoActivity dans l'application de démonstration fournie avec la bibliothèque d'utilitaires. Le guide de configuration vous explique comment exécuter l'application de démonstration.