可使用資料庫管理系統 (DBMS) 的結構化查詢語言 (SQL)、資料型別和表格式來處理地理資料庫或安裝了 ST_Geometry 型別的資料庫中所儲存的資訊。
例如,在ArcMap中我們使用"相交"工具進行空間操作;ArcObject介面裡用ITopologicalOperator.Intersect來實現。現在,我們可以脫離介面,實現資料的空間操作,從效能和架構的角度來說,這值得深入研究。在Sql Server中用STIntersects方法,在Oracle中使用SDO_FILTER(注意這裡不叫SDO_Intersects哈),在ArcGIS中用sde.st_intersects方法。
Sql Server方法:https://msdn.microsoft.com/zh-CN/library/bb933960.aspx
Oracle方法:https://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_operat.htm#SPATL110
ArcGIS方法:http://resources.arcgis.com/zh-cn/help/main/10.1/index.html#/na/006z000000ws000000
為了方便重用,我們使用了ArcGIS中的方法。但遇到一個配置錯誤!
錯誤
執行ST_Geometry
"ERROR at line 1:
ORA-28595: Extproc agent : Invalid DLL Path
ORA-06512: at "SDE.ST_GEOMETRY_SHAPELIB_PKG", line 170
ORA-06512: at "SDE.ST_RELATION_OPERATORS", line 303"
即語法沒有錯誤,只是不能呼叫DLL,在 Oracle 中,ST_Geometry 和 ST_Raster 的 SQL 函式使用通過 Oracle 的外部過程代理(即 extproc)訪問的共享庫。Oracle 必須能夠訪問這些庫。因此,這些庫必須存在於 Oracle 伺服器上,並且必須通過 Oracle 的外部過程框架呼叫它們。
顯示是沒找到這個些dll,按照官網的解決方法,總是啟動不了oracle監聽服務。
配置 Oracle extproc 以使用 SQL 訪問地理資料庫
解決
1.找到dll,其實它依靠兩個dll,一是st_shapelib.dll,ST_Geometry的庫,二是libst_raster_ora.dll,ST_Raster的庫。它們的路徑位於:
ArcSDE下的路徑:
C:\Program Files (x86)\ArcGIS\ArcSDE\ora10gexe\bin\st_shapelib.dll;
C:\Program Files (x86)\ArcGIS\ArcSDE\ora10gexe\bin\libst_raster_ora.dll
ArcDeskop下的路徑
D:\Program Files\ArcGIS\Desktop10.4\DatabaseSupport\Oracle\Windows64\st_shapelib.dll;
D:\Program Files\ArcGIS\Desktop10.4\DatabaseSupport\Oracle\Windows64\ libst_raster_ora.dll;
2.新建環境變數:新建一個系統環境變數
變數名:EXTPROC_DLLS
變數值:兩個dll的全路徑,中間用分號隔開,如C:\sdedll\st_shapelib.dll;C:\sdedll\libst_raster_ora.dll
(這裡是將兩個dll新增到新建的sdedll資料夾中的,因為伺服器上可能沒有安裝sde伺服器)
3.重啟服務:重新啟動oracle監聽服務OracleOraDb10g_home1TNSListener
參考
http://support.esri.com/technical-article/000009074
http://p385579058.iteye.com/blog/1042187
http://resources.arcgis.com/zh-cn/help/main/10.1/index.html#/na/006z0000001w000000/