Utilitaire GeoJSON de Google Maps pour Android

  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. Styliser le GeoJsonLayer et les 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 caractéristiques 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 caractéristiques individuelles 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 calque 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 GeoJsonLayer.

Pour l'importer à 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

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)
      

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

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

Java

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

Kotlin

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

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

Java

layer.addLayerToMap();
      

Kotlin

layer.addLayerToMap()
      

Supprimer le GeoJsonLayer

Supposons que vous avez ajouté ce calque

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)
      

Pour effacer le GeoJsonLayer, appelez removeLayerFromMap().

Java

layer.removeLayerFromMap();
      

Kotlin

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éé une caractéristique contenant un point à 0, 0 avec une entrée dans ses propriétés et pas de cadre de délimitation.

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)
      

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

Java

layer.addFeature(pointFeature);
      

Kotlin

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.

Java

layer.removeFeature(pointFeature);
      

Kotlin

layer.removeFeature(pointFeature)
      

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

Pour accéder à tous les éléments 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 pouvez accéder à l'aide d'une boucle "for-each", comme illustré ci-dessous.

Java

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

Kotlin

for (feature in layer.features) {
    // 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.

Java

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

Kotlin

if (feature.hasProperty("Ocean")) {
    val 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 :

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

Styliser les GeoJsonLayer et GeoJsonFeatures

Vous pouvez définir des styles par défaut pour un GeoJsonLayer ou styliser les caractéristiques individuelles du calque.

Styles par défaut

Dans un GeoJsonLayer, vous pouvez définir des styles par défaut pour tous les points, éléments 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, procédez comme suit :

  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 qui permettra de rendre les points déplaçables avec un titre et un extrait.

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"
      

Styles spécifiques d'un GeoJsonFeature

Vous pouvez également styliser des éléments géographiques individuels dans le calque. Pour appliquer un style à un GeoJsonFeature, procédez comme suit :

  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 correspondante sur GeoJsonFeature, qui sera setPointStyle(), setLineStringStyle() ou setPolygonStyle().

Par exemple, voici comment personnaliser le style d'un élément LineString d'un GeoJsonFeature, afin que sa couleur soit rouge.

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
      

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.