最近因为工作上的项目需求,研究了下如何将shp文件里面的空间数据入库。
oracle提供oracle.spatial.util.SampleShapefileToJGeomFeature
http://docs.oracle.com/cd/E11882_01/appdev.112/e11830/sdo_shapefile_converter.htm#SPATL1427
这是由oracle 提供的 shp 入库方法,入库后的空间数据类型是 SDO_GEOMETRY,而不是ST_GEOMETRY。该方法使用很简单,只需设定好对应的参数即可,可以直接通过命令行的形式使用:
oracle提供的用于操作 oracle spatial 的jar包位于 ORACLE_HOME/md/*,如下:
oracleplugin
http://docs.geotools.org/latest/userguide/library/jdbc/oracle.html
这是由geotools提供的专门连接并操作oracle 数据库的方法,使用该 Plugin可以很方便的基于oracle 创建图层、添加要素,但是遗憾的是,也是属于 oracle spatial,不过可以学习了解下,一个简单的连接数据库并基于一个shp图层创建一张空间表的示例如下:
基于已经连接的DataStore可以取得当前连接对象等,可以很方便的进行数据库操作,这个Plugin依赖如下的jar包:
|
|
利用maven配置依赖时,需要指定私服地址,在中央仓库中并没有这些资源,私服地址如下:
arcsdeplugin
http://docs.geotools.org/latest/userguide/library/data/arcsde.html
这是Geotools 针对 arcsde 的方法,使用该插件与oracle plugin 类似,生成的空间数据类型是st_geometry ,是符合要求的,感觉基本上就是调用的 arcsde jdk for java 提供的方法,所以还需要使用到 arcsde 的jdk。其连接到srcsde服务的代码如下:
|
|
arcsde服务连接到数据库,并基于某个图层创建空间表。不过在这里直接把图层里的feature 插入到刚刚创建的图层时还有点问题。主要是彼此之间的关系还没弄清楚,很多类都是保护型的,没法实例化,需要转来转去的。需要用到的依赖如下:
除此之外,还需要引入arcsde 的相关jar包。
Arcgis 工具 arcsde
调用arcsde提供的工具shp2sde(也是偶然想到既然有sdeservice 工具,会不会还有其它工具,一看果然还有好多有用的)。ArcSDE提供了很多工具,可以借助这些工具来完成相关的操作。在ArcCatalog 中带ui的功能,有一些通过命令行是可以完成的。shp2sde 就是用来完成shp入库的,而且效率很高。
关于shp2sde命令,参考如下:http://edndoc.esri.com/arcsde/9.0/admin_cmd_refs/shp2sde.htm,下面是一个示例:
ArcSDE还提供了很多其它类型的工具:
最终,依据可行性和效率的考量,我实现的将服务器中的shp入库效果如下:
还有一些其他的开源gis工具也可以实现shp入库,比如OGR 等。