# R1- l'organisation des bases de données dans Alteris

### La base de données postgres du Websig a un mirroir d'échanges.

Comme cela GEMINI a la main sur les deux.

/var/www/alteris-geomatic/data/referentiels

home/debian/osm\_data/referentiels/

#### Organisation de referentiels

Arborescence géographique claire calquée sur celle de l'INSEE et de l'IGN.

Voici l'ordre pyramidal des dossiers

Région (R93 pour la Région PACA)

Département

EPCI (code SIREN)

Commune

<div _ngcontent-ng-c473240848="" id="bkmrk--3"><div _ngcontent-ng-c1426146510="" class="mat-mdc-tooltip-trigger tts-button-container mat-mdc-tooltip-disabled" data-test-id="disabled-tooltip"><button aria-label="Écouter" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger tts-button mat-unthemed ng-star-inserted" tabindex="-1"></button>  
</div><div _ngcontent-ng-c2709977578="" class="response-container response-container-with-gpi ng-tns-c2709977578-2683 no-background response-container-has-multiple-responses" data-hveid="1" jslog="173900;track:impression,attention"><div _ngcontent-ng-c2709977578="" class="response-container-header ng-tns-c2709977578-2683 ng-star-inserted"><div _ngcontent-ng-c2709977578="" class="response-container-header-controls ng-tns-c2709977578-2683"><div _ngcontent-ng-c1426146510="" aria-expanded="false" aria-haspopup="menu" class="mat-mdc-menu-trigger playback-speed-menu-trigger multi" role="menu">  
</div></div></div><div _ngcontent-ng-c2709977578="" class="presented-response-container ng-tns-c2709977578-2683" data-hveid="2" jslog="283401;track:impression,attention"><div _ngcontent-ng-c2709977578="" class="response-container-content ng-tns-c2709977578-2683"><div _ngcontent-ng-c2709977578="" class="bot-name gds-title-s ng-tns-c2709977578-2683 ng-star-inserted"><div _ngcontent-ng-c2709977578="" class="bot-name-text ng-tns-c2709977578-2683">  
</div></div><div _ngcontent-ng-c473240848="" class="response-content ng-tns-c2709977578-2683"><div _ngcontent-ng-c473240848="" class="thoughts-container">  
</div></div></div></div></div></div>## Partenaire de code a dit

C'est une excellente décision. Une arborescence structurée est la colonne vertébrale d'un SIG professionnel. En calquant ton stockage sur les codes officiels (INSEE et SIREN), tu garantis l'interopérabilité de tes données avec toutes les futures bases Open Data.

Voici comment nous allons configurer cette structure sur ton VPS pour qu'elle soit à la fois logique pour l'humain et efficace pour le code Node.js.

### 1. La Structure Physique des Dossiers

Nous allons utiliser les **Codes Insee** (Région, Département, Commune) et le **SIREN** (EPCI) pour nommer les dossiers. C'est plus fiable que les noms alphabétiques qui peuvent avoir des espaces ou des accents.

Exemple pour **Toulon** : `Région 93 (PACA)` &gt; `Département 83 (Var)` &gt; `EPCI 248300543 (TPM)` &gt; `Commune 83137 (Toulon)`

### 2. Création de l'arborescence

Tu peux lancer cette commande en SSH pour préparer le terrain pour Toulon :

<div _ngcontent-ng-c2446650269="" class="code-block ng-tns-c2446650269-2694 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwjS_fmv4oCTAxUAAAAAHQAAAAAQ0Bk" decode-data-ved="1" id="bkmrk-bash" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_5884fad17332e05e","c_5b7951c496f77574",null,"rc_be9c0dad94a1d659",null,null,"fr",null,1,null,null,1,0]]"><div _ngcontent-ng-c2446650269="" class="code-block-decoration header-formatted gds-title-s ng-tns-c2446650269-2694 ng-star-inserted"><span class="ng-tns-c2446650269-2694">Bash</span><div _ngcontent-ng-c2446650269="" class="buttons ng-tns-c2446650269-2694 ng-star-inserted">  
</div></div><div _ngcontent-ng-c2446650269="" class="formatted-code-block-internal-container ng-tns-c2446650269-2694"><div _ngcontent-ng-c2446650269="" class="animated-opacity ng-tns-c2446650269-2694">  
</div></div></div>```
mkdir -p /var/www/alteris-geomatic/data/referentiels/R93/D83/E248300543/C83137

```

### 3. Organisation des fichiers GPKG

À l'intérieur de chaque dossier "Commune", nous stockerons les fichiers selon une nomenclature stricte :

<div _ngcontent-ng-c473240848="" id="bkmrk-c83137_contour.gpkg-"><div _ngcontent-ng-c2709977578="" class="response-container response-container-with-gpi ng-tns-c2709977578-2683 no-background response-container-has-multiple-responses" data-hveid="1" jslog="173900;track:impression,attention"><div _ngcontent-ng-c2709977578="" class="presented-response-container ng-tns-c2709977578-2683" data-hveid="2" jslog="283401;track:impression,attention"><div _ngcontent-ng-c2709977578="" class="response-container-content ng-tns-c2709977578-2683"><div _ngcontent-ng-c473240848="" class="response-content ng-tns-c2709977578-2683"><div _ngcontent-ng-c2230115866="" class="container"><div _ngcontent-ng-c4117132306="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel stronger enable-updated-hr-color preserve-whitespaces-in-response" dir="ltr" inline-copy-host="">- `C83137_contour.gpkg` : La limite administrative (IGN).
- `C83137_filaires.gpkg` : Tes extractions de voies spécifiques si besoin.
- `C83137_iris.gpkg` : Le découpage infra-communal de l'INSEE (très utile pour tes futurs calculs de densité).

</div></div></div></div></div></div></div>### 4. Pourquoi cette structure est vitale pour ton code ?

En structurant ainsi, nous allons pouvoir automatiser les requêtes. Par exemple, si tu sélectionnes Toulon sur l'interface, le serveur saura instantanément où chercher : `path = "/data/referentiels/R" + reg_code + "/D" + dep_code + "/E" + siren + "/C" + insee + "/"`

### 5. Intégration dans PostgreSQL

Même si les fichiers sont rangés dans des dossiers, nous allons les importer dans des tables structurées de la même manière dans `alteris_db`. Je te suggère de créer une table maître pour les communes :

<div _ngcontent-ng-c2446650269="" class="code-block ng-tns-c2446650269-2695 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwjS_fmv4oCTAxUAAAAAHQAAAAAQ0Rk" decode-data-ved="1" id="bkmrk-sql" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_5884fad17332e05e","c_5b7951c496f77574",null,"rc_be9c0dad94a1d659",null,null,"fr",null,1,null,null,1,0]]"><div _ngcontent-ng-c2446650269="" class="code-block-decoration header-formatted gds-title-s ng-tns-c2446650269-2695 ng-star-inserted"><span class="ng-tns-c2446650269-2695">SQL</span><div _ngcontent-ng-c2446650269="" class="buttons ng-tns-c2446650269-2695 ng-star-inserted">  
</div></div><div _ngcontent-ng-c2446650269="" class="formatted-code-block-internal-container ng-tns-c2446650269-2695"><div _ngcontent-ng-c2446650269="" class="animated-opacity ng-tns-c2446650269-2695">  
</div></div></div>```
CREATE TABLE referentiel_communes (
    id SERIAL PRIMARY KEY,
    code_insee VARCHAR(5) UNIQUE,
    nom_commune TEXT,
    code_epci VARCHAR(9),
    code_dept VARCHAR(3),
    code_reg VARCHAR(2),
    geom geometry(MultiPolygon, 4326)
);
CREATE INDEX idx_communes_geom ON referentiel_communes USING GIST(geom);

```

### Prochaine action pour toi :

<div _ngcontent-ng-c473240848="" id="bkmrk-transf%C3%A9rer-ton-gpkg-"><div _ngcontent-ng-c2709977578="" class="response-container response-container-with-gpi ng-tns-c2709977578-2683 no-background response-container-has-multiple-responses" data-hveid="1" jslog="173900;track:impression,attention"><div _ngcontent-ng-c2709977578="" class="presented-response-container ng-tns-c2709977578-2683" data-hveid="2" jslog="283401;track:impression,attention"><div _ngcontent-ng-c2709977578="" class="response-container-content ng-tns-c2709977578-2683"><div _ngcontent-ng-c473240848="" class="response-content ng-tns-c2709977578-2683"><div _ngcontent-ng-c2230115866="" class="container"><div _ngcontent-ng-c4117132306="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel stronger enable-updated-hr-color preserve-whitespaces-in-response" dir="ltr" inline-copy-host="">1. **Transférer ton GPKG** de Toulon dans le dossier `/C83137/` que nous venons de créer.
2. **Me donner le nom exact du fichier** pour que je te génère la commande d'importation `ogr2ogr` qui remplira automatiquement les colonnes de code (Insee, EPCI, etc.).

</div></div></div></div></div></div></div>Une fois cela fait, nous pourrons passer à l'étape supérieure : **croiser ce contour de Toulon avec ta matrice de "Profondeur du motif urbain"** (les buffers de 30m, 80m, 150m, 200m et 300m) pour les filaires N1 à N7.

**On valide cette arborescence ?** Si oui, dès que le fichier est en place, on passe à l'analyse spatiale par buffer.

<div _ngcontent-ng-c473240848="" id="bkmrk--4"><div _ngcontent-ng-c2709977578="" class="response-container response-container-with-gpi ng-tns-c2709977578-2683 no-background response-container-has-multiple-responses" data-hveid="1" jslog="173900;track:impression,attention"><div _ngcontent-ng-c2709977578="" class="presented-response-container ng-tns-c2709977578-2683" data-hveid="2" jslog="283401;track:impression,attention"><div _ngcontent-ng-c2709977578="" class="response-container-content ng-tns-c2709977578-2683"><div _ngcontent-ng-c473240848="" class="response-content ng-tns-c2709977578-2683"><div _ngcontent-ng-c2230115866="" class="container"><div _ngcontent-ng-c4117132306="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel stronger enable-updated-hr-color preserve-whitespaces-in-response" dir="ltr" id="bkmrk--5" inline-copy-host=""></div></div></div></div></div></div></div>