- Introduction
- Ajouter un GeoJsonLayer à votre carte
- Supprimer le GeoJsonLayer
- Ajouter et supprimer un GeoJsonFeature
- Accéder aux GeoJsonFeatures et à leurs propriétés
- Appliquer un style au GeoJsonLayer et aux GeoJsonFeatures
- 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 :
- Récupérez l'objet de style par défaut approprié. Il peut s'agir d'un
GeoJsonPointStyle
, d'unGeoJsonLineStringStyle
ou d'unGeoJsonPolygonStyle
. - 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
:
- Créez l'objet de style concerné (il peut s'agir d'un
GeoJsonPointStyle
, d'unGeoJsonLineStringStyle
ou d'unGeoJsonPolygonStyle
). - Appliquez les options souhaitées au style.
- Transmettez l'objet de style à la méthode appropriée sur
GeoJsonFeature
, qui peut êtresetPointStyle()
,setLineStringStyle()
ousetPolygonStyle()
.
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.