Utilitaire GeoJSON de Google Maps pour 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 géographiques 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 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éé 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.

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 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 transmettez l'élément géographique à supprimer.

Java


layer.removeFeature(pointFeature);

      

Kotlin


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.

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 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, é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 afin de pouvoir déplacer les points 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 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 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.