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é ?

#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: 1538

Re: ORACLE/SQL : union de géométrie

Pierre a écrit:

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.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,


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

 

Pied de page des forums

Powered by FluxBB