ST_Geometry及使用大全,ST_Geometry及使用大全,ST_Geometry及使用大全
1. 2. ST Intersection
37
4.2.5 ST SymmetricDiff
38
4.2.6 ST Union
39
4.2.7 ST Distance
43聚集函数
1.3 1 ST Aggr ConvexHull
4.3.2 ST Aggr Intersection
40
4.3.3 ST Aggr Union…
4.3.4空间数据属性提取的函数
4.3.4.1
求几何维度的函数
n41
4342z值函数
41
4.3.4.3
量测值函数.
4.3.4.4
取几何类型函数
41
4.345 st Point相关函数…241
4.3.4.6
面积和长度函数…241
43.47 st Line string相关函数
43.48 ST MultilineString相关函数…142
434.9 St Polygon相关函数42
43.4.10 ST Multipolygon相关函数
4.3.4.11
求几何坐标点个数函数
43
4.34.12空间参考系相关函数
43
4.3.4.13
其他函数
.43
第一章 ST Geometry与配置
1.1简介
ArcsDE for Oracle提供了 ST Geometry类型来存储几何数据。ST_ Geometry是一种
遵循lsO和OGC规范的,可以通过SQL直接读取的空间信息存储类型。采用这种存储方
式能够更好的利用 oracle的资源,更好的兼容 oracle的特征,比如复制和分区,并且能够
更快的读取空间数据。使用 ST Geometry存储空间数据,可以把业务数据和空间数据存储
到一张表中(使用 SDENBLOB方式业务数据和空间数据是分开存储在B表和F表中的)
因此可以很方使的在业务数据中增加空间数据(只需要在业务表中增加ST_ Geometry列)。
使用这神存储方式还能够简化多用户的读取,管理(只需要管理一张表)。
从 ArcGIs93开始,新的 ArcSdE geodatabases for Oracle会默认使用
ST_ Geometry方式来存储空间数据。它实现了SQL3规范中的用户自定义类型
(user- defined data types),允许用户使用 ST Geometry类型创建列来存储诸如界址点,
街道,地块等空间数据。
使用ST_ Geometry类型存储空间数据,具有以下优势:
1)通过SQL函数( ISO SQL∧MM标准)直接访问空间数据
2〕使用SαL语句存储、检索操纵空间数据,就像其他类型数据一样。
3)通过存储过程来进行复杂的空间数据检索和分析。
4)其他应用程序可以通过SQL语句来访问存储在 geodatabase中的数据。从 ArcGIS93
开始,新的 ArcSDE geodatabases for Oracle要求所以ST函数调用的时候前面都要加上
SDE schema名称。例如:要对査询出来的空间数据进行 union操作,则SQL函数需要这
样写:"sde. ST Union",在9,2版本之前,可以不加 SDE schema名称。
2基于0 racle的ST_ Geometry的配置
.2.10rac1e监听配置
从9.3开始,默认创建的婁素类都使用ST_ Geometry存储空间数据,9.3版本之前,
可以通过配 dbtune参数来完成。访问存储在 oracle中的 ST Geometry类型数据的SQL
数,通过扩展 oracle的 external procedure agent或者 extproc来实现,因此,直接使用
这些SQL函数需要配置 oracle的 listener,让 oracle能够找到这些扩展厍。如果使用SDE
读取这些数据,则不需要配置。
下面介绍一下如何配置 oracle listener。(关于 oracle的 listener的详细配置方法请参考
oracle相关文档)
1.2.1.1 Windows环境的配置
1)找到 oracle数据库的安装目录,然后定位到 ORACLE HOME\ network\admin目录,例如
D: oracle\product\ 11.1.0\db_ 1\network \admin
2)备份 listener。ora文件(这点很重要,在对 oracle的配置做仨何更改的时候都要进行备份)
3)打开 listener ora文件,找到( PROGRAM= extproc这一行,在这行下面添加对 ST SHAPELIB的引用,即指定ST_ SHAPELIB
的地址,如下
Windows F: (ENVS="EXTPROC DLLS-
其中
D: \ArcGIS\ ArcSDE_ Oracle\ArCSDE\ora11gee\ bin\st shapelib. d”为ST_ SHAPELIB的物坦路径,可以根据安装情况自己修改。
4)保仔 listener. ora文什,重新启动监听程序。
如果 ArcsDE和 Oracle不是安装在一起,需要把外部库文件拷贝到 Oracle目永下,重新设置路径,如需要拷贝
st snapc⊥ib,dl-pe. dll se dl三个文件到 ORACLE HOME/b下如D:\ oracle\product\1110db1uB,同时需要修改成
xl F:(ENVS-EXTPROC DLLS-C: \ArcSDE\sdeex=93\bin\st shapel-bdll")
5)下面是 listenerora例子:
D LIST LISTENER
IDL工S卫
SI二LE
SID NAME PLSExtProc)
ORACIE HOM
(ENVS-"EXI PROC DLLS-D: ArcGIS\ArCSDE Oracle \ArcsDE\orallgexe\LIB\s- shapelib d-1")
(SID DESC
(STD NAN
OraclesIDName l
ORACLE HOME D: oracle\product\Il lo\cb 1)
(GLOBAL NAME OracleSIDName
L二 STENER
(D上SCR⊥ON=
(二 DRESS=( PROTOCOL=工PC)(Ky= EXTPRO~1)
(A-DRESS =(PROTOCOL TCP)(HCST =192.168.2.23)(PORT=1521))
注:这里需要注意红色部分,其中 EXTPROC、 PLSExt Proc要跟TNs网络服务名配置中的要保持一致(文件: tnsnamc s.ora)
12.12 Linux环境的配置
1)找到 oracle数据库的安表目录,然后定位到 ORACLE HOME\network\admin目录,例如:
echo SORACLE HOME
/oracle/10.2/ db 1
2)进入备份 listener. o文件(这烹很重要,在对 oracle的配置做任何更改的时候都要进行备份)
Cd SCRACLE HOME
Cd admin
Cp⊥ stonor.ora⊥ istance.ora,cpy
3)打丌 listenerora文件,找到( PROGRAM= extproc)这行,在这行下面添加对 ST SHAPELIB的引用,即指定1 ibs shape1ib
的地址,如下:
(ENVS-"EXTPROC DLLS-/software/sde/sde exe/lic/l-bst shapelibs")H
“/ software/sde/ sde exe/1ib/1 ibs shapelib.sp”为 list shapelib的物理路径,可以根据安装情况自己修改。
4)保存 listener. ora文什,重新启动监听程序。
如昊 ArCSDE和 Oracle不是安装在起,需要扣外部厍文件拷仄到 Oracle目录下,亘新设置路径,如需要拷贝
二 ibs shape-ib, sp pe. sp sg. spl三个文件到 ORACLE HOME/b下如/ software/ oracle/app/ oracle/10203,同时需要
修改成如下:(ENs-"三 XIPROC DLL3-/s0 ftware/sde/ sde exe/1ib/1 ibs shapelib.sp"
5)下面是 listener, ora例子:
( DESCRIPTION L工sT=
(D彐S~ RIPTION=
(ADRESS =(PRC''OCO- =ICP)(HOSI=192.168.2.23)(PORT=1234)
(ADDRESS LIST
(ADCRESS -(PROTOCOL- IPC)(KEY EXTPRCCI!)
S工DI工 ST LSNR NYD3=
SIDL工s卫
(SID DES
(S⊥DNAM=2 L SEXtbroc)
(ORACLE HOME =/software/oracle/apc/cracle/10203
(PROGRAM- cxtproc
(ENVS="EXTPROC DLLS=/software/sde/sde exe/lic/l-bst shapelib sc, LD _IBRARY PATH=/so=tware/sd
e/sce exe/lib)
(SID DESC
(GLOBAL DENAME-myd=)
/software/oracle/apc/cracle/10203)
(SID NAME MYDB
121.3Unix环境的配置
找到oace数据库的安装目录,然后定位到 ORACLE HOME\ network\admin目录,例如:
SORACLE HOME
/oracle/10.2/db 1
2进入备份 istenerora文件(这点很重要,在对orae的配置做任何更改的时候都要进行备份
k
Cd admin
Cp listener. ora listener. ora cpy
3)打开 stenerora文件,找到( PROGRAM= extproc)这一行,在这行下面添加对 ST SHAPELIB的引用,即指定 lbst shape1ib
的地址,如下:(ENS=" EXTPROC DLL5=/ arcsde/ arcsde1/ seere93/ib/ list shapelib_64.50")其中
arcsde/ arcsde/ sneeze93/b/ ibst shapelib_64sσ”为 ibs shapely的物理路径,可以根据安装情况自己修改
4)保存 listenerora文件,重新启动监听程序。
如昊 ArcSDE和 Oracle不是安裝在起,需要扣外部库文仹拷仄到 Oracle目录下,亘新设置路径,如需要拷」
ibs shape1ib54,s。1ibpe64,so1isg64.0三个文件到 ORACLE HOME/1下如/ oracle/10.2/db1,同时
需要修改成如下:(ENVS=" EXTPROC DLL5=/orac1e/10.2/db1/1b/1 ibs shapelib64.so")
下面是 listener. ora例
LSNE MYD3
( DESCR工 PTION L工ST=
(AD上SS=(
ICP)(HOS_= my DhSeverUrl)(PORT=1234)
(ADCRESS-(PRCOCO-- IPC)(KEY- EXTPROCI!
SID LIST LSNE MYD3
(S⊥DD上SC
(SID NAME PLSExtProc)
(ORACLE HOME =/software/oracle/apr/cracle/10203)
(PROGRAM-cxtproc)
(ENV-"EXTPROC DLLS-/arcsde/arcsdel/sdeexe93/lib/libst shapelib 64.sO,
L⊥B上AIH=/ arcsde/ arcsde l/ deere93/1ib")
(STD DESC
(GLOBAL DENZ ME-mydo
(ORACLE HOME -/software/oracle/aps/cracle/1020
(SID NAME MY DB)
1.2.20rac1eTNS配置
oace文件 tnsnames ora中包含了一个数据厍服务。止文件可以定义木地数据库或远程服务器上的服务
其屮一项是专门为在本地数据库服务器来使用(IPC)的进程间通信并发送函数调用 extproc。此项被标记
EXTPROC CONNECTION DATA。下面是一个例子,它在文件 tnsnames. ora中出现。(请注意,这可
能不会在文件中唯一的条日。)
EXTPROC CONNECTION DATA
(DESCRIPTION
(ADDRESS LIST
ADDRESS=(PROTOCOL IPC)(Key= EXTPROC1)
(CONNECT DATA
(SID= PLSExtProc
(PRESENTATION- RO)
EXTPROC CONNECTION DATA
此项必须始终标签 EXTPROC CONNECTION DATA名称,不能更改
Key和SD
在此项中的两个项目是可以改变的关键( EXTPROC1)和S( PLSEXtProc)的名称。这些项目是用来
连接到这个项日中的文件 listener.oa中的对应信息关键可以是任何的短名称,但必须同时在 listener ora
和 tnsnames . ora文件相同。这些值是大小写敏感的。它们仅用于监听进程,而不是由用户或应用程序
1.30rac|e的 ST Geometry权限及数据库
3.1检查ST定义
松查 st astext、 st geometry、 st geometry ope rator.的定义如下
e C: \WINDOWS\system32\cmd. exe sqlplus sde/sdeadbp.. - x
SQL> select dbms_metadata. get_ddl< OPERATOR','ST_ASTEXT','SDE')from dual;
DBMS_METADATA.GET_DDL
CREATE OR REPLACE OPERATOR SDE.ST ASTEXT BINDING
C.ST GEOMETRY) RETURN CLOB
USINGSDE.5T GEOMETRY OPERATORS.ST ASTEXT F
SQL>
1.3.2检查 st shapelib对象定义
在执行的 Sde. st geometry shapelib_ pkg.st astext程序过程中,调用∫一个 astext函数(该函数在
SDEHOME\bin\st shapelib.d! windows)$ SDEHOME/ib/list shapelib.so(uniX,inux)定义的)。这旦需要
借助别名库( Alias Library)来表示动态库路径。别名库是数据厍里的一个对象,在SDE中就是 st shapelib
对象(该对象的类型为 library对象,其定义在下面),用来描述一个外部函数所在的动态链接库的路径和名
称。通过別名库,从而可以知道被调用的外部区数在哪个文件里。
Library对象的定义
Windows
CAC: \WINDOWS\system32\cmd. exe- sqlplus sde/sde@dbp.
QL> select file spec from user_libraries where library nane=ST- SHAPELIB;
FILE- SPEC
D: \Progran Files \ArcGIS \ArcSDE\Dral0gexe \bin\st_shape lib.dll
Q>
Linux Unix.
ca Telnet192.168.200.200
SQL>select file_spec from user_libraries where library_name="ST_SHAPELIB':
FILE SPEC
home/arcsde/sdeexe93/lib/libs_shape lib.so
注:如果不存在 St shapelib对象所指向的动态库的路径个正确,可以通过 select*from
user libraries査看指向的动态库的路径是否正确,如果不正确可以通过 create or replace
library st shape lib as' your lib path来进行修改