Bonjour,

J'ai constaté un comportement étrange sur Oracle spatial.
quand on utilise la fonction d'union des géométries, cela inverse le sens de la géométrie linéaire (l'ordre des points est inversé)

voici un bout de code SQL qui reproduit cela :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
drop table tmp;
commit;
create table tmp
("ID" NUMBER,
"GEOM" SDO_GEOMETRY);
commit;
 
INSERT INTO TMP VALUES (
1,
SDO_GEOMETRY(2002, null, null, sdo_elem_info_array (1,2,1), SDO_ORDINATE_ARRAY(1,1, 2,2))
);
commit;
 
INSERT INTO TMP VALUES (
1,
SDO_GEOMETRY(2002, null, null, sdo_elem_info_array (1,2,1), SDO_ORDINATE_ARRAY(1,1, 2,2))
);
commit;
 
INSERT INTO TMP VALUES (
2,
SDO_GEOMETRY(2002, null, null, sdo_elem_info_array (1,2,1), SDO_ORDINATE_ARRAY(2,2, 1,1))
);
commit;
 
INSERT INTO TMP VALUES (
2,
SDO_GEOMETRY(2002, null, null, sdo_elem_info_array (1,2,1), SDO_ORDINATE_ARRAY(2,2, 1,1))
);
commit;
 
select id, SDO_AGGR_UNION(SDOAGGRTYPE(a.geom,0.005))
from tmp a
group by id;
et qui donne la sortie suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
ID                     SDO_AGGR_UNION(SDOAGGRTYPE(A.GEOM,0.005))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
---------------------- 
1     MDSYS.SDO_GEOMETRY(2002,null,null,MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1),MDSYS.SDO_ORDINATE_ARRAY(1,1,2,2))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
2     MDSYS.SDO_GEOMETRY(2002,null,null,MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1),MDSYS.SDO_ORDINATE_ARRAY(1,1,2,2))
1 SDO_ORDINATE_ARRAY(1,1,2,2)
2 SDO_ORDINATE_ARRAY(1,1,2,2)

la géométrie linéaire du record n°2 a été inversée par la fonction SDO_AGGR_UNION. Mais pas celle du record n°1 !!!

Quelqu'un a-t-il une explication et/ou une solution pour contourner le problème svp ?

Merci bcp pour votre aide