STGeometry教程文档格式.docx
- 文档编号:18760259
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:29
- 大小:776.74KB
STGeometry教程文档格式.docx
《STGeometry教程文档格式.docx》由会员分享,可在线阅读,更多相关《STGeometry教程文档格式.docx(29页珍藏版)》请在冰豆网上搜索。
1.2存储结构
ST_Geometry存储空间数据的结构如下表:
Name
Type
ENTITYNUMBER(38)
NUMPTSNUMBER(38)
MINX
FLOAT(64)
MINYFLOAT(64)
MAXXFLOAT(64)
MAXYFLOAT(64)
MINZFLOAT(64)
MAXZFLOAT(64)
MINMFLOAT(64)
MAXMFLOAT(64)
AREAFLOAT(64)
LENFLOAT(64)
SRIDNUMBER(38)
POINTSBLOB
Entity:
为要素类型,包括(linestring,multilinestring,multipoint,multipolygon,point,orpolygon)。
具体的值对应的类型可以通过st_geom_util存储过程获得。
NUMPTS为坐标点的个数
Minx,miny,maxx,maxy:
对应几何的外包络矩形
Area:
几何的面积
Len:
几何的周长
SRID:
空间参考系ID,对应ST_Spatial_References表中的空间参考信息
POINTS:
坐标序列
1.3操作函数
下面是一些针对ST_Geometry进行操作的函数,输入为ST_Geometry类型数据,输出为Number型数据、
ST_Area返回几何的面积。
ST_Len返回几何的周长。
ST_Entity返回几何类型.
ST_NumPoints返回几何坐标点的个数.
ST_MinM,ST_MinX,ST_MinY,ST_MinZ返回几何不同维度的最小坐标.ST_MaxM,ST_MaxX,ST_MaxY,ST_MaxZ返回几何不同维度的最大坐标.ST_SRID返回空间参考系ID.
Get_release返回版本信息.
如下面例子,在us_states表中查找所有state的名字并计算state的面积。
SELECTname,st_area(geometry)
FROMus_states
ORDERBYname;
1.4构造ST_Geometry对象
ST_LineString,ST_MultiLineString,ST_MultiPoint,ST_MultiPolygon,ST_Point,和ST_Polygon全部是ST_Geometry的子类.ST_Geometry和他的子类共享属性和方法.ST_LineString,ST_MultiLineString,ST_MultiPoint,ST_MultiPolygon,ST_PointandST_Polygon的构造函数的定义是相同的,构造函数的名字就是类型名。
ST_Point是个有限对象(只有一个点),因此可以使用下面的方法来构造。
1,使用xy坐标和SRID来构造ST_Point
METHOD
FINALCONSTRUCTORFUNCTIONST_POINTRETURNSSELFASRESULT
ArgumentName
Type
In/OutDefault?
PT_X
NUMBER
IN
PT_Y
SRID
SQL>
insertintosample_ptvalues(ST_Point(10,20,1));
2,使用xy坐标、高程值(z)和SRID来构造ST_Point
PT_Z
insertintosample_ptvalues(ST_Point(10,20,5,1));
3,使用xy坐标、高程值(z),量测值(m)和SRID来构造ST_Point
MEASURE
insertintosample_ptvalues(ST_Point(10,20,5,401,1));
1.5用户权限限制
在oracle使用ST_Geometry,用户必须有以下权限:
CREATETYPE
UNLIMITEDTABLESPACE
CREATELIBRARY
CREATEOPERATOR
CREATEINDEXTYPE
CREATEPUBLICSYNONYM
DROPPUBLICSYNONYM
TheCONNECTandRESOURCErolesincludetheseprivileges.
2为使用ST_GeometrySQL函数配置oracle的网络服务
访问存储在oracle中的ST_Geometry类型数据的SQL函数通过扩展oracle的externalprocedureagent或者extproc来实现,因此,直接使用这些SQL函数需要配置oracle的listener,让oracle能够找到这些扩展库。
如果使用SDE读取这些数据,则不需要配置。
这些对ST_Geometry类型数据进行操作的函数是用PL/SQL实现的,在PL/SQL中其实是转调的使用c语言编写的外部扩展库(ST_SHAPELIB)。
关于oracle的listener的详细配置方法请参考oracle的相关文档,下面主要介绍一下默认情况下如何配置(windows下面)。
1)找到oracle数据库的安装目录(服务器端),然后定位到oraclehome\NETWORK\ADMIN目录
2)备份listener.ora文件,这点很重要,在对oracle的配置做任何更改的时候都要进行备份
3)打开listener.ora文件,找到(PROGRAM=extproc)这一行,在这行下面添加对ST_SHAPELIB的引用,即指定ST_SHAPELIB的地址,如下:
(ENVS="
EXTPROC_DLLS=C:
\ProgramFiles\ArcGIS\ArcSDE\ora10gexe\bin\st_shapelib.dll"
)
其中“C:
\ProgramFiles\ArcGIS\ArcSDE\ora10gexe\bin\st_shapelib.dll”为ST_SHAPELIB的物理路径,可以根据安装情况自己修改。
4)保存listener.ora文件,重新启动监听程序。
附录:
未修改前的listener.ora
#listener.oraNetworkConfigurationFile:
D:
\oracle\product\10.2.0\db_1
\network\admin\listener.ora
#GeneratedbyOracleconfigurationtools.
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=PLSExtProc)
(ORACLE_HOME=D:
\oracle\product\10.2.0\db_1)
(PROGRAM=extproc)
)
LISTENER=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))
(ADDRESS=(PROTOCOL=TCP)(HOST=zbc)(PORT=1521))
修改后的listener.ora
3创建空间数据存储类型为ST_Geometry的要素类
创建空间数据存储类型为ST_Geometry的要素类有2种方法:
1)使用SDE创建要素类
从9.3开始,默认创建的要素类都使用ST_Geometry存储空间数据,9.3版本之前,可以通过配置dbtune参数来完成。
2)直接使用SQL语句创建要素类。
1.首先使用sqlplus连接到oracle服务器,确保登陆用户有如下权限:
TheCONNECTandRESOURCErolesincludetheseprivileges.
2.使用SQL语句创建包含ST_Geometry列的表,注意:
要使SDE能够认识你创建的要素类,新建的表中有且只能有一个ST_Geometry列,并且最好包含唯一标识的列。
执行下面的sql语句
CREATETABLEsensitive_areas(area_idinteger,namevarchar(128),
area_sizefloat,typevarchar(10),zonesde.st_geometry);
注意st_geometry前面应添加sdeschema名,否则会报错。
51.png
3.使用sdelayer命令,将创建好的表注册到SDE中
注册的时候一定要保证下面几点才能成功:
1必须是表的所有者才能注册。
2表中只能有一个ST_Geometry列。
3没有其他用户自定义类型的列。
4必须是简单的集合类型(points,lines,orpolygons)。
5Geometry必须是有效的,否则读取的时候会产生不可预期的错误。
sdelayer命令参数如下:
sdelayer-oregister-l<
table,column>
-e<
entity_mask>
[Spatial_Index]
[{-R<
SRID>
|[Spatial_Ref_Opts]}][-P{BASIC|HIGH}]
{[-CNONE]|[-C<
row_id_column>
[,{SDE|USER}[,<
min_ID>
]]]}
[-E{empty|xmin,ymin,xmax,ymax}][-t<
storage_type>
]
[-S<
layer_description_str>
][-q]
[-k<
config_keyword>
][-i<
service>
][-s<
server_name]
[-u<
DB_User_name>
][-p<
DB_User_password>
][-D<
database>
在命令行中执行下列命令
sdelayer-oregister-lsensitive_areas,zone-ea-Carea_id,SDE-udata-psa-tST_GEOMETRY
-o参数为register-l参数为表名/ST_Geometry列-e几何类型-C用户唯一id/SDE其中SDE表示由sde维护唯一id,使用USER选项,则有用户维护唯一ID-u注册地用户名-p用户密码-t数据存储类型
sdelayer.png
barry~~~~~~~~~~~~~
4.在catalog中查看,可以看到sensitive_areas已经被注册到sde中,并且图标显示为polygon类型。
使用SQL直接操纵FeatureClass(oracle),这里主要讲存储类型为ST_Geometry的要素类。
对FeatureClass的操作主要包括下面几点:
1数据的插入,删除,更新
数据的插入直接使用insert语句来进行,构造ST_Geometry的时候可以通过两种方法来完成:
1)使用WKT编码
2)使用WKB编码
上面两种编码都是OGC规范的编码方式,分别通过ST_PolyFromText()和ST_PointFromWKB()以及一系列类似函数还完成从WKT或WKB到ST_Geometry转换。
下面为所有相关ST函数:
ST_GeomFromText—CreatesanST_Geometryfromatextrepresentationofanygeometrytype
ST_PointFromText—CreatesanST_Pointfromapointtextrepresentation
ST_LineFromText—CreatesanST_LineStringfromalinestringtextrepresentation
ST_PolyFromText—CreatesanST_Polygonfromapolygontextrepresentation
ST_MPointFromText—CreatesanST_MultiPointfromamultipointrepresentation
ST_MLineFromText—CreatesanST_MultiLineStringfromamultilinestringrepresentation
ST_MPolyFromText—CreatesanST_MultiPolygonfromamultipolygonrepresentation
ST_AsText—convertsanexistinggeometryintoatextrepresentation
ST_GeomFromWKB—CreatesanST_GeometryfromaWKBrepresentationofanygeometrytype
ST_PointFromWKB—CreatesanST_PointfromapointWKBrepresentation
ST_LineFromWKB—CreatesanST_LineStringfromalinestringWKBrepresentation
ST_PolyFromWKB—CreatesanST_PolygonfromapolygonWKBrepresentation
ST_MPointFromWKB—CreatesanST_MultiPointfromamultipointWKBrepresentation
ST_MLineFromWKB—CreatesanST_MultiLineStringfromamultilinestringWKBrepresentation
ST_MPolyFromWKB—CreatesanST_MultiPolygonfromamultipolygonWKBrepresentation
ST_AsBinary—convertsanexistinggeometryvalueintowell-knownbinaryrepresentation.
关于wkt和wkb的编码方式会在下一节讲。
下面就使用sql语句来进行数据的插入,执行下面的sql语句:
INSERTINTOsensitive_areas
(area_id,name,area_size,type,zone,fid)
VALUES(1,'
SummerhillElementarySchool'
67920.64,'
school'
sde.ST_PolyFromText('
polygon
((5228,5828,5823,5223,5228))'
0));
在sensitive_areas表中插入一条记录。
insert.png
打开ArcMap,加载这个featureClass,可以看到新增加的这条记录。
arcmap.png
更新记录
UPDATEsensitive_areas
SETzone=sde.st_pointfromtext('
polygon((5230,5830,5823,5023,5028))'
0))
WHEREarea_id=1;
删除记录
DELETEFROMsensitive_areasWHEREnames
(SELECTsa.names
FROMsensitive_areassa,hazardous_siteshs
WHEREsde.st_overlaps(sa.zone,sde.st_buffer(hs.location,.01))=1);
2查询
在进行空间查询的时候会用到索引,其中infomix使用R树索引,PostgreSQ使用GeneralizedSearchTree(GiST)R-tree索引,oracle和DB2使用网格索引。
在oracle中进行查询会执行下面的步骤:
1)首先比较grid和查询范围,找出在查询范围内的所有grid。
2)找出在这些grid内的所有要素。
3)将这些要素的外包络矩形和查询范围比较,找出所有在查询范围内以及和查询范围相交的要素。
4)使用ST函数进行最终过滤(一般使用ST_Interse
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STGeometry 教程