• Webmestre
  • , modifié le 

En support des articles et rubriques de type "lieu" , Biodiv gère un format de fichier qui lui est propre, et dont l’extension est .lieu. Ce format a pour objectif de recevoir un polygone unique qui soit ensuite utilisé comme périmètre de recherche d’observations dans la base.

Le format .lieu

Ce format spécifique est en fait celui d’un fichier Geojson [1] répondant à un ensemble de contraintes supplémentaires :

  • l’objet FeatureCollection n’est pas supporté : le fichier doit contenir un unique Feature
  • la géométrie du Feature doit être de type Polygon uniquement : les géométries MultiPolygon ne sont pas supportées.
  • le polygone ne doit pas être extrudé (il ne doit pas comprendre de ’trou’)
  • une "bounding box" (bbox) doit être présente [2]
  • le système de coordonnées (CRS) doit être urn:ogc:def:crs:OGC::CRS84 (ESPG:4326)
  • la présence d’une propriété titre est recommandée [3].
  • une propriété popupContent peut figurer dans le fichier. Son contenu doit alors être un fragment de HTML bien formé, qui sera affiché dans les popup des cartes d’articles lieu.
  • d’autres propriétés peuvent figurer dans le fichier, mais n’auront pas d’incidence sur les traitements effectués par Biodiv
  • l’encodage du fichier doit être UTF-8 et l’extension doit être .lieu

Exemple

Le fichier lieu ci-dessous correspond à la commune de Balma. On notera que les sommets du polygone comprennent chacun 3 valeurs : longitude, latitude, altitude. L’altitude n’est pas prise en compte et peut être omise.

{ 
	"type": "Feature", 
	"properties": { 
		"titre": "Commune de Balma", 
		"Insee": 31044
		}, 
	"bbox": [ 
                     1.47983945951099, 43.579820261954801, 
                     1.52753157897005, 43.641868566216701 
                     ],
	"geometry": { 
		"type": "Polygon", 
		"coordinates": [ [ 
			[ 1.48992352114445, 43.632958675437898, 0.0 ], 
			[ 1.49053347960368, 43.6331183976068, 0.0 ], 
			[ 1.490739031061, 43.633228741641901, 0.0 ], 
			...
			] ] 
		} 
}

Créer un fichier lieu en dehors de Biodiv

Les format lieu étant un format textuel, il peut assez simplement être créé manuellement ou par programme, si la géométrie n’est pas trop compliquée. On pourra également le générer en effectuant un post-traitement sur un fichier Geojson obtenu à l’aide d’un système d’information géographique tel que QGIS. Dans le second cas, on veillera a générer un Geojson en géométrie simple, c’est à dire dans un mode qui transforme tous les multi-polygones en polygones simples.

Le post traitement d’un Géojson consiste principalement à se débarrasser de l’enveloppe FeatureCollection et à ne garder que le feature correspondant au premier [4] rencontré. Il faut également s’assurer de la présence de la bounding box.

A titre d’illustration, on trouvera ci-dessous un filtre jq [5] effectuant ce type de traitement.

# collection2lieu.jq
#
# Traite un Geojson contenant une feature collection
# En extrait le premier (.[0]) polygone et le transforme en fichier lieu. 
# La BBOX est mise à jour ou insérée
# Le .titre est hérité du .name de la FeatureCollection 
#    s'il n'est pas défini localement

(.name // "unknown") as $titre |
[.features[]] 
	| map(select(.geometry.type == "Polygon")) | .[0] | . 
	|= (
		(.geometry.coordinates[0]|map(first)) as $lats |
		(.geometry.coordinates[0]|map(nth(1))) as $lons |
		.bbox //= [($lons|min),($lats|min),($lons|max),($lats|max)] |
		.properties.titre //= $titre
		)

Chargement du lieu sur le site

Une fois le fichier lieu créé, avec la bonne extension, il peut être attaché à un article (ou une rubrique) de type lieu depuis l’espace privé de SPIP en le chargeant sur le site, comme on le ferait avec n’importe quel autre type de document. Il est important de donner un titre au document SPIP (qui peut être différent de la propriété titre du fichier lieu) : c’est le titre SPIP qui sera affiché comme entrée de légende sur la carte (la propriété du fichier lieu n’est utilisée que par la popup).

Transformer un fichier .lieu en fichier .geojson

Par construction, un fichier lieu répond aux spécifications Geojson. Pour effectuer la transformation, il suffit donc de changer l’extension .lieu en .geojson !

Notes:

[1Geojson est une norme de fichier destinée à la représentation d’objets géographiques. Issue du web, elle est elle-même basée sur le format JSON, et utilise les coordonnées GPS.

[2Il s’agit d’un tableau de 4 valeurs donnant les latitudes et longitudes minimales et maximales du polygone, dans l’ordre min(lon), min(lat), max(lon), max(lat)

[3Si elle est présente, cette propriété sera affichée dans les popup des cartes des rubriques lieu

[4L’exemple du filtre jq ci-dessous extrait le premier polygone (rang 0). On obtiendrait le polygone N+1 (rang N) en remplaçant | .[0] | par | .[N] |

[5jq est un utilitaire permettant de filtrer et de recomposer des fichiers JSON à l’aide d’une syntaxe puissante.