#1 Fri 17 September 2010 11:14
- Pierre
- DesCartesPourUnMondeMeilleur
- Date d'inscription: 22 Sep 2005
- Messages: 1643
ORACLE/SQL : union de géométrie
Aloha,
Je mets aujourd'hui à jour une table (insert après un truncate) à partir des géométries d'une autre table (bâtiments du cadastre) en fonction de critères géographiques. Ceci fonctionne parfaitement bien.
Cependant, je souhaite que les objets insérés soient le regroupement, l'union des géométries des bâtiments "proches", ou "touchants". Je souhaite que disparaissent les limites entre ces bâtiments. Sur l'image ci dessous, je souhaite que les bâtiments 1282, 1283, 1284 et 1285 ne forment plus qu'un.
[img]http://img10.hostingpics.net/pics/474386UF_BATI_aggergat.png[/img]
Comment faire ?
J'arrive à sortir par unité foncière les bâtiments touchants avec leur vis à vis :
Code:
SELECT /*+ ordered */ B.UF, B1.UF, B.GID, B1.GID FROM TABLE (SDO_JOIN ('A_REIMS.PAT_BATI', 'GEOMETRY', 'A_REIMS.PAT_BATI', 'GEOMETRY', 'mask=TOUCH distance = 0.1')) c, A_REIMS.PAT_BATI B, A_REIMS.PAT_BATI B1 WHERE c.rowid1 = B.ROWID AND c.rowid2 = B1.ROWID AND B.UF = B1.UF AND B.GID !=B1.GID ORDER BY B.UF
qui me renvoie une liste où apparaissent des "doublons"
UF0085 UF0085 1284 1283
UF0085 UF0085 1285 1284
UF0085 UF0085 1285 1283
UF0085 UF0085 1284 1285
UF0085 UF0085 1283 1282
UF0085 UF0085 1283 1284
UF0085 UF0085 1283 1285
UF0085 UF0085 1282 1283
J'ai essayé
Code:
SELECT SDO_AGGR_UNION(SDOAGGRTYPE(I.GEOMETRY,1)),UF FROM PAT_BATI I GROUP BY UF
Mais le résultat était un objet comprenant les géométries 1280, 1281, 1282,...
Quelqu'un a-t'il une idée ? D'avance, merci,
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 17 September 2010 13:59
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: ORACLE/SQL : union de géométrie
Aloha,
Je mets aujourd'hui à jour une table (insert après un truncate) à partir des géométries d'une autre table (bâtiments du cadastre) en fonction de critères géographiques. Ceci fonctionne parfaitement bien.
Cependant, je souhaite que les objets insérés soient le regroupement, l'union des géométries des bâtiments "proches", ou "touchants". Je souhaite que disparaissent les limites entre ces bâtiments. Sur l'image ci dessous, je souhaite que les bâtiments 1282, 1283, 1284 et 1285 ne forment plus qu'un.
http://img10.hostingpics.net/pics/47438 … gergat.png
Comment faire ?
J'arrive à sortir par unité foncière les bâtiments touchants avec leur vis à vis :Code:
SELECT /*+ ordered */ B.UF, B1.UF, B.GID, B1.GID FROM TABLE (SDO_JOIN ('A_REIMS.PAT_BATI', 'GEOMETRY', 'A_REIMS.PAT_BATI', 'GEOMETRY', 'mask=TOUCH distance = 0.1')) c, A_REIMS.PAT_BATI B, A_REIMS.PAT_BATI B1 WHERE c.rowid1 = B.ROWID AND c.rowid2 = B1.ROWID AND B.UF = B1.UF AND B.GID !=B1.GID ORDER BY B.UFqui me renvoie une liste où apparaissent des "doublons"
UF0085 UF0085 1284 1283
UF0085 UF0085 1285 1284
UF0085 UF0085 1285 1283
UF0085 UF0085 1284 1285
UF0085 UF0085 1283 1282
UF0085 UF0085 1283 1284
UF0085 UF0085 1283 1285
UF0085 UF0085 1282 1283
J'ai essayéCode:
SELECT SDO_AGGR_UNION(SDOAGGRTYPE(I.GEOMETRY,1)),UF FROM PAT_BATI I GROUP BY UFMais le résultat était un objet comprenant les géométries 1280, 1281, 1282,...
Quelqu'un a-t'il une idée ? D'avance, merci,
Bonjour,
Oui, une idee:
Ajouter la condition pour faire l'union des objets qui se touchent.
La, vous demandez l'union, dans un meme objet, de tous les pg qui ont le meme code UF. Les polygones disjoints sont egalement "unioné".
Il faudrait rajouter une clause GROUP BY SDO_TOUCH(...) et probablement reecrire la requete pour identifier convenablement les pg qui se touchent, par ex en faisant une jointure sur pat_bati.
Nicolas
Hors ligne