#1 Fri 29 October 2010 10:43
- Pierre
- DesCartesPourUnMondeMeilleur
- Date d'inscription: 22 Sep 2005
- Messages: 1643
ORACLE : reprojection
Aloha
Je tente de créer une vue, qui sera utilisée par une autre application toujours en L1, contenant des enregistrements aujourd'hui en L93.
J'ai bien un SRID dans ma vue USER_GEOM_METADATA (ici 2154), mais lorsque j'utilise la fonction SDO_CS.TRANSFORM, j'obtiens une erreur ORA-13029 (Invalid SRID). Et je ne vois pas comment injecter le SRID dans le champ GEOMETRY de ma vue.
Voici mes scripts :
Code:
DELETE FROM USER_SDO_GEOM_METADATA
WHERE TABLE_NAME LIKE 'XXX_CS_PA%';
/*Création de ma vue avec les centroïdes des objets*/
CREATE OR REPLACE VIEW A_XXX.XXX_CS_PA_BADM
AS
SELECT CAST ("type" AS CHAR (50)) AS TYPE_,
CAST ("libelle" AS CHAR (100)) AS LIBELLE,
CAST ("propriet" AS CHAR (100)) AS PROPRIET,
CAST ("commune" AS CHAR (100)) AS COMMUNE,
CAST ("libelle1" AS CHAR (100)) AS LIBELLE1,
CAST ("libelle2" AS CHAR (100)) AS LIBELLE2,
CAST ("libelle3" AS CHAR (100)) AS LIBELLE3,
CAST ("aff_lib" AS CHAR (100)) AS AFF_LIB,
SDO_GEOM.SDO_CENTROID (GEOMETRY, 1) AS GEOMETRY,
APIC_CDATE,
APIC_MDATE
FROM PA_BADM
WITH READ ONLY;Code:
/*Référencement de la vue dans les métadata avec un SRID à 2154 ce qui correspond au lambert 93*/
INSERT INTO USER_SDO_GEOM_METADATA (TABLE_NAME,
COLUMN_NAME,
DIMINFO,
SRID)
VALUES ('XXX_CS_PA_BADM',
'GEOMETRY',
SDO_DIM_ARRAY (SDO_DIM_ELEMENT ('X',
692000,
875296,
0.001), SDO_DIM_ELEMENT ('X',
6820000,
7012512,
0.001)),
2154 -- SRID
);Code:
/*Et lĂ , la requĂȘte de sĂ©lection pour reprojeter mes donnĂ©es en L1*/
SELECT
-- GEOMETRY,
L93.X,
L93.Y,
L1.X,
L1.Y,
LIBELLE
FROM XXX_CS_PA_BADM,
TABLE (
SDO_UTIL.
GETVERTICES (XXX_CS_PA_BADM.GEOMETRY)) L93,
TABLE (
SDO_UTIL.
GETVERTICES (
SDO_CS.
TRANSFORM (XXX_CS_PA_BADM.GEOMETRY,
27561))) L1;1/ Quelqu'un a-t'il déjà pratiqué ?
2/ Quelqu'un a-til 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 29 October 2010 11:41
- saispasfau
- Participant actif
- Date d'inscription: 28 Nov 2006
- Messages: 62
Re: ORACLE : reprojection
Bonjour.
Le SRID est-il bien spécifié à 2154 dans les géométrie de la table PA_BADM ?
Je pense qu'il doit ĂȘtre Ă null. le SRID des gĂ©omĂ©tries ne correspond alors pas avec le SRID spĂ©cifiĂ© dans les mĂ©tadonnĂ©es, idem pour la vue.
Il faut donc commencer par supprimer l'index spatial sur la table PA_BADM (pour pouvoir modifier le SRID des géométries sans message d'erreur).
Puis exĂ©cuter la requĂȘte pour spĂ©cifier le SRID des gĂ©omĂ©tries (qui doit correspondre Ă celui spĂ©cifiĂ© dans les mĂ©tadonnĂ©es) :
Code:
UPDATE PA_BADM P set PA_BADM.GEOMETRY.SDO_SRID = 2154;
Enfin, recrĂ©er l'index spatial sur la table, puis relancer la requĂȘte :
Code:
/*Et lĂ , la requĂȘte de sĂ©lection pour reprojeter mes donnĂ©es en L1*/
SELECT
-- GEOMETRY,
L93.X,
L93.Y,
L1.X,
L1.Y,
LIBELLE
FROM XXX_CS_PA_BADM,
TABLE (
SDO_UTIL.
GETVERTICES (XXX_CS_PA_BADM.GEOMETRY)) L93,
TABLE (
SDO_UTIL.
GETVERTICES (
SDO_CS.
TRANSFORM (XXX_CS_PA_BADM.GEOMETRY,
27561))) L1;A+
Saispasfau.
Hors ligne
#3 Tue 16 November 2010 09:46
- Pierre
- DesCartesPourUnMondeMeilleur
- Date d'inscription: 22 Sep 2005
- Messages: 1643
Re: ORACLE : reprojection
Aloha
L'Update ne fonctionne pas.
Ont été testés, aussi, mais pas par moi,
la création d'une géométrie correcte (? on en est à moitié sûrs) :
Code:
SELECT
GEOMETRY,
sdo_geometry(2001, 2154, SDO_POINT_TYPE(
L93.X,
L93.Y,
NULL), NULL, NULL)
FROM XXXXs.A_ANNOPT,
TABLE (
SDO_UTIL.
GETVERTICES (GEOMETRY)) L93
where rownum = 1;mais l'essai de transformation des coordonnĂ©es, aboutit Ă une une erreur "ORA-13282: Ă©chec d'initialisation de la transformation des coordonnĂ©es", mĂȘme en utilisant plusieurs mĂ©thodes de CS_TRANSFORM.
Code:
SELECT
GEOMETRY,
SDO_CS.TRANSFORM (
sdo_geometry(2001, 2154,
SDO_POINT_TYPE(L93.X, L93.Y, NULL),
NULL, NULL),
MDSYS.SDO_DIM_ARRAY(
MDSYS.SDO_DIM_ELEMENT(null,692000.0,875296.0,0.0010),
MDSYS.SDO_DIM_ELEMENT(null,6820000.0,7012512.0,0.0010) ),
27561) GEOML93
FROM XXXX.A_ANNOPT,
TABLE (
SDO_UTIL.
GETVERTICES (GEOMETRY)) L93
where rownum = 1;Ont été essayé aussi de rajouter ce qu'il faut dans SDO_GEOM_METADATA mais j'ai toujours l'erreur "ORA-13282: échec d'initialisation de la transformation des coordonnées"
Code:
DELETE FROM MDSYS.ELYX_SDO_GEOM_METADATA WHERE TABLE_NAME = 'A_ANNOPT' and OWNER='XXXX' and COLUMN_NAME = 'GEOML93';
INSERT INTO MDSYS.ELYX_SDO_GEOM_METADATA (OWNER,TABLE_NAME,COLUMN_NAME,DIMINFO,SRID)
values
('XXXX','A_ANNOPT','GEOML93',MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT(NULL,692000.0,875296.0,0.0010),MDSYS.SDO_DIM_ELEMENT(NULL,6820000.0,7012512.0,0.0010) ),2154);
SELECT
GEOMETRY,
SDO_CS.TRANSFORM (
sdo_geometry(2001, 2154,
SDO_POINT_TYPE(L93.X, L93.Y, NULL),
NULL, NULL)
,27561)
GEOML93
FROM XXXXs.A_ANNOPT,
TABLE (
SDO_UTIL.
GETVERTICES (GEOMETRY)) L93
where rownum = 1;
rollback;sans plus de succĂšs.
**********************
Jusqu'Ă ce que j'utilise
Code:
SDO_GEOMETRY(2001, 2154, SDO_POINT_TYPE(
L93.X,
L93.Y,
NULL), NULL, NULL) AS GEOMETRY,comme champ GEOMETRY dans ma définition de vue (notez les majuscules dans SDO_GEOMETRY), L93 étant une table de la clause FROM
Code:
TABLE (
SDO_UTIL.
GETVERTICES (SDO_GEOM.SDO_CENTROID (GEOMETRY, 1))) L93Et maintenant, je peux reprojeter mes ponctuels !
Yipi.
Dernière modification par Pierre (Tue 16 November 2010 10:32)
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

