怎样将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是否有问题就不能保证了.
-------------------------------------------------------------------------------------------------------
版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
-------------------------------------------------------------------------------------------------------