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;

Oracle/OGC コードの 8307 ではなく 4326 (EPSG コード) を使用していることに注意してください。これは、「より標準的」であるためです。つまり、ほぼすべての 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;

注意: セレクターはCOLUMN_NAME ではなくTABLE_NAME用です

4) 空間インデックスを再作成する

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