Skip to content

Importer communes de France

albanmartel edited this page May 6, 2014 · 1 revision

h1. Importer communes de France

Collecte des données

Se rendre sur http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement.asp

Télécharger les fichiers suivants (vérifier le lien sur la page d’origine) :

Libellé Lien
Liste des communes de la métropole et DOM (toutes les communes ayant existé depuis 1943) http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement/2010/txt/france2010.zip
Liste des communes existantes au 1er janvier 2010 http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement/2010/txt/comsimp2010.zip

Dézipper les archives dans le répertoire de la base de données de SYNTHESE. Les fichiers suivants apparaissent :

  • france2010.txt
  • comsimp2010.txt

NB : L’année peut avoir augmenté depuis la rédaction de cette page.

Commandes sous Linux :


cd /srv/data/s3-server
wget http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement/2010/txt/france2010.zip
wget http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement/2010/txt/comsimp2010.zip
unzip france2010.zip
unzip comsimp2010.zip
/opt/rcs/bin/spatialite config.db3

Chargement dans SQLite

Ouvrir la base de données SYNTHESE. Si celle-ci est en cours d’utilisation, effectuer une sauvegarde.
Attention : Si une commune utilisée a été supprimée, certains points d’arrêts et certaines routes ne seront plus chargées.

Pour nettoyer la base des communes, exécuter la requête suivante :


DELETE FROM t006_cities;
DELETE FROM t065_city_aliases;

Ouvrir les deux fichiers textes dans SQLite en tant que table virtuelle (modifier l’année si elle ne correspond pas aux fichiers obtenus de l’INSEE) :


CREATE VIRTUAL TABLE france2010 USING VirtualText(france2010.txt, CP1252, 1, COMMA, DOUBLEQUOTE, TAB);
CREATE VIRTUAL TABLE comsimp2010 USING VirtualText(comsimp2010.txt, CP1252, 1, COMMA, DOUBLEQUOTE, TAB);

Plus d’infos sur le chargement de fichiers textes en table virtuelle : http://www.gaia-gis.it/spatialite/spatialite-tutorial-2.3.1.html#t7

Requêtes de sélection

France entière

INSERT INTO t006_cities(id, name, code)
SELECT
   1688849860499936 + (CASE DEP WHEN "2A" THEN 20 WHEN "2B" THEN 20 ELSE DEP END *1000+COM),
   CASE
      WHEN length(ARTMIN)>0 THEN
         substr(ARTMIN,2,length(ARTMIN)-2) ||
         CASE substr(ARTMIN,-2,1) WHEN "'" THEN "" ELSE " " END
      ELSE ""
   END ||
   NCCENR,
      DEP ||
      substr(1000+COM, -3)
FROM "comsimp2010";

Région

Pour récupérer uniquement les communes d’une région, ajouter la clause WHERE à la première requête comme suit, en remplaçant le code région (exemple sur Ile-de-France) par celui souhaité (ajouter des clauses OR pour ajouter plusieurs régions) :

INSERT INTO t006_cities(id, name, code)
SELECT
   1688849860499936 + (CASE DEP WHEN "2A" THEN 20 WHEN "2B" THEN 20 ELSE DEP END *1000+COM),
   CASE
      WHEN length(ARTMIN)>0 THEN
         substr(ARTMIN,2,length(ARTMIN)-2) ||
         CASE substr(ARTMIN,-2,1) WHEN "'" THEN "" ELSE " " END
      ELSE ""
   END ||
   NCCENR,
      DEP ||
      substr(1000+COM, -3)
FROM "comsimp2010"
WHERE REG=11;

Liste des régions :
|.Code|.Nom|
|01|Guadeloupe|
|02|Martinique|
|03|Guyane|
|04|La Réunion|
|11|Île-de-France|
|21|Champagne-Ardenne|
|22|Picardie|
|23|Haute-Normandie|
|24|Centre|
|25|Basse-Normandie|
|26|Bourgogne|
|31|Nord-Pas-de-Calais|
|41|Lorraine|
|42|Alsace|
|43|Franche-Comté|
|52|Pays de la Loire|
|53|Bretagne|
|54|Poitou-Charentes|
|72|Aquitaine|
|73|Midi-Pyrénées|
|74|Limousin|
|82|Rhône-Alpes|
|83|Auvergne|
|91|Languedoc-Roussillon|
|93|Provence-Alpes-Côte d’Azur|
|94|Corse|

Département

Pour récupérer uniquement les communes d’un département, ajouter la clause WHERE à la première requête comme suit, en remplaçant le code département (exemple sur Paris) par celui souhaité (ajouter des clauses OR pour ajouter plusieurs départements) :

INSERT INTO t006_cities(id, name, code)
SELECT
   1688849860499936 + (CASE DEP WHEN "2A" THEN 20 WHEN "2B" THEN 20 ELSE DEP END *1000+COM),
   CASE
      WHEN length(ARTMIN)>0 THEN
         substr(ARTMIN,2,length(ARTMIN)-2) ||
         CASE substr(ARTMIN,-2,1) WHEN "'" THEN "" ELSE " " END
      ELSE ""
   END ||
   NCCENR,
      DEP ||
      substr(1000+COM, -3)
FROM "comsimp2010"
WHERE DEP="75";

Ajout des alias

Les communes associées sont ajoutée en tant que communes réelles par la requête suivante avec xx le département choisi :

INSERT INTO t006_cities(id, name, code)
SELECT
   1688849860499936 + (CASE DEP WHEN "2A" THEN 20 WHEN "2B" THEN 20 ELSE DEP END *1000+COM),
   CASE
      WHEN length(ARTMIN)>0 THEN
         substr(ARTMIN,2,length(ARTMIN)-2) ||
         CASE substr(ARTMIN,-2,1) WHEN "'" THEN "" ELSE " " END
      ELSE ""
   END ||
   NCCENR,
      DEP ||
      substr(1000+COM, -3)
FROM "france2010"
WHERE ACTUAL=2 AND DEP="xx";

Les anciens noms de communes sont ajoutés en tant qu’alias par la requête suivante :

INSERT INTO t065_city_aliases(id, aliased_city_id, name, code, visible)
SELECT
   18295873486192640 + (CASE DEP WHEN "2A" THEN 20 WHEN "2B" THEN 20 ELSE DEP END *1000+COM),
   (SELECT id FROM t006_cities WHERE code=POLE),
   CASE
      WHEN length(ARTMIN)>0 THEN
         substr(ARTMIN,2,length(ARTMIN)-2) ||
         CASE substr(ARTMIN,-2,1) WHEN "'" THEN "" ELSE " " END
      ELSE ""
   END ||
   NCCENR,
      DEP ||
      substr(1000+COM, -3),
   (SELECT name FROM t006_cities WHERE code=POLE) != (CASE
      WHEN length(ARTMIN)>0 THEN
         substr(ARTMIN,2,length(ARTMIN)-2) ||
         CASE substr(ARTMIN,-2,1) WHEN "'" THEN "" ELSE " " END
      ELSE ""
   END || NCCENR)
FROM "france2010"
WHERE POLE IN (SELECT code FROM t006_cities) AND ACTUAL!=2;

Vérifications

Arrêts sur commune inexistante

Les requêtes suivantes permet détecter les arrêts et les routes qui ne sont plus liées à une commune existante :

SELECT * FROM t007_connection_places WHERE city_id NOT IN (SELECT id FROM t006_cities WHERE id=city_id);
SELECT * FROM t060_road_places WHERE city_id NOT IN (SELECT id FROM t006_cities WHERE id=city_id);

Liste des communes associées

SELECT
   1688849860499936 + POLE,
   1688849860499936 + (CASE DEP WHEN "2A" THEN 20 WHEN "2B" THEN 20 ELSE DEP END *1000+COM),
   CASE
      WHEN length(ARTMIN)>0 THEN
         substr(ARTMIN,2,length(ARTMIN)-2) ||
         CASE substr(ARTMIN,-2,1) WHEN "'" THEN "" ELSE " " END
      ELSE "" 
   END ||
   NCCENR,
      DEP ||
      substr(1000+COM, -3)
FROM "france2010" 
WHERE ACTUAL=2 AND DEP="79";

Dump prêts à l’emploi

Toutes les communes de France base 2010 : attachment:france.sql

Clone this wiki locally