#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
Re: Cadastre et requête geospatiale
Pierre,
Je suppose que c'est du Oracle
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
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