Skip to content

Instantly share code, notes, and snippets.

@Tristramg
Created April 12, 2023 14:31
Show Gist options
  • Save Tristramg/b6859de2d1d83d194731720c66004498 to your computer and use it in GitHub Desktop.
Save Tristramg/b6859de2d1d83d194731720c66004498 to your computer and use it in GitHub Desktop.
Calcul du niveau d’enclave des communes en France
# On importe le tracé des communes dans la base postgres
# Source des données https://geoservices.ign.fr/adminexpress
# -I pour créer un indexe (ça premet de gagner un peu de temps au moment de croiser les données)
# -D pour le format dump, pour que ça aille plus vite
# -s 2154 pour préciser que les données sont projetée en Lambert 93 (même si par la suite ça n’a pas servi comme précision)
shp2pgsql -s 2154 -I -D ADMIN-EXPRESS_3-1__SHP_LAMB93_FXX_2023-03-20/ADMIN-EXPRESS/1_DONNEES_LIVRAISON_2023-03-20/ADE_3-1_SHP_LAMB93_FXX/COMMUNE.shp communes | psql
# Idem pour les côtes
shp2pgsql -I -D -s 2154 Limite_terre_mer_France_metropolitaine/SHAPE/Limite_terre-mer_France_metropolitaine_fermeturesLIMAR.shp cotes | psql
# À partir d’ici on fait du SQL
# On modifie la table des communes pour avoir un compteur d’enclavement
alter table communes add column niveau_enclave int;
# On trouve les communes côtières
# communes.geom && cotes.geom permet d’utiliser les indexes spaciaux et ne pas faire de calcules inutiles
update communes set niveau_enclave = 0 from cotes where st_intersects(communes.geom, cotes.geom) and communes.geom && cotes.geom;
# Et on répète jusqu’à ce qu’on lise un `UPDATE 0`
update communes set niveau_enclave = autre.niveau_enclave + 1 from communes as autre where st_intersects(communes.geom, autre.geom) and communes.geom && autre.geom and communes.niveau_enclave is null and autre.niveau_enclave is not null;
# Et enfin on dégaine QGis et on fait l’image
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment