Created
April 12, 2023 14:31
-
-
Save Tristramg/b6859de2d1d83d194731720c66004498 to your computer and use it in GitHub Desktop.
Calcul du niveau d’enclave des communes en France
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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