1

我使用 FME Workbench 将 ESRI 要素类导入 Oracle。通过 FME 导入时,我使用了原始的 ESRI SRID。现在表在 Oracle 中,我想更改元数据和 SRID 以匹配 Oracle 的。首先,我使用了以下代码,但它给了我一个错误,因为已经OTTAWAPROVRDS存在USER_SDO_GEOM_METADATA(我猜它是通过 FME 导入时自动添加的)

INSERT INTO USER_SDO_GEOM_METADATA 
(TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) 
VALUES 
('OTTAWAPROVRDS', 'GEOM',
 MDSYS.SDO_DIM_ARRAY 
 ( MDSYS.SDO_DIM_ELEMENT('X', -180, 180, 0.5), 
 MDSYS.SDO_DIM_ELEMENT('Y', -90, 90, 0.5) 
 ), 
 8307
);

然后我使用以下代码仅更改 SRID

UPDATE USER_SDO_GEOM_METADATA a
SET a.SRID = 8307
WHERE a.TABLE_NAME = 'OTTAWAPROVRDS';

这有效,但是当我尝试迁移到当前时,出现以下错误:

Error report -
ORA-29877: failed in the execution of the ODCIINDEXUPDATE routine
ORA-13365: layer SRID does not match geometry SRID
ORA-06512: at "MDSYS.SDO_MIGRATE", line 423
ORA-06512: at "MDSYS.SDO_MIGRATE", line 474
ORA-06512: at line 1
29877. 00000 -  "failed in the execution of the ODCIINDEXUPDATE routine"
*Cause:    Failed to successfully execute the ODCIIndexUpdate routine.
*Action:   Check to see if the routine has been coded correctly.

这让我相信仅仅更新 SRID 是行不通的,我必须更新整个元数据。我试过这段代码:

UPDATE USER_SDO_GEOM_METADATA
SET DIMINFO =  MDSYS.SDO_DIM_ARRAY 
 ( MDSYS.SDO_DIM_ELEMENT('X', -180, 180, 0.5), 
 MDSYS.SDO_DIM_ELEMENT('Y', -90, 90, 0.5) 
 ),
 SRID = 8307
WHERE COLUMN_NAME = 'OTTAWAPROVRDS';

但结果是0 rows updated

4

1 回答 1

1

FME 确实为您的表格自动插入了正确的元数据。我认为没有理由改变这一点。

除非我理解正确,否则您真正想做的是将加载的数据转换为 SRID 8307,即 long/lat WGS84。那是对的吗 ?当前的 SRID 是什么?

要将表格转换为新的坐标系,您需要执行以下操作:

1)删除现有的空间索引

drop index <your index name>;

2) 使用 SDO_CS_TRANSFORM() 函数更新所有几何图形,如下所示:

update ottawaprovrds
set geom = sdo_cs.transform (geom, 4326);
commit;

请注意,我使用 4326(EPSG 代码)而不是 8307,Oracle/OGC 代码,因为它“更标准”,即几乎所有 GIS 工具包都可以直接理解。

3)更新元数据:

UPDATE USER_SDO_GEOM_METADATA SET
DIMINFO = SDO_DIM_ARRAY (
  SDO_DIM_ELEMENT('Long', -180, 180, 0.5), 
  SDO_DIM_ELEMENT('Lat', -90, 90, 0.5) 
),
SRID = 4326
WHERE TABLE_NAME = 'OTTAWAPROVRDS';
commit;

注意:选择器用于TABLE_NAME而不是COLUMN_NAME

4)重新创建空间索引

create index <your index name> on ottawaprovrds (geom)
indextype is mdsys.spatial_indextype;
于 2015-06-09T10:13:07.780 回答