OracleSpatial存储与ArcSDE存储相互转换

怎样将OracleSpatial的数据转换到ArcSDE库里面


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

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

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

其实差别不大,只要是在ArcSDE库里面,使用什么样的存储都是可以转换的。


一:如果你有ArcGIS Desktop10的话

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

相关QueryLayer参考:


二:如果你是ArcGIS Desktop9版本的话

那么还有两个可选项

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呢,对OracleSpatial来说,我们知道它的投影信息,那么我们可以使用ArcCatalog新建一个要素类,该要素类的投影与OracleSpatial的投影一致,而且在存储时我们以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.
这样就可以了


三:使用Oracle自带工具

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

相关参考


将ArcSDE的数据导出OracleSpatial


这个也比较容易

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

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

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

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


 -------------------------------------------------------------------------------------------------------
版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
-------------------------------------------------------------------------------------------------------


你可能感兴趣的:(OracleSpatial存储与ArcSDE存储相互转换)