landryb / topo2fantoir

convertir des fichiers TOPO au format FANTOIR
2 stars 1 forks source link

Import incorrect des voies par Cadastre QGIS #3

Closed MaelREBOUX closed 3 months ago

MaelREBOUX commented 4 months ago

On a un souci avec l'utilisation du fichier FANTOIR généré : noter sur l'adresse :

image

au lieu de :

image

La requête à jouer pour vérifier les données :

  SELECT
    p.parcelle
    ,coalesce(
      CASE
              WHEN v.libvoi IS NOT NULL THEN trim(ltrim(p.dnvoiri, '0') || ' ' || trim(coalesce(v.natvoi, '')) || ' ' || v.libvoi)
              ELSE ltrim(p.cconvo, '0') || p.dvoilib
      END, '') AS requete_org
      ,trim(ltrim(p.dnvoiri, '0') || ' ' || trim(coalesce(v.natvoi, '')) || ' ' || v.libvoi) AS src_voie_voie
      ,ltrim(p.cconvo, '0') || p.dvoilib AS src_voie_parcelle
  FROM parcelle p
  LEFT OUTER JOIN voie v
      ON v.voie = p.voie
  WHERE 2>1
  AND parcelle = '3500810000A1300' ;

Donne :

parcelle       |requete_org               |src_voie_voie             |src_voie_parcelle            |
---------------+--------------------------+--------------------------+-----------------------------+
3500810000A1300|14 RUE DES ROSES TREMIERES|14 RUE DES ROSES TREMIERES|RUEDES ROSES TREMIERES       |

Ensuite on réimporte toutes les données mais avec un fichier FANTOIR généré par le script et cela donne :

parcelle       |requete_org                  |src_voie_voie|src_voie_parcelle            |
---------------+-----------------------------+-------------+-----------------------------+
3500810000A1300|RUEDES ROSES TREMIERES       |             |RUEDES ROSES TREMIERES       |
MaelREBOUX commented 4 months ago

Conclusions :

  1. il y a un fallback sur la source parcellaire qui est mal formatée dans cadastre QGIS, parce que...
  2. les données du fichier généré par le script ne viennent pas charger la table voie

Pour 1/ -> issue à faire sur cadastre QGIS

Pour 2/ -> creuser....

landryb commented 4 months ago

c'est probablement le meme probleme que https://github.com/3liz/QgisCadastrePlugin/issues/345#issuecomment-2239091700

la jointure sur v.voie = p.voie echoue parce que le champ voie dans la table parcelle contient la valeur de l'identifiant majic, qui n'est plus dans le champ voie de la table voie

il faut modifier la jointure pour que p.voie matche le champ correspondant dans v.voie avec un like sur les 6 premiers chars (le code insee) et les 4 derniers (le code rivoli ?)

landryb commented 4 months ago

il n'y a rien a faire dans le code du script pour prendre ca en charge, c'est plutot du coté d'une adaptation du plugin qgis.. donc je pense que ce ticket peut être fermé, et la correction dans la PR d'adapation du plugin QGIS pour les données 2024/TOPO

MaelREBOUX commented 4 months ago

Je remet les 2 fichiers qui correspondent au contenu de la table brute d'import : tmp_fanr_2023.txt tmp_fanr_2024_v1.txt

landryb commented 4 months ago

je vois au moins 3 occurences de cette construction a potentiellement 'corriger' si le pb est bien ici.

./plugins/cadastre/scripts/plugin/edigeo_create_table_parcelle_info_majic.sql:LEFT OUTER JOIN [PREFIXE]voie v ON v.voie = p.voie
./plugins/cadastre/templates/parcelle_info_parcelle_majic.sql:    ON v.voie = p.voie
./plugins/cadastre/templates/proprietes_non_baties_line.tpl.sql:LEFT OUTER JOIN $schema"voie" v ON v.voie = p.voie

edit remplacer v.voie = p.voie par v.voie = substr(p.voie,0,7)||'00000'||substr(p.voie,12,4) a l'air de donner des résultats

MaelREBOUX commented 4 months ago

On avance : il y a un pb sur les identifiants de voies.

Dans la table voie avec des données de 2023 :

350081003210022 2023 35 0 081 350081 0 0022 H RUE DES ROSES TREMIERES N 3 0 0 0 0000000 2012331 00321 1 TREMIERE 2024-07

Dans la table voie avec des données du script :

350081000000022 2023 35 0 081 350081 0 0022 H RUE DES ROSES TREMIERES N 3 0 0 0 0000000 2012331 TREMIE 2024-07

La différence est ici : 350081003210022 : il manque 321.

MaelREBOUX commented 4 months ago

Ce qui confirme que la recherche par voie / adresse ne retourne aucune parcelle. CQFD.

landryb commented 4 months ago

Ce qui confirme que la recherche par voie / adresse ne retourne aucune parcelle. CQFD.

ca fonctionne très bien ici avec https://github.com/3liz/QgisCadastrePlugin/issues/345#issuecomment-2239091700

MaelREBOUX commented 3 months ago

Voici ce que donne la tentative de corriger le code de voie (voie) avec le ccovoique l'on trouve dans la table des parcelles et des propriétaires.

SET search_path = "cadastre_qgis";

-- récupération depuis la table des parcelles
UPDATE voie SET voie = p.voie
FROM cadastre_qgis.parcelle p WHERE voie.voie = substring(p.voie, 0, 7)||'00000'||p.ccoriv;

-- total|reste|pourcentage|
-- -----+-----+-----------+
--  340|   49|      14.00|

-- récupération depuis la table des propriétaires
UPDATE cadastre_qgis.voie SET voie = p.ccodep||p.ccodir||p.ccocom||p.ccovoi||p.ccoriv
FROM cadastre_qgis.proprietaire p WHERE voie.voie = p.ccodep||p.ccodir||p.ccocom||'00000'||p.ccoriv;

-- total|reste|pourcentage|
-- -----+-----+-----------+
--  340|   36|      11.00|

-- calcul de ce qui reste
SELECT *
FROM 
(SELECT count(*) AS total FROM voie) AS a,
(SELECT count(*) AS reste FROM voie WHERE substring(voie, 7, 5) = '00000') AS b,
(SELECT ROUND((SELECT count(*)::decimal AS reste FROM voie WHERE substring(voie, 7, 5) = '00000') / (SELECT count(*)::decimal AS total FROM voie) ,2)*100 AS pourcentage) AS c ;
MaelREBOUX commented 3 months ago
SELECT table_name
FROM information_schema.columns
WHERE column_name = 'ccovoi'   AND table_schema = 'cadastre_qgis';

On complète et on voir si on ramène qqs autres enregistrements mais on y croit moyen.

MaelREBOUX commented 3 months ago
UPDATE cadastre_qgis.voie SET voie = l.ccodep||l.ccodir||l.ccocom||l.ccovoi||l.ccoriv
FROM cadastre_qgis.local00 l WHERE voie.voie = l.ccodep||l.ccodir||l.ccocom||'00000'||l.ccoriv;

UPDATE cadastre_qgis.voie SET voie = l.ccodep||l.ccodir||l.ccocom||l.ccovoi||l.ccoriv
FROM cadastre_qgis.local10 l WHERE voie.voie = l.ccodep||l.ccodir||l.ccocom||'00000'||l.ccoriv;

0 et 0 enregistrements modifiés.

landryb commented 3 months ago

j'ai regardé pour la table parcelle de 2023 sur les 12 départements de la région AURA, et j'ai bien l'unicité des couples code insee/code rivoli:

qadastre@qadastre=> select count(distinct(voie)) from qad2023.parcelle;
 648786
qadastre@qadastre=> select count(distinct(substr(voie,0,7)||'00000'||substr(voie,12,4))) from qad2023.parcelle;
 648786

donc a mon avis on peut se passer de ccovoi sans soucis.

landryb commented 3 months ago

@MaelREBOUX on peut fermer ?