Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Fri 22 January 2010 08:33

Pierre
DesCartesPourUnMondeMeilleur
Date d'inscription: 22 Sep 2005
Messages: 1643

Cadastre et requête geospatiale

Aloha

J'effectue une requête sur la base d'un périmètre défini par un utilisateur. Je souhaite obtenir le nom des propriétaires des parcelles touchées par ce périmètre, ainsi que l'adresse cadastrale de la parcelle touchée.
Aussi j'ai mis cette ébauche de requête au point :

Code:

SELECT p.IDENT,
         p.CONTMJ2,
         parcel.CCORIV,
         f.DVOILIB,
         pr.DNUPRO,
         pr.CCODRO,
         pr.DNULP,
         pr.DQUALP,
         pr.DDENOM1,
         pr.DDENOM2,
         pr.DLIGN3,
         pr.DLIGN4,
         pr.DLIGN5,
         pr.DLIGN6,
         pr.EPXNEE,
         pr.DNOMCP,
         pr.DPRNCP
    FROM A_REIMS.PCI_PARC p,
         A_REIMS.UR_SURF e,
         A_REIMS.MJ2_PROPRIO pr,
         A_REIMS.MJ2_PARCPROPRIO parcpro,
         A_REIMS.MJ2_FANTOIR f,
         A_REIMS.MJ2_PARCEL parcel
   WHERE SDO_ANYINTERACT (p.GEOMETRY, e.GEOMETRY) = 'TRUE'
         AND p.IDENT =
               parcpro.CCOCOM || '000' || REPLACE(parcpro.CCOSEC,' ','0') || parcpro.DNUPLA
         AND p.IDENT = parcel.CCOCOM || '000' || REPLACE(parcel.CCOSEC,' ','0') || parcel.DNUPLA
         AND parcpro.DNUPRO = pr.DNUPRO
         AND parcpro.CCOCOM = pr.CCOCOM
         AND pr.DNULP IN ('01', '02', '03', '04', '05', '06', '07')
         AND f.CCOCOM || f.CCORIV = parcel.CCOCOM || parcel.CCORIV
         AND e."dossier" = 'emprisekarel'
ORDER BY parcpro.CCOCOM || pr.DNUPRO || pr.DNULP;

Mais elle me renvoie des doublons, et est plutôt longue à exécuter. Je ne vois cependant pas où se trouve l'erreur.

Quelqu'un a-t'il une idée ?

D'avance, merci,

Dernière modification par Pierre (Fri 22 January 2010 10:50)


art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.

Hors ligne

 

#2 Fri 22 January 2010 11:30

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9855
Site web

Re: Cadastre et requête geospatiale

Pierre,

Je suppose que c'est du Oracle wink

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#3 Fri 22 January 2010 13:47

Damien BEAUSEIGNEUR
Participant assidu
Lieu: meyzieu
Date d'inscription: 5 Sep 2005
Messages: 425

Re: Cadastre et requête geospatiale

Bonjour, je vais résumer pour ce que j'ai compris de la requête.

la géométrie à tester est sur UR_SURF
PCI_PARC contient le contour des parcelles
MJ2_PARCPROPRIO est lié à PCI_PARC
MJ2_PARCEL est lié à PCI_PARC
MJ2_FANTOIR est lié à MJ2_PARCEL
MJ2_PROPRIO est lié à MJ2_PARCPROPRIO

Ce qui me dérange c'est la concaténation utilisée dans le requête
sur les liens entre MJ2_FANTOIR et MJ2_PARCEL

et ensuite

enfin pour un order by on n'utilise pas la concaténation ça n'a aucun intérêt, remplace || par une virgule ça marchera aussi bien

enfin dans PCI_PARC n'y a-t-il pas moyen d'avoir directement les 3 champs de jointure avec MJ2_PARCPROPRIO et MJ2_PARCEL, ce n'est pas que c'est faux comme écriture mais les champs doivent avoir une taille fixe pour que cela fonctionne bien.

Enfin une chose que j'utilise souvent, je commence petit, je travaille par étape.
Dernier point le problème peux venir des données, pour éviter les doublon un petit 'distinct' peu aider.

cordialement.

Hors ligne

 

#4 Fri 22 January 2010 14:01

Pierre
DesCartesPourUnMondeMeilleur
Date d'inscription: 22 Sep 2005
Messages: 1643

Re: Cadastre et requête geospatiale

Bonjour,

Tout d'abord merci pour ces remarques.
Oracle un jour, Oracle toujours wink

Concernant le lien MJ2_PARCEL et MJ2_FANTOIR, je vais voir à le remplacer par un JOIN.

C'est noté pour l'ORDER BY.

Enfin, les champs sont de taille fixes. La concaténation des 3 (au replace près) rend un identifiant unique de la parcelle.

Je vais voir pour le petit distinct. Je ne m'explique cependant toujours pas ces doublons... mais le JOIN devrait rendre l'affaire plus limpide.

Cordialement,

P.S. Je vais basculer sur STAR-APIC pour vous demander comment exploiter tout cela en représentation.


art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.

Hors ligne

 

#5 Fri 22 January 2010 16:21

Damien BEAUSEIGNEUR
Participant assidu
Lieu: meyzieu
Date d'inscription: 5 Sep 2005
Messages: 425

Re: Cadastre et requête geospatiale

Ok donc, une idée pour une amélioration des performances

créer le champ ident sur MJ2_PARCPROPRIO et MJ2_PARCEL
à remplir par la méthode prévu dans la requête et surtout ne pas oublier d'indexer ce champ.

personnellement, je préfère éviter les concaténations dans les jointures. Et ceci même avec des champs fixes, ce qui est gênant c'est très souvent le code commune qui est pris pour un nombre et qui perds facilement son premier chiffre pour les départements comme l'ain, l'aisne...
Quand je parle de champs fixe je sous-entends aussi des champs formatés du type 00000, vraiment une taille fixe. Les données sont souvent en cause dans le problème de doublon...

personnellement je préfère écrire
p.CCOCOM = parcpro.CCOCOM
and p.CCOSEC = parcpro.CCOSEC
and p.DNUPLA = parcpro.DNUPLA

à écrire ça

p.IDENT = parcpro.CCOCOM || '000' || REPLACE(parcpro.CCOSEC,' ','0') || parcpro.DNUPLA

Ensuite dernière question pourrait-il y avoir des doublons dans les données?

Hors ligne

 

Pied de page des forums

Powered by FluxBB