/Files/zuiyirenjian/将shp数据存储在oracle下.rar
ArcGIS 10 中有一个新的功能 query layer,用这个东西就可以将存储在其他关系型数据库里面的数据整合到ArcMap中,看来ESRI越来越开放了,我们知道,空间数据的存储有点复杂,不同的GIS厂商都有自己管理数据的结构,比如超图和MapGIS就和ESRI的空间数据结构不一样,同样关系型数据库也有自己的空间数据存储结构,Oracle提供了SDO_GEOMETYR和ST_GEOMETYR,注意这个和ESRI提供的ST_GEOMETYR是不一样的。
Oracle提供了一个shp2sdo的工具,将shp数据存储成自己的SDO_GEOMETYR,在这里我操作一下。我的shp数据CUN2。
这是在ArcMap下看到的
将下载到的shp2sdo添加到oracle的bin目录下,为什么?因为oracle安装的时候配置了一个环境变量path,在这里我不多介绍。
从cmd 进入shp文件的目录,我的shp数据在计算机上的位置
Esriquery 为oracle中的表名,我采用默认的。
下面多了三个文件
Ctl为控制文件,里面有dat数据的地址,dat数据含有我们的数据
我用scott用户连接到oracle数据库,然后做如下操作,执行sql语句,可以打开看看,不要因为看到第1行出现错误,就认为这个错了,原因呢,在这里我不说了,sql语句里面可以看到。Sql语句其实是创建了一个表。
Sql语句其实是创建了一个表,但是还没装在数据呢?数据是在dat中,装载控制文件,控制文件记录了dat数据的位置。
创建一个空间索引
SQL>CREATE Index esriquery_index ON esriquery (GEOM)INDEXTYPE IS MDSYS.SPATIAL_INDEX;
在oracle 中看到的
本来是要 ArcMap 中直接利用 Query Layer 访问这个数据 , 我的 ArcGIS 是 10 的, Oracle 是 11 的 R2 ,计算机是 64 的 win7 但是就死活连接不上,最终和同事认为是一个 BUG ,同事说装一个 32 位的客户端就可以了,我看到他们确实可以,而且我用其他的都可以连接上,从命令端或者 sql developer 都可以,但是 ArcMap 不行,没法,我将数据又存储在 sql server2008 中,可以,通过 query layer 可以访问,至于 Oracle 的那个问题。我还在努力。
在这里说一下,我找到的一个工具是将 shp 存储在 sql server2008 中,估计不是官方的,所以如果字段是汉字的话,会有乱码,用英文字段名称没问题的。
Shp2sql server2008 下载地址
http://www.sharpgis.net/page/SQL-Server-2008-Spatial-Tools.aspx
以下是用 query layer 访问到 sql server 2008 中的数据