Geographie française en données spatiales

Par ces longues soirées (de confinement), c'est le moment de réviser sa géographie avec des requêtes SQL... Cette base de données recense les 36000 communes françaises, les départements et les régions. Je l'ai mise à jour à partir des données (publiques) de la poste et j'y ai ajouté les départements et les régions.

Petit jeu géographique :

  • Combien de communes s'appellent Pommiers en France, et combien y en a-t'il en Normandie ?
  • Quelle est la distance à vol d'oiseau entre Caen et Lisieux ?
  • Combien de départements (et combien de communes) comprend la région Normandie ?
  • Quelles est la région dessinée ici ?

 

Le backup de cette base "GeoFrance" est téléchargeable ici même. Attention, c'est une sauvegarde de SQL Server 2019 (issue de mon cluster sous Linux !), il faut donc une version 2019 (Windows ou Linux) pour le restaurer.

Pour les communes de France (hors outre-mer), les points géographiques sont renseignés. Les données spatiales sont donc utilisables, par exemple pour calculer la distance (à vol d'oiseau) entre Pont l'Evêque (Calvados) et Paris : 173,72 km

SELECT NomCommune, NomDepartement, NomRegion,
PointGeo.STDistance((SELECT PointGeo FROM dbo.GeoCommunesINSEE AS GCI2 WHERE GCI2.NomCommune = 'PARIS 01'))/1000 AS Distance_Paris
FROM dbo.GeoCommunesINSEE AS GCI
JOIN dbo.GeoDepartements AS GD ON GD.CodeDepartement = GCI.CodeDepartement
WHERE GCI.NomCommune = 'PONT L EVEQUE' AND GCI.CodeDepartement = '14'

On peut aussi s'en servir pour afficher la carte de France, par département, par grande région ou par région d'avant le regroupement de 2015. Pour afficher des régions, il suffit d'unir les départements :

SELECT CodeRegion,
       NomRegion,
       geography::UnionAggregate(Geo_Map) AS Geo_Map
FROM GeoDepartements
GROUP BY CodeRegion,NomRegion;

L'affichage d'une carte à partir de données spatiales est possible dans un rapport Reporting Services (et dans SSMS pour tester), mais c'est une fonctionnalité qui manque encore pour l'instant à Power BI, dommage...!