一、引言
将shp文件导入oracle中就想着直接用sql进行普通查询和空间查询,这样直接通过webserver发布就可以不用arcgis server直接进行接口调用了,感觉这样比较接触底层些,所以就开始摸索了==
前提是oracle安装好,shp数据也导入oracle里面去了。
二、空间查询sql的使用
从arcgis官网中找到帮助文档,写了一些简单的查询sql。点击打开链接
哈哈,看上去很容易吧,不过我高兴的实在太早了==
三、查询出现问题
1、问题惊现
这个官方提供的函数竟然不能使用了,尴尬==
2、查了好多资料,终于找原因
在 Oracle 中,ST_Geometry 和 ST_Raster 的 SQL 函数使用通过 Oracle 的外部过程代理(即 extproc)访问的共享库。要将 SQL 和 ST_Geometry 或 ST_Raster 配合使用或访问 GDB_ITEMS_VW 和 GDB_ITEMRELATIONSHIPS_VW 视图中的 ArcSDE XML 列,Oracle 必须能够访问这些库。因此,这些库必须存在于 Oracle 服务器上,并且必须通过 Oracle 的外部过程框架调用它们。
在 ArcGIS 中,不设置 Oracle 监听器也可以使用 ST_Geometry 和 ST_Raster。但是,您将不会拥有 ArcGIS 客户端的全部功能,也不会拥有 SQL 客户端的任何功能(如 SQL*Plus)。例如,如果未配置 Oracle 监听器,则无法对 ArcMap 的查询图层中的 ST_Geometry 列或包含 ST_Raster 列的版本化表使用 SQL 函数,无法删除包括 ST_Raster 列的行,也无法从 SQL 客户端执行 SQL 函数。另外,如果您不配置 Oracle 监听器,则无法将使用 ST_Geometry 类型作为要素服务的数据发布到空间数据服务器。
ST_Raster 安装为可选操作。有关说明,请参阅在 Oracle 中安装 ST_Raster 类型。
如果您的 Oracle 数据库安装在 Windows 服务器上,但您未安装 ArcSDE 应用程序服务器,则您可能需要安装 Microsoft Visual C++ 2008 SP1 Redistributable Package (x64)。如果 Oracle 服务器上没有 Microsoft Visual C++ 2008 SP1 Redistributable Package (x64),则可从 Microsoft 网站下载,然后进行安装。
如果您使用的是 Oracle 11g,请编辑 extproc.ora 文件以通过 Oracle 的外部过程框架来调用函数。如果您使用的是 Oracle 10g,请配置 Oracle 监听器。
3、解决办法
-
st_shapelib.dll
- 创建ST_SHAPELIB library
执行sql查询user_libraries