OracleSpatial与ArcSDE数据格式转换的理解

现在越来越多的用户使用OracleSpatial进行存储,那么随着之而来的问题就是我的OracleSpatial数据怎么转换到ArcSDE库里面,这个问题有两个理解方式,因为使用Oracle Spatial存储也就是使用SDO_Geometry存储,那么ArcSDE库是ST_Geometry存储,而且ArcSDE库也支持SDO_Geometry进行存储,那么题目的问题可以理解两种方式:

1:纯oracle库里面的Oracle Spatial存储转换到ArcSDE库里面以SDO_Geometry存储

2:纯oracle库里面的Oracle Spatial存储转换到ArcSDE库里面以ST_Geometry存储

 

一:ArcGIS Desktop10及以上版本

从ArcGIS Desktop10开始有一个新的对象就是QueryLayer,使用这个对象就可以使ArcGIS Desktop直接读取纯Oracle 数据库里面的OracleSpatial数据库,而且在ArcMap里面可以进行图形显示,这样的话,非常简单了,图形显示出来,用户可以将这些数据直接导出成文件GDB,然后在将文件GDB导入到ArcSDE里面,是不是很容易。

相关QueryLayer参考:

二:如果是ArcGIS Desktop 9版本的话

那么还有两个可选项

1:如果用户的桌面软件安装了数据互操作以及有相关的许可,那么可以使用ETL的方式将数据进行转换

2:如果没有(估计大部分用户都没有)

也很容易,我们可以将指定的OracleSpatial数据使用IMP方式将数据导出DMP文件,然后再将这DMP导入到ArcSDE库里面,然后使用sdelayer命令进行注册

C:\Users\Administrator>sdelayer -o register -l zd_1,shape -e a -t SDO_GEOMETRY -i esri_sdeora -u test -p test  
  
  
ArcSDE 10.0  for Oracle11g Build 2004 Fri Jan 13 11:45:40  2012  
Layer    Administration Utility  
-----------------------------------------------------  
Successfully Created Layer.  

注册完毕后,我们在ArcMap查看,会报错:

One or more layers failed to draw:  
  
TEST.ZD_1:  Underlying DBMS error [ORA-29902: 执行 ODCIIndexStart() 例行程序中出错  
ORA-13208: 对运算符 [window SRID does not match layer SRID] 求值时出现内部错误  
ORA-06512: 在 "MDSYS.SDO_INDEX_METHOD_10I", line 333  
::SELECT  SHAPE,  TEST.ZD_1.OBJECTID   FROM  TEST.ZD_1 WHERE mdsys.sdo_filter(TEST.ZD_1.SHAPE, MDSYS.SDO_GEOMETRY(:gtype1,:srid1,NULL,:elem_info1,:ordinates1), 'querytype=window') = 'TRUE'] [TEST.ZD_1]  

这是因为没有设置SRID的原因,这里面有一个小小的捷径,我们怎么才能知道我们这个图层的SRID呢,对Oracle Spatial来说,我们知道它的投影信息,那么我们可以使用ArcCatalog新建一个要素类,该要素类的投影与Oracle Spatial的投影一致,而且在存储时我们以SDO_GEOMETRY(选择该关键字即可)进行存储即可,那么我们就可以查看相关的SRID

C:\Users\Administrator>sqlplus sde/sde@orcl  
  
SQL*Plus: Release 11.2.0.1.0 Production on 星期四 5月 24 10:21:47 2012  
  
Copyright (c) 1982, 2010, Oracle.  All rights reserved.  
  
  
连接到:  
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production  
With the Partitioning, OLAP, Data Mining and Real Application Testing options  
  
SQL> select srid from layers where table_name='ZD_2' and layer_config='SDO_GEOMETRY';  
  
      SRID  
----------  
        20  

然后我们删除出错的图层,重新导入IMP,重现注册

C:\Users\Administrator>sdelayer -o register -l zd_1,shape -e a -t SDO_GEOMETRY -R 20 -i esri_sdeora -u test -p test  
  
  
ArcSDE 10.0  for Oracle11g Build 2004 Fri Jan 13 11:45:40  2012  
Layer    Administration Utility  
-----------------------------------------------------  
Successfully Created Layer.  

这样就可以了

关于SRID

三:使用Oracle自带工具

OracleSpatial自带了sdo2shp来进行转换,可以将Oracle Spatial转换为Shapefile,然后用户使用shapefile导入到ArcSDE里面

相关参考

将ArcSDE的数据导出OracleSpatial

 

这个也比较容易

1:如果有数据互操作扩展,使用ETL来实现

2:如果没有,可以将你的ArcSDE库里面的数据,以Oracle Spatial方式进行存储,然后通过Oracle的方式IMP等,将DMP文件导入到Oracle数据库里面即可。

3:也可以导出成Shapefile,使用Oracle自带的shp2sdo导入

毕竟ArcGIS没有直接导出Oracle Spatial的接口,所以导出的Oracle Spatial是否有问题就不能保证了.

你可能感兴趣的:(OracleSpatial与ArcSDE数据格式转换的理解)