使用ST_Geometry存储空间数据(oracle)
OracleSpatial中SDO_Geometry详细说明

OracleSpatial中SDO_Geometry详细说明Oracle Spatial中SDO_Geometry详细说明在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储⽅式,分别有:⼆进制Long Raw 、ESRI的ST_Geometry以及基于Oracle Spatial的SDO_Geometry等等。
关于这⼏种⽅式的各⾃的优缺点不是主要的探讨的⽅向,这些我们可以通过ArcGIS中的ArcGIS Server Help得到相关的帮助。
这⾥主要是学习关于基于Oracle Spatial的存储⽅式,通过这种存储⽅式⼏何列Shape的字段类型为mdsys.sde_geometry类型。
Oracle Spatial定义的SDO_GEOMETRY类型为:CREATE TYPE sdo_geometry AS OBJECT (SDO_GTYPE NUMBER, //前⾯字符串为字段名;后⾯字符串为字段类型SDO_SRID NUMBER,SDO_POINT SDO_POINT_TYPE,SDO_ELEM_INFO SDO_ELEM_INFO_ARRAY,SDO_ORDINATES SDO_ORDINATE_ARRAY);其中sdo_geometry AS OBJECT ,标识该类型为对象类型。
开始我们可以想想它为ArcObjects 中的Geometry对象(本来要素的shape字段中的对象就是Geometry),⽽不要理解他是怎么样组织的。
⾄于该类型中的SDO_POINT_TYPE、SDO_ELEM_INFO_ARRAY、SDO_ORDINATE_ARRAY也是Oracle Spatial⾃定义的类型和sdo_geometry 是⼀样的。
现在对sdo_geometry 类型中的各个参数简单的介绍:1、SDO_GTYPE :表⽰要存储的⼏何类型,如点线⾯。
它是通过NUMBER类型来表达的;2、SDO_SRID :⼏何的空间参考坐标系,类型也为NUMBER;3、SDO_POINT :如果⼏何类型点类型的话,就是存储点坐标,否则为空。
使用工具将空间数据导入Oracle

数据导入Oracle方法总结一、使用shp2sdo并结合SQL*Loader导入*.shp文件shp2sdo是Oracle提供的一个工具,帮助用户导入*.shp文件到Oracle Spatial中。
准备材料:shp2sdo.exe可执行文件、空间数据(此处以ArcGIS自带的World数据为例)在Windows操作系统下的导入步骤分为以下三步:1,在命令行下执行shp2sdo.exe文件。
并输入一个shapefile文件(此处为world30.shp)。
2,重新运行一个命令行窗口,用户登陆数据库后执行上步生成的SQL脚本(本例为tb_world30.sql)。
3,利用SQL*Loader执行第一步生成的*.ctl文件(tb_world30.ctl),把第二步生成的表加载至Oracle Spatial。
导入成功后,我们可以打印些数据看下:还可以登录到Oracle Enterprise Manager Console中查看生成的表的相关信息:二、使用Oracle的导入/导出(Imp/Exp)命令下面我们把scott用户下的COURSE表导入lxf用户。
首先,将scott用户的Course表导出至D盘下:然后,将D盘中的.dmp数据导入lxf用户:在Oracle Enterprise Manager Console中查看如下:三、用SQL*Loader工具向Oracle中导入Excel表格数据准备工作:在目标目录的菜单栏中选择“工具-文件夹选项”,选择弹出对话框的“查看”选项卡,找到“隐藏已知文件的扩展名”,将其勾去。
如下图红框所示:步骤如下:1,将待导入的Excel表格另存为制表符分隔格式(如果没有这一选项,说明安装不全,此时可以直接将Excel表中的数据复制到记事本中,如右图),取名为text.txt,保存到相应目录下。
2,在数据库中创建相应的表:3,在text.txt文件所在目录下新建一个文本文档,命名为input.ctl, 输入以下内容后保存。
利用Spatial处理空间数据

值
意思
1 点元素
2 线元素
1003 外部多边形元素
2003 内部多边形元素
要向表mylake中插人一个带有小岛的湖泊,执行的SQL语句为:
IVSEKru m 叫lake,
fan h+ire
第 4期
周 虹,等:利用即侧al处理空间数据
541
11-416 Calhoim',一一name
SD O_ O RD IN AT ES M DSYS.SD O_ O RDINATE_ A RRAY);
其 中 SDO _ G TYPE是一个用来定义整体形状的数字,即是线、球等等,它是一个四位数的整数,并且有
序排列,第一位代表了该图的维数,第二位代表了线形表示,这对三维或四维空间图形很重要,在二维图形
CRE AT EI N DEXm ylake_id xO Nm ylake(shape)
IND E XT YPEI SM DSYS.SP ATIAL_ I NDEX;
第一 句 创 建了一个想要建立的表,并包含一个shape字段以存储空间数据,至于MDSYS.SD O_ G EOM-
ETRY数据类型,我们以后再讨论;第二句告诉 OracleS patial在表 mylake中的空间数据,表 user_ sd o
签、测量结果等等.SDO_POINT定义如下:
CR EAT E T YPEa do_ p oint_typeA SO BJECr(
x NU M BE R ,
Y NU M BE R ,
ZN U MB ER);
如 果 是 一 个二维几何图形,Z置为NULL.当然,有时整个 SDO-POINT值也可置为 NULL.
表示坐标,并能自动考虑地球表面曲率因素.当然,对于一个小的湖泊,用笛卡儿坐标系就足够了.另一个
有关ArcSDE的文档

1.1在 Oracle 中注册 ST_Geometry 列在 Oracle 中,于 ST_Geometry 列中创建空间索引将会注册列以使用特定空间参考。
有关使用 SQL 在 Oracle 中创建空间索引的示例,请参阅为包含 ST_Geometry 列的表创建空间索引。
1.2 使用 SQL 为包含 ST_Geometry 列的表创建空间索引地理数据 » 管理地理数据库 » 使用 SQL » SQL 空间和栅格数据类型 » 将 ST_Geometry 与 SQL 搭配使用 创建空间索引时,需要提供以下信息: 索引名称 包含待定义索引的空间列的表的名称 待定义索引的空间列的名称 格网大小(仅 Oracle 或 DB2 等使用格网索引的数据库需要) 以下是在每种受支持的数据库中为 ST_Geometry 列创建索引的示例。
步骤: 1. 打开 SQL 编辑器并连接到数据库。
2. 对于 Oracle、 PostgreSQL、 DB2 以及 Informix, 使用 CREATE INDEX 语句创建空间索引。
对于 SQLite,使用 CreateSpatialIndex 函数。
Oracle CREATEINDEXsa_idx ONsensitive_areas(zone) INDEXTYPEISsde.st_spatial_index PARAMETERS('st_grids=1,3,0 st_srid=4326'); CREATEINDEXhs_idx ONhazardous_sites(location) INDEXTYPEISsde.st_spatial_index PARAMETERS('st_grids=1,0,0 st_srid=4326');1.3 创建远程 Windows 服务器中的 ArcSDE 服务在 Windows 服务器上安装 可使用 sdeservice 命令在远程服务器上创建 ArcSDE 服务。
ST_Geometry教程

ArcGIS GeoDatabase ST_Geometry1 ST_Geometry oracle1.1ArcSDE for Oracle ST_Geometry ST_Geometry ISO OGC SQL oracle oracle ST_Geometry SDENBLOB B F ST_Geometry ( )ArcGIS 9.3 ArcSDE geodatabases for Oracle ST_Geometry SQL3 user-defined data types ST_GeometryST_Geometry1 SQL ISO SQL/MM2 SQL34 SQL geodatabase ArcGIS 9.3 ArcSDE geodatabases for Oracle ST SDE schema union SQL "sde.ST_Union", 9 2 SDE schema1.2ST_GeometryName TypeENTITY NUMBER(38)NUMPTS NUMBER(38)MINX FLOAT(64)MINY FLOAT(64)MAXX FLOAT(64)MAXY FLOAT(64)MINZ FLOAT(64)MAXZ FLOAT(64)MINM FLOAT(64)MAXM FLOAT(64)AREA FLOAT(64)LEN FLOAT(64)SRID NUMBER(38)POINTS BLOBEntity (linestring, multilinestring, multipoint, multipolygon, point, or polygon st_geom_util NUMPTSMinx, miny, maxx, maxyAreaLenSRID ID ST_Spatial_References POINTS1.3ST_Geometry ST_Geometry NumberST_AreaST_LenST_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 SELECT name, st_area(geometry)FROM us_statesORDER BY name;1.4 ST_GeometryST_LineString, ST_MultiLineString, ST_MultiPoint, ST_MultiPolygon, ST_Point, ST_Polygon ST_Geometry . ST_Geometry . ST_LineString, ST_MultiLineString, ST_MultiPoint, ST_MultiPolygon, ST_Point and ST_PolygonST_Point 1 xy SRID ST_PointMETHODFINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULTArgument Name Type In/Out Default?PT_X NUMBER INPT_Y NUMBER INSRID NUMBER INSQL> insert into sample_pt values (ST_Point (10, 20, 1) );2 xy z SRID ST_PointMETHODFINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULTArgument Name Type In/Out Default?PT_X NUMBER INPT_Y NUMBER INPT_Z NUMBER INSRID NUMBER INSQL> insert into sample_pt values (ST_Point (10, 20, 5, 1) );3 xy z m SRID ST_Point METHODFINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULTArgument Name Type In/Out Default?PT_X NUMBER INPT_Y NUMBER INPT_Z NUMBER INMEASURE NUMBER INSRID NUMBER INSQL> insert into sample_pt values (ST_Point (10, 20, 5, 401, 1) );1.5oracle ST_GeometryCREATE TYPE l i k u W P D F -X C h a n g e ww .d o c u -t r a c k .c m C c t o b y N O !P D F -X C h a n g e w w .d o c u -t r a c k .c oUNLIMITED TABLESPACECREATE LIBRARYCREATE OPERATORCREATE INDEXTYPECREATE PUBLIC SYNONYMDROP PUBLIC SYNONYMThe CONNECT and RESOURCE roles include these privileges.2 ST_Geometry SQL oracleoracle ST_Geometry SQL oracle external procedure agent extproc SQL oracle listener oracle SDEST_Geometry PL/SQL PL/SQL c ST_SHAPELIBoracle listener oracle windows1 oracle oraclehome\NETWORK\ADMIN2 listener.ora oracle3 listener.ora (PROGRAM = extproc) ST_SHAPELIB ST_SHAPELIB (ENVS="EXTPROC_DLLS=C:\ProgramFiles\ArcGIS\ArcSDE\ora10gexe\bin\st_shapelib.dll")“C:\Program Files\ArcGIS\ArcSDE\ora10gexe\bin\st_shapelib.dll”ST_SHAPELIB4 listener.oralistener.ora# listener.ora Network Configuration File: D:\oracle\product\10.2.0\db_1 \network\admin\listener.ora# Generated by Oracle configuration tools.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# listener.ora Network Configuration File: D:\oracle\product\10.2.0\db_1 \network\admin\listener.ora# Generated by Oracle configuration tools.SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = PLSExtProc)(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)(PROGRAM = extproc)(ENVS="EXTPROC_DLLS=C:\ProgramFiles\ArcGIS\ArcSDE\ora10gexe\bin\st_shapelib.dll")))LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))(ADDRESS = (PROTOCOL = TCP)(HOST = zbc)(PORT = 1521))))3 ST_GeometryST_Geometry 21 SDE9.3 ST_Geometry 9.3 dbtune2 SQL1. sqlplus oracle CREATE TYPEUNLIMITED TABLESPACECREATE LIBRARYCREATE OPERATORCREATE INDEXTYPECREATE PUBLIC SYNONYMDROP PUBLIC SYNONYMThe CONNECT and RESOURCE roles include these privileges.2. SQL ST_Geometry SDE ST_GeometrysqlCREATE TABLE sensitive_areas (area_id integer, name varchar(128),area_size float, type varchar(10), zone sde.st_geometry);st_geometry sde schema51.png3. sdelayer SDE12 ST_Geometry34 (points, lines, or polygons)5Geometry sdelayersdelayer -o register -l <table,column> -e <entity_mask> [Spatial_Index][{-R <SRID> | [Spatial_Ref_Opts]}] [-P {BASIC | HIGH}]{[-C NONE] | [-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 -o register -l sensitive_areas,zone -e a -C area_id,SDE -u data -p sa -t ST_GEOMETRY-o register -l /ST_Geometry -e -C id/SDE SDE sde id USER ID -u -p -tsdelayer.pngbarry~~~~~~~~~~~~~4. catalog sensitive_areas sde polygonSQL FeatureClass(oracle), ST_GeometryFeatureClass1insert ST_Geometry :1 WKT2 WKBOGC ST_PolyFromText() ST_PointFromWKB() WKT WKB ST_GeometrySTST_GeomFromText—Creates an ST_Geometry from a text representation of any geometry typeST_PointFromText—Creates an ST_Point from a point text representationST_LineFromText—Creates an ST_LineString from a linestring text representationST_PolyFromText—Creates an ST_Polygon from a polygon text representationST_MPointFromText—Creates an ST_MultiPoint from a multipoint representationST_MLineFromText—Creates an ST_MultiLineString from a multilinestring representationST_MPolyFromText—Creates an ST_MultiPolygon from a multipolygon representationST_AsText—converts an existing geometry into a text representationST_GeomFromWKB—Creates an ST_Geometry from a WKB representation of any geometry typeST_PointFromWKB—Creates an ST_Point from a point WKB representation ST_LineFromWKB—Creates an ST_LineString from a linestring WKB representationST_PolyFromWKB—Creates an ST_Polygon from a polygon WKB representationST_MPointFromWKB—Creates an ST_MultiPoint from a multipoint WKB representationST_MLineFromWKB—Creates an ST_MultiLineString from a multilinestring WKB representationST_MPolyFromWKB—Creates an ST_MultiPolygon from a multipolygon WKB representationST_AsBinary—converts an existing geometry value into well-known binary representation.wkt wkbsql sqlINSERT INTO sensitive_areas (area_id , name, area_size, type , zone,fid) VALUES (1, 'Summerhill Elementary School', 67920.64, 'school', sde.ST_PolyFromText('polygon((52 28,58 28,58 23,52 23,52 28))', 0));sensitive_areasinsert.pngArcMap featureClassarcmap.pngUPDATEsensitive_areasSET zone= sde.st_pointfromtext('polygon ((52 30,58 30,58 23,50 23,50 28))', 0))WHERE area_id = 1;DELETE FROM sensitive_areas WHERE names(SELECT sFROM sensitive_areas sa, hazardous_sites hsWHERE sde.st_overlaps (sa.zone, sde.st_buffer (hs.location,.01)) = 1);2infomix R PostgreSQ Generalized Search Tree (GiST) R-tree oracle DB2oracle1 grid grid2 grid34 ST ST_Intersects ST_ContainsSELECT "Sensitive Areas", "Hazardous Sites"FROM sensitive_areas sa, hazardous_sites hsWHERE sde.st_overlaps (sa.zone, sde.st_buffer(hs.location,.01)) = 1;3CREATE INDEX sa_idx ON sensitive_areas(zone)INDEXTYPE IS sde.st_spatial_indexPARAMETERS('st_grids=1,3,0 st_srid=0');createindex.png4ESRI ArcGIS Desktop SQL sqlINSERT INTO SDE.ST_SPATIAL_REFERENCES VALUES (GCS_North_American_1983,1,-400,-400,1000000000,-100000,10000,-100000,10000,9.999E35,-9.999E35,9.999E35,-9.999E35,9.999E35,-9.999E35,9.999E35,-9.999E35,4269,'GCS_North_American_1983','PROJECTED',NULL,'GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983", SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT ["Degree",0.0174532925199433]]','ArcSDE SpRef');4Wkt Wkbwkt(OGC well-known text) wkb(OGC well-known binary) OGC wkt wkbwkt wkbwktGeometrytype Textdescription Comment ST_Point 'pointempty' emptypointST_Point 'pointzempty'empty point with z-coordinateST_Point 'pointmempty'empty point withmeasureST_Point 'pointzmempty'empty point with z-coordinate andmeasureST_Point 'point(10.0510.28)' point ST_Point 'point z( 10.05 10.28 2.51 )'ST_Point 'point m( 10.05 10.28 4.72 )'poST_Point 'point zm(10.05 10.28 2.514.72 )'point withz-coordinate andmeasureST_LineString 'linestringempty' emptylinestringST_LineString 'linestringzempty'empty linestring with z-coordinatesST_LineString 'linestringmempty'empty linestring with measuresST_LineString 'linestring zm empty'empty linestring with z-coordinates and measuresST_LineString 'linestring (10.05 10.28 ,20.95 20.89 )'linestringST_LineString'linestring z(10.05 10.283.09, 20.95 31.984.72, 21.9829.80 3.51 )'linestring withz-coordinatesST_LineString'linestring m(10.05 10.285.84, 20.95 31.98 9.01, 21.98linestring withmeasures29.80 12.84 )'ST_LineString 'linestring zm(10.05 10.283.09 5.84, 20.95 31.984.729.01, 21.98 29.80 3.5112.84)'linestring withz-coordinates andmeasuresST_Polygon 'polygonempty' emptypolygonST_Polygon 'polygonzempty'empty polygon with z-coordinatesST_Polygon 'polygonmempty'empty polygon withmeasuresST_Polygon 'polygonzmempty'empty polygon with z-coordinates andmeasuresST_Polygon 'polygon ((10 10, 10 20, 2020, 20 15, 10 10))'polygonST_Polygon 'polygon z((10 10 3, 10 20 3, 20 20 3, 20 15 4, 10 10 3))'ST_Polygon 'polygon m((10 10 8, 10 20 9, 20 20 9, 20 15 9, 10 10 8 ))'ST_Polygon 'polygon zm((10 10 3 8, 10 203 9, 20 20 3 9, 20 154 9, 1010 3 8 ))'polygon withz-coordinates andmeasuresST_MultiPoint 'multipointempty' emptymultipointST_MultiPoint 'multipointzempty'empty multipoint with z-coordinatesST_MultiPoint 'multipointmempty'empty multipoint with measuresST_MultiPoint 'multipoint zm empty'empty multipoint with z-coordinates and measuresST_MultiPoint 'multipoint (10 10, 20 20)'pointsST_MultiPoint 'multipoint z(10 10 2, 20 203)'multipoint withz-coordinatesST_MultiPoint 'multipoint m(10 10 4, 20 205)'multipoint withmeasuresST_MultiPoint 'multipoint zm(10 10 2 4, 2020 3 5)'multipoint withz-coordinates andmeasuresST_MultiLineStringST_MultiLineString'ST_MultiLineString'ST_MultiLineString'wi coordinatesand measuresST_MultiLineString1020.95 20.89 ),( 20.9520.89, 31.92 21.45))'multilinestringST_MultiLineString4.5),( 20.95 20.89 4.5, 31.9221.45 3.6))'multilinestring with z-coordinatesST_MultiLineString 1028 8.4, 20.95 20.89 9.5),(20.95 20.89 9.5, 31.92 21.458.6))'multilinestringwith measuresST_MultiLineString '1tesand measures9.5, 31.92 21.45 3.6 8.6))'ST_MultiPolygon 'multipolygonempty' emptymultipolygonST_MultiPolygon 'multipolygon z empty'empty multipolygon with z-coordinatesST_MultiPolygon 'multipolygon m empty'empty multipolygon with measuresST_MultiPolygon 'multipolygonzmempty' emptyST_MultiPolygon'multipolygon (((10 10, 1020, 20 20, 20 15 , 10 10), (5040, 50 50, 60 50, 60 40, 5040)))'multipolygonST_MultiPolygon 'multipolygon z(((10 10 7, 1020 8, 20 20 7, 20 15 5, 10 107), (50 40 6, 50 50 6, 60 505, 60 40 6, 50 40 6)))'multipolygon withz-coordinatesST_MultiPolygon 'multipolygon m(((10 10 2, 1020 3, 20 20 4, 20 15 5, 10 102), (50 40 7, 50 50 3, 60 504, 60 40 5, 50 40 7)))'multipolygon withmeasuresST_MultiPolygon 'multipolygon zm(((10 10 7 2,1020 8 3, 20 20 7 4, 20 15 55, 10 10 7 2), (50 40 6 7, 5050 6 3, 60 50 5 4, 60 40 6 5,50 40 6 7)))'multipolygon withz-coordinates andmeasureswkbbyte : 1 byteuint32 : 32 bit unsigned integer (4 bytes) double : double precision number (8 bytes) Building Blocks : Point, LinearRingPoint {double x;double y;};LinearRing {uint32 numPoints;Point points[numPoints];}enum wkbGeometryType { wkbPoint = 1,wkbLineString = 2, wkbPolygon = 3, wkbMultiPoint = 4, wkbMultiLineString = 5, wkbMultiPolygon = 6, wkbGeometryCollection = 7 };enum wkbByteOrder {wkbXDR = 0, Big Endian wkbNDR = 1 Little Endian };WKBPoint {byte byteOrder;uint32 wkbType; 1 Point point;}WKBLineString {byte byteOrder;uint32 wkbType; 2uint32 numPoints;Point points[numPoints];}WKBPolygon {byte byteOrder;uint32 wkbType; 3uint32 numRings;LinearRing rings[numRings];}WKBMultiPoint {byte byteOrder;uint32 wkbType; 4uint32 num_wkbPoints;WKBPoint WKBPoints[num_wkbPoints];}WKBMultiLineString {byte byteOrder;uint32 wkbType; 5uint32 num_wkbLineStrings;WKBLineString WKBLineStrings[num_wkbLineStrings]; }wkbMultiPolygon {byte byteOrder;uint32 wkbType; 6uint32 num_wkbPolygons;WKBPolygon wkbPolygons[num_wkbPolygons];}WKBGeometry {union {WKBPoint point;WKBLineString linestring;WKBPolygon polygon;WKBGeometryCollection collection;WKBMultiPoint mpoint;WKBMultiLineString mlinestring;WKBMultiPolygon mpolygon;}};WKBGeometryCollection {byte byte_order;uint32 wkbType; 7uint32 num_wkbGeometries;WKBGeometry wkbGeometries[num_wkbGeometries]}point(1,1) WKB0101000000000000000000F03F000000000000F03FWKBPointByte order : 01WKB type : 01000000X : 000000000000F03FY : 000000000000F03Fbyte order little-endian (NDR) big-endian (XDR)WKB type wkbGeometryType . 1-7 Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, and GeometryCollection.x,y double5SQLSDE SQL1ST_Containstruesde.st_contains (g1 sde.st_geometry, g2 sde.st_geometry)st_contains SQL functions reference ST_CrossestrueST_MultiPoint/ST_Polygon,ST_MultiPoint/ST_LineString,ST_Linestring/ST_LineString,ST_LineString/ST_Polygon, andST_LineString/ST_MultiPolygonsde.st_crosses (g1 sde.st_geometry, g2 sde.st_geometry)st_crosses SQL functions reference ST_Disjointtruesde.st_disjoint (g1 sde.st_geometry, g2 sde.st_geometry)st_disjoint SQL functions reference ST_Equalstruesde.st_equals (g1 sde.st_geometry, g2 sde.st_geometry)st_equals SQL functions referenceST_Intersectstrue st_disjointsde.st_intersects (g1 sde.st_geometry, g2 sde.st_geometry)st_intersects SQL functions reference ST_Overlapstruesde.st_overlaps (g1 sde.st_geometry, g2 sde.st_geometry)st_overlaps SQL functions referenceST_Touches truesde.st_touches (g1 sde.st_geometry, g2 sde.st_geometry)st_touches SQL functions referenceST_Withintrue ST_Containssde.st_within (g1 sde.st_geometry, g2 sde.st_geometry)st_within SQL functions referenceSQL SQL WHERE2ST_Buffersde.st_buffer (g1 sde.st_geometry, distance double_precision)st_buffer SQL functions referenceConvexHullConvexHull nullsde.st_convexhull (g1 sde.st_geometry)st_convexhull SQL functions referenceST_DifferenceDifferencesde.st_difference (g1 sde.st_geometry, g2 sde.st_geometry)st_difference SQL functions referenceST_Intersectionsde.st_intersection (g1 sde.st_geometry, g2 sde.st_geometry)st_intersection SQL functions reference ST_SymmetricDiffsde.st_symmetricdiff (g1 sde.st_geometry, g2 sde.st_geometry)st_symmetricdiff SQL functions reference ST_Unionsde.st_union (g1 sde.st_geometry, g2 sde.st_geometry)st_union SQL functions reference ST_Distancesde.st_distance (g1 sde.st_geometry, g2 sde.st_geometry)st_distance SQL functions referenceST_Aggr_ConvexHullmultipolygon multipolygon ST_Aggr_IntersectionST_Aggr_UnionST_DimensionST_CoordDimzST_Is3DST_ZST_MaxZST_MinZST_IsMeasuredST_MST_GeometryTypeST_EntityST_PointST_XST_YST_ZST_MST_LengthST_AreaST_LineStringST_StartPoint—Returns the first point of the specified ST_LineString ST_EndPoint—Returns the last point of an ST_LineStringST_PointN—Takes an ST_LineString and an index to nth point and returns that pointST_Length—Returns the length of an ST_LineString as a double-precision numberST_NumPoints—Evaluates an ST_LineString and returns the number of points in its sequenceas an integerST_IsRing—A predicate function that returns 1 (TRUE) if the specified ST_LineString is aring and 0 (FALSE) otherwiseST_IsClosed—A predicate function that returns 1 (TRUE) if the specified ST_LineString isclosed and 0 (FALSE) if it is notST_MultiLineStringST_Length —returns the cumulative length of all of its ST_LineString elements as a double-precision number.ST_IsClosed—returns 1 (TRUE) if the specified ST_MultiLineString is closed and 0 (FALSE)if it is not closed.ST_PolygonST_Area—Returns the area of an ST_Polygon as a double-precision number ST_Centroid—Returns an ST_Point that represents the center of theST_Polygon's envelopeST_ExteriorRing—Returns the exterior ring of an ST_Polygon as anST_LineStringST_InteriorRingN—Evaluates an ST_Polygon and an index and returns the nth interior ring asan ST_LineStringST_NumInteriorRing—Returns the number of interior rings that anST_Polygon containsST_PointOnSurface—Returns an ST_Point that is guaranteed to be on the surface of thespecified ST_Polygon10 ST_MultiPolygonST_Area —returns a double-precision number that represents the cumulative ST_Area of anST_MultiPolygon's ST_Polygon elements.ST_Centroid — an ST_Point that is the center of an ST_MultiPolygon's envelope.ST_PointOnSurface —returns an ST_Point that is guaranteed to be normal to the surface ofone of its ST_Polygon elements.11ST_NumGeometries— returns a count of the individual elements in a collection ofgeometries.ST_GeometryN — you can determine which geometry in the multipart geometry exists inposition N; N being a number you provide with the funciton12ST_SRIDST_EqualSRS13ST_BoundaryST_IsSimpleST_IsClosedST_IsRingST_IsEmptyST_Envelope。
使用工具上传空间数据到Oracle Spatial

使用工具上传空间数据到Oracle Spatial MapInfo的easyLoaderOracle自带的工具shp2sdo配合使用SQL*Loader与Shp2SDO就可以把ESRI的Shape文件上载到Oracle Spatial中。
下载:/technetwork/database/options/spatial/downloads/shp2sdo-158114.zip Oracle Spatial并没有像ArcGIS那样有一套从桌面到数据库到服务器到开发包的全方位GIS产品体系,因此向Oracle中加载数据相比用ArcGIS要麻烦得多,同时也没有那么多的数据源格式的支持。
Oracle本身则提供了一个工具shp2sdo,可以帮劣你导入Shapefile到Oracle Spatial中,返个工具的使用分三个步骤:第一步,使用shp2sde工具生成脚本和数据:利用ArcSDE或者MapGIS提供的工具SDO_Geometry是Oracle Spatial的图形存储方式,ArcSDE也支持这种类型,不过ArcSDE缺省的方式ST_Geometry。
如果要修改缺省的数据类型,请打开ArcSDE\ora11gexe\etc\dbtune.sde, 修改GEOMETRY_STORAGE "ST_GEOMETRY" 为GEOMETRY_STORAGE " SDO_GEOMETRY"也可以使用ArcCatalog-〉NewFeatureClass,在Configration Keyword选项出现时,选择use configuration key word->SDO_Geometry如果使用的MapGIS是6.5或者其更高版本的话,就可以使用MapGIS的属性库管理子系统、编辑子系统所提供的工具来上载MapGIS空间数据。
Oracle Spatial 空间数据库教程

m_session.Open(); // 打开一个会话 m_database.Open(m_session, dbaseName, userName, password) ; // 建立数据库连接, dbaseName是数据库名称
(4)SDO_ELEM_INFO
SDO_ELEM_INFO是一个可变长度的数组,每3个数作为一 个元素单位,用于解释坐标是如何存储在SDO_ORDINATES 数组中的。本文把组成一个元素的3个数称为3元组。一个3 元组包含以下3部分的内容: l SDO_STARTING_OFFSET
SDO_STARTING_OFFATES数组中的存储位置。它的值从1开始, 逐渐增加。
元数据表说明
Oracle Spatial的元数据表存储了有空间数据的数据表名称、 空间字段名称、空间数据的坐标范围、坐标参考信息以及坐 标维数说明等信息。用户必须通过元数据表才能知道 ORACLE数据库中是否有Oracle Spatial的空间数据信息。一般 可以通过元数据视图(USER_SDO_GEOM_METADATA)访 问元数据表。元数据视图的基本定义为:
(2)SDO_SRID SDO_SRID也是一个NUMBER型的数值,它用于标识与几 何对象相关的空间坐标参考系。如果SDO_SRID为空 (null),则表示没有坐标系与该几何对象相关;如果该 值不为空,则该值必须为MDSYS.CS_SRS表中SRID字段 的一个值,在创建含有几何对象的表时,这个值必须加入 到描述空间数据表元数据的 USER_SDO_GEOM_METADATA视图的SRID字段中。 Oracle Spatial规定,一个几何字段中的所有几何对象都必 须为相同的SDO_SRID值。
VALUES ('GEOD_CITIES', 'LOCATION',
ArcSDE_for_oracle_SQL操作空间数据的原理...

直接使用SQL的原理以及配置方法最近一直接到售前的请求,客户现场成功部署SDE for Oracle后,在部署SQL直接操作空间数据的时候始终无法配置成功,现把SQL访问空间数据的原理以及配置过程中经常碰到的问题详细的介绍一下。
原理从ArcSDE9.2 for oracle开始,提供了使用直接调用SQL来操作空间数据的方法,但是得进行配置才能使用,而且空间数据的存储方式只能是ST_GEOMETRY才支持直接SQL。
由于这些空间操作的函数都是GIS的核心算法,并且这些算法都是非常消耗CPU的算法,所以ESRI是以动态库而不是PL/SQL(适用于批量数据处理)的方式提供的这部分函数,然后在oracle中使用C的external procedure对动态库进行调用。
调用的结构图如下所示:调用过程如下:1.用户进程执行SQL,在sqlplus执行select sde.st_astext(shape) from sde.test,在数据库中调用的顺序是:上述三个对象的定义如下sde.astext:Sde.st_geometry_operator.st_astext_f:CREATE OR REPLACE PACKAGE BODY "SDE"."ST_GEOMETRY_OPERATORS"IS--st_AstextFunction st_astext_f(prim SDE.st_geometry)Return clobISspref SDE.spx_util.spatial_ref_record_t;temp varchar2(1);text_clob clob := empty_clob();rc number;BeginIf prim IS NULL THENReturn NULL;End If;If prim.numpts = 0and prim.entity = 0Thentext_clob := 'EMPTY';return(text_clob);End If;spref.srid := prim.srid;rc := SDE.st_spref_util.select_spref(spref);If rc != SDE.st_type_user.se_success THENraise_application_error (SDE.st_type_util.st_no_srid,'srid'||spref.srid||' does not exist in st_spatial_references table.');End If;text_clob := ' ';SDE.st_geometry_shapelib_pkg.astext(spref.srid,spref.x_offset,spref.y _offset,spref.xyunits,spref.z_offset,spref.z_scale,spref.m_offset,spref.m_scale,spref.Definition,prim.nump ts,prim.entity,prim.points,text_clob);Return(text_clob);End st_astext_f;Sde.st_geometry_shapelib_pkg.st_astext的存储过程的代码如下:CREATE OR REPLACE PACKAGE BODY "SDE"."ST_GEOMETRY_SHAPELIB_PKG" AS Procedure astext (srid IN number,false_x IN number,false_y IN number,xyunits IN number,false_z IN number,zunits IN number,false_m IN number,munits IN number,proj_str IN varchar2,pls_numpts IN number,pls_entity IN number,points IN blob,shptxt IN Out clob)ASlanguage cname "AsText"library st_shapelibWITH CONTEXTparameters (CONTEXT,srid ocinumber,false_x ocinumber,false_y ocinumber,xyunits ocinumber,false_z ocinumber,zunits ocinumber,false_m ocinumber,munits ocinumber,proj_str string, proj_str Indicator short,proj_str length int,pls_numpts ocinumber,pls_entity ocinumber,points ociloblocator, points Indicator short,shptxt ociloblocator, shptxt Indicator short )2.在执行的Sde.st_geometry_shapelib_pkg.st_astext程序过程中,调用了一个astext函数(该函数在SDEHOME\bin\st_shapelib.dll(windows),$SDEHOME/lib/libst_shapelib.so(unix,linux)定义的)。
SQL空间查询ST_Geometry配置

(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(Key = EXTPROC01)) ) (CONNECT_DATA = (SID = PLSExtProc01) (PRESENTATION= = RO) )
SQL 空间查询 ST_Geometry 配置
自从 ArcSDE 推出 ST_Geometry 存储类型后,我们就可以通过 SQL 语句方式
查询空间数据。使用 ST_Geometry 类型存储空间数据,具有以下优势: 1)通过
SQL 函数( ISO SQL/MM 标准)直接访问空间数据; 2)使用 SQL 语句存储、检
二、Linux/Unix 操作系统配置过程
listener.ora: LISTENER =
(DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.189.0.102)(PORT =
) 在配置过程时需要注意以下内容: 1、在配置了监听文件后,需要重新启动数据库的监听程序; 2、在定义监听文件中环境时(SID_LIST=>SID_DESC=>ENV),EXTPROC_DLLS 值为
ArcSDE 安装目录下的“st_shapelib”类库,还需要添加一个“SID_NAME” 值; 3、在上述两个监听文件中的“ADDRESS->IPC->KEY”的值必须是一样的; 4、在 listener 文件中的 SID_NAME 和在 tnsnames 文件中的 SID in CONNECT_DATA 名称必须是一样的。
mysql geometry 方法

MySQL中的Geometry方法用于处理和操作空间数据,包括点、线、多边形等几何对象。
下面是一些常用的Geometry方法:
1.ST_GeomFromText(wkt:将Well-Known Text(WKT)格式的字符串转换为Geometry对象。
2.ST_AsText(geom):将Geometry对象转换为Well-Known Text(WKT)格式的字符串。
3.ST_Point(x, y):创建一个二维点对象。
4.ST_LineString(p1,p2,...):创建一个线对象,由一系列点构成。
5.ST_Polygon(outer_ring, inner_ring1, inner_ring2,...):创建一个多边形对象,由外环和内环(可选)组成。
6.ST_Buffer(geom, distance):根据指定距离创建一个缓冲区。
7.ST_Intersection(geom1, geom2):计算两个几何对象的交集。
8.ST_Union(geom1, geom2):计算两个几何对象的并集。
9.ST_Distance(geom1, geom2):计算两个几何对象之间的最短距离。
10.ST_Area(geom):计算几何对象的面积。
这只是一小部分常用的Geometry方法,还有很多其他方法可用于更复杂的空间操作。
您可以参考MySQL官方文档或其他资源以获取更详细的信息和示例。
1。
sql geometry类型的相关sql函数

sql geometry类型的相关sql函数SQL Geometry类型的相关SQL函数Geometry类型是一种在SQL中用于处理空间数据的数据类型。
它允许存储和操作与地理或几何形状相关的数据。
在本文中,我们将探讨一些与Geometry类型相关的SQL函数,以及它们的用法和示例。
1. ST_GeomFromText函数ST_GeomFromText函数用于将文本表示的几何对象转换为Geometry类型。
它接受一个表示几何对象的文本参数,并返回一个Geometry对象。
例如,我们可以使用以下语句将一个点的文本表示转换为Geometry对象:SELECT ST_GeomFromText('POINT(1 1)');这将返回一个表示点(1, 1)的Geometry对象。
2. ST_GeomFromWKB函数ST_GeomFromWKB函数用于将二进制表示的几何对象转换为Geometry类型。
它接受一个表示几何对象的二进制参数,并返回一个Geometry对象。
例如,我们可以使用以下语句将一个点的二进制表示转换为Geometry对象:SELECTST_GeomFromWKB(X'0101000000000000000000F03F0000000000 00F03F');这将返回一个表示点(1, 1)的Geometry对象。
3. ST_AsText函数ST_AsText函数用于将一个Geometry对象转换为文本表示。
例如,我们可以使用以下语句将一个Geometry对象转换为文本:SELECT ST_AsText(ST_GeomFromText('POINT(1 1)'));这将返回一个表示点(1, 1)的文本。
4. ST_AsBinary函数ST_AsBinary函数用于将一个Geometry对象转换为二进制表示。
例如,我们可以使用以下语句将一个Geometry对象转换为二进制:SELECT ST_AsBinary(ST_GeomFromText('POINT(1 1)'));这将返回一个表示点(1, 1)的二进制。
使用ST_Geometry存储空间数据(oracle)

一、简介ArcSDE for Oracle提供了ST_Geometry类型来存储几何数据。
ST_Geometry是一种遵循ISO和OGC 规范的,可以通过SQL直接读取的空间信息存储类型。
采用这种存储方式能够更好的利用oracle的资源,更好的兼容oracle的特征,比如复制和分区,并且能够更快的读取空间数据。
使用ST_Geometry存储空间数据,可以把业务数据和空间数据存储到一张表中(使用SDENBLOB方式业务数据和空间数据是分开存储在B表和F表中的),因此可以很方便的在业务数据中增加空间数据(只需要在业务表中增加ST_Geometry列)。
使用这种存储方式还能够简化多用户的读取,管理(只需要管理一张表)。
从ArcGIS 9.3开始,新的ArcSDE geodatabases for Oracle 会默认使用ST_Geometry 方式来存储空间数据。
它实现了SQL3规范中的用户自定义类型(user-defined data types),允许用户使用ST_Geometry类型创建列来存储诸如界址点,街道,地块等空间数据。
使用ST_Geometry类型存储空间数据,具有以下优势:1)通过SQL函数(ISO SQL/MM 标准)直接访问空间数据;2)使用SQL语句存储、检索操纵空间数据,就像其他类型数据一样。
3)通过存储过程来进行复杂的空间数据检索和分析。
4)其他应用程序可以通过SQL语句来访问存储在geodatabase 中的数据。
从ArcGIS 9.3开始,新的ArcSDE geodatabases for Oracle 要求所以ST 函数调用的时候前面都要加上SDE schema名称。
例如:要对查询出来的空间数据进行union操作,则SQL函数需要这样写:"sde.ST_Union",在9,2版本之前,可以不加SDE schema名称。
二存储结构ST_Geometry 存储空间数据的结构如下表:Name TypeENTITY NUMBER(38)NUMPTS NUMBER(38)MINX FLOAT(64)MINY FLOAT(64)MAXX FLOAT(64)MAXY FLOAT(64)MINZ FLOAT(64)MAXZ FLOAT(64)MINM FLOAT(64)MAXM FLOAT(64)AREA FLOAT(64)LEN FLOAT(64)SRID NUMBER(38)POINTS BLOBEntity为要素类型,包括(linestring, multilinestring, multipoint, multipolygon, point, or polygon)。
ArcSDE空间数据与索引分开存储

ArcSDE表和索引分开存储在我们使用ArcSDE对矢量数据和栅格数据进行海量存储的时候,往往从资料上或者有经验的前辈提醒,有必要将相关的表与索引分开存储。
也就是说当用户访问一个表,首先会先访问表的索引,然后根据索引来快速定位访问表的内容,那么表和表的索引就会占据大量的磁盘I/O资源,从而导致访问表的效率下降。
所以当我们在建立表和相关索引时,应该将表和索引分配在不同的表空间中,将相应的表空间存储到不同的磁盘上,这样访问表时,就可以分别使用不同的磁盘I/O,提高访问效率。
那么我们在ArcSDE管理数据怎么将这些数据分开存储呢?以Oracle数据库为例,首先大家需要了解几个关键字。
表空间表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。
所有的数据库对象都存放在指定的表空间中。
但主要存放的是表,所以称作表空间。
(该概念摘抄于百度百科)在对ArcSDE进行Post Installation时,会默认给用户建立一个400MB 的SDE表空间,该表空间里面会建立一些SDE的Schema,主要是SDE管理空间数据的相关表(SDE系统表、版本相关表、同步复制表、SDE管理空间对象表、投影信息表等),那么用户的数据该怎么管理呢?建议用户的数据尽量不要放在SDE的表空间中,这样既可以将用户数据与SDE数据分开管理,比较有条理性,而且也不至于对发生(将用户数据放到SDE表空间中)操作用户数据误操作破坏SDE相关表的情况。
分磁盘存储分磁盘存储就是将我们的空间数据存储到一个磁盘上,空间索引数据存储到另外一个磁盘上,也就是说存储到不同的物理磁盘上。
比方说你使用的多块硬盘、磁盘阵列的话就非常适用于此,但是这里面有个误区就是,往往有用户理解为在我的一块硬盘上的不同分区都是分磁盘存储,也就是说我建立两个表空间分别存储在D盘和E盘,这样其实还是一个磁盘,所以说这个概念大家也应该弄清楚。
数据读取原理为什么要将数据与索引分开呢,理解起来就是一个串行读取和并行读取的不同了。
pgsql 常用空间函数

PostgreSQL的空间函数非常丰富,可以应用于处理各种复杂的空间数据操作。
以下是一些常用的PostgreSQL空间函数:- ST_X(geometry):返回几何对象的X坐标- ST_Y(geometry):返回几何对象的Y坐标- ST_Length(geometry):返回线段或曲线的长度- ST_StartPoint(geometry):返回线段或曲线的起点- ST_EndPoint(geometry):返回线段或曲线的终点- ST_Perimeter(geometry):返回封闭线的周长- ST_Area(geometry):返回封闭面的面积- ST_IsClosed(geometry):判断线段是否闭合- ST_IsEmpty(geometry):判断几何对象是否为空- ST_IsSimple(geometry):判断几何对象是否为简单(无自交)- ST_SRID(geometry):返回空间参考标识符(SRID)- ST_MakePoint(x, y [, z]):创建一个点对象- ST_MakeLine(point1, point2 [, point3 ...]):创建一个线对象- ST_MakePolygon(ring):创建一个多边形对象- ST_Union(geom1, geom2 [, geom3 ...]):合并多个几何对象- ST_Difference(geom1, geom2):计算两个几何对象的差集- ST_Intersection(geom1, geom2):计算两个几何对象的交集- ST_Buffer(geom, distance):根据给定的距离创建缓冲区- ST_Distance(geom1, geom2):计算两个几何对象之间的距离-ST_Contains(geom1, geom2):判断一个几何对象是否包含另一个几何对象-ST_Within(geom1, geom2):判断一个几何对象是否在另一个几何对象内以上是一些常见的PostgreSQL空间函数,实际上PostgreSQL和其扩展PostGIS提供了更多的空间函数,具体使用哪些函数需要根据实际的空间数据处理需求来确定。
geometry 数据库默认值

geometry 数据库默认值"geometry" 通常在地理空间数据库中使用,特别是在像PostgreSQL 和 MySQL 这样的系统中。
在地理空间数据库中,`geometry` 字段用于存储地理或空间数据。
关于 "默认值",在大多数数据库系统中,你可以为任何字段设置默认值。
对于 `geometry` 字段,通常的默认值是 `NULL`。
例如,在 PostgreSQL 中,你可能会看到这样的定义:```sqlCREATE TABLE my_table (id serial primary key,name varchar(255),location geometry DEFAULT NULL);```在这个例子中,`location` 字段是一个 `geometry` 类型,并且它的默认值是 `NULL`。
如果你想为 `geometry` 字段设置一个特定的默认值,你可能需要使用某种方法来插入这个值。
例如,在 PostgreSQL 中,你可以使用`ST_GeomFromText` 函数来创建一个默认的`POINT`:```sqlCREATE TABLE my_table (id serial primary key,name varchar(255),location geometry DEFAULT ST_GeomFromText('POINT(0 0)'));```在这个例子中,`location` 字段的默认值是一个位于原点(0,0) 的点。
但是要注意的是,大多数情况下,你可能不直接修改或设置`geometry` 字段的默认值。
相反,你可能会使用某种方法或函数来自动填充这些字段,例如在插入新记录时基于其他字段的值或其他条件来计算或选择一个值。
geometry 类型

geometry 类型Geometry 类型是一种在数据库中用于存储地理位置信息的数据类型。
这个类型的引入极大地扩展了数据库的功能,为许多应用带来了便捷性和实用性。
本文将从定义、使用、存储、查询四个方面详细介绍 Geometry 类型。
定义Geometry 类型是一种在数据库中存储地理位置信息的数据类型。
在数据库中,我们可以通过创建一个 geometry 类型的字段来存储地理位置相关的信息,包括点、线、面等等。
这些数据可以用来表示地图上的位置,路径、区域等等。
不同的地理位置信息可以通过 geometry 类型进行比较、统计、查询等等操作。
使用在使用 Geometry 类型时,我们需要先创建一个表,并在这个表中添加一个 geometry 类型的字段。
这个字段的声明方式有些不同,需要注意的是,这个字段的类型是 geometry,而不是普通的字符串或数值类型。
在使用 Geometry 类型时,我们可以利用一些关键字来帮助我们正确地存储和查询地理位置信息。
例如,在存储点信息时,我们可以使用 POINT 或者 coords,分别表示一个点和这个点的坐标。
在存储线或者面的信息时,我们需要分别用 LINESTRING 和 POLYGON 关键字来标识这些数据。
存储基于 Geometry 类型,数据库会自动将地理位置信息转化为二进制数据进行存储和管理。
在使用 Geometry 类型时,我们不能直接保存地理位置信息,而是需要将这些数据转化为二进制格式(WKB)或者文本格式(WKT)进行存储。
通常情况下,我们将数据存储为 WKB 格式,因为该格式更节省存储空间,且对于地理位置信息的处理更加方便。
查询Geometry 类型在查询地理位置信息时提供了很多方便的函数和操作符。
通过这些函数和操作符,我们可以比较容易地查询出与某个地理位置信息相关的数据,例如,判断某个点是否在某个区域内,或者查找距离某一点最近的其他点等等。
除此之外,Geometry 类型还提供了一些针对空间数据的索引方法,例如,空间 R 树(用于索引线、面等空间数据)、四叉树(用于索引点数据)等,这些方法可以大大加快对大规模地理位置数据的查询和分析速度。
达梦数据库 空间函数

达梦数据库空间函数达梦数据库是一种基于关系型数据库管理系统的软件,其内置了丰富的空间函数,可用于处理空间数据。
空间函数是指在空间数据处理中常用的一些函数,包括空间数据类型转换、空间数据分析、空间数据查询等等。
下面将介绍一些常用的达梦数据库空间函数。
1. ST_GeomFromTextST_GeomFromText函数用于将文本格式的几何数据转换为几何对象。
它的语法如下:ST_GeomFromText(text, srid)其中,text表示文本格式的几何数据,srid表示几何数据的空间参考编号。
例如:SELECT ST_GeomFromText('POINT(1 2)', 4326);该语句将返回一个SRID为4326、坐标为(1, 2)的点对象。
2. ST_AsTextST_AsText函数用于将几何对象转换为文本格式。
它的语法如下:ST_AsText(geometry)其中,geometry表示几何对象。
例如:SELECT ST_AsText(ST_GeomFromText('POINT(1 2)', 4326));该语句将返回文本格式的几何数据POINT(1 2)。
3. ST_BufferST_Buffer函数用于对几何对象进行缓冲区分析。
它的语法如下:ST_Buffer(geometry, distance)其中,geometry表示几何对象,distance表示缓冲区的距离。
例如:SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)', 4326), 0.1);该语句将返回一个以点(1, 2)为圆心、半径为0.1的缓冲区对象。
4. ST_UnionST_Union函数用于将多个几何对象合并为一个几何对象。
它的语法如下:ST_Union(geometry1, geometry2, ...)其中,geometry1、geometry2等表示几何对象。
geom函数

geom函数今天我们来聊一下PostgreSQL中的“geom函数”。
首先,geom 函数是PostgreSQL中一个非常重要的空间数据类型处理函数,它可以将一条记录中的空间数据类型转化成为WKB格式的空间数据。
针对这个函数,我们可以通过以下步骤来逐一了解。
首先,我们需要创建一个测试表和添加一些数据。
我们以“myTable”为例来创建一个表,并添加两个字段:id(主键)和geom (空间数据)。
```sqlCREATE TABLE myTable (id serial primary key,geom geometry(point, 4326));```接下来,我们添加几条测试数据。
```sqlINSERT INTO myTable (geom) VALUES(ST_GeomFromText('POINT(-122.257 37.8712)', 4326)),(ST_GeomFromText('POINT(-122.258 37.8715)', 4326)),(ST_GeomFromText('POINT(-122.258 37.8725)', 4326));```这里我们插入了三个点数据,分别为(-122.257,37.8712)、(-122.258,37.8715)和(-122.258,37.8725)。
接下来,我们使用geom函数来查看这些数据的WKB格式。
```sqlSELECT ST_AsEWKB(geom) FROM myTable;```这里,“ST_AsEWKB”函数可以将空间数据类型转化为WKB格式。
执行以上命令,我们可以得到以下结果:```st_asewkb--------------------------------------------------------\x010*******e6100000f0b7c44bc7735ac000a8fa5740d54040\x010*******e61000008e3dcb5de4745ac002fb9b7cc0d34040\x010*******e61000007652140de8745ac00d5eaf2ed0d34040(3 rows)```注意,这些WKB格式的数据就可以在程序中进行传输、存储等操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、简介
ArcSDE for Oracle提供了ST_Geometry类型来存储几何数据。
ST_Geometry是一种遵循ISO和OGC 规范的,可以通过SQL直接读取的空间信息存储类型。
采用这种存储方式能够更好的利用oracle的资源,更好的兼容oracle的特征,比如复制和分区,并且能够更快的读取空间数据。
使用ST_Geometry存储空间数据,可以把业务数据和空间数据存储到一张表中(使用SDENBLOB方式业务数据和空间数据是分开存储在B表和F表中的),因此可以很方便的在业务数据中增加空间数据(只需要在业务表中增加ST_Geometry列)。
使用这种存储方式还能够简化多用户的读取,管理(只需要管理一张表)。
从ArcGIS 9.3开始,新的ArcSDE geodatabases for Oracle 会默认使用ST_Geometry 方式来存储空间数据。
它实现了SQL3规范中的用户自定义类型(user-defined data types),允许用户使用ST_Geometry类型创建列来存储诸如界址点,街道,地块等空间数据。
使用ST_Geometry类型存储空间数据,具有以下优势:1)通过SQL函数(ISO SQL/MM 标准)直接访问空间数据;2)使用SQL语句存储、检索操纵空间数据,就像其他类型数据一样。
3)通过存储过程来进行复杂的空间数据检索和分析。
4)其他应用程序可以通过SQL语句来访问存储在geodatabase 中的数据。
从ArcGIS 9.3开始,新的ArcSDE geodatabases for Oracle 要求所以ST 函数调用的时候前面都要加上SDE schema名称。
例如:要对查询出来的空间数据进行union操作,则SQL函数需要这样写:"sde.ST_Union",在9,2版本之前,可以不加SDE schema名称。
二存储结构
ST_Geometry 存储空间数据的结构如下表:
Name Type
ENTITY NUMBER(38)
NUMPTS NUMBER(38)
MINX FLOAT(64)
MINY FLOAT(64)
MAXX FLOAT(64)
MAXY FLOAT(64)
MINZ FLOAT(64)
MAXZ FLOAT(64)
MINM FLOAT(64)
MAXM FLOAT(64)
AREA FLOAT(64)
LEN FLOAT(64)
SRID NUMBER(38)
POINTS BLOB
Entity为要素类型,包括(linestring, multilinestring, multipoint, multipolygon, point, or polygon)。
具体的值对应的类型可以通过st_geom_util 存储过程获得。
NUMPTS为坐标点的个数
Minx, miny, maxx, maxy 几何的外包络矩形
Area 几何的面积
Len 几何的周长
SRID 空间参考系ID,对应ST_Spatial_References 表中的空间参考信息
POINTS 坐标序列
三、操作函数
下面是一些针对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的面积。
SELECT name, st_area(geometry)
FROM us_states
ORDER BY name;
四、构造ST_Geometry对象
ST_LineString, ST_MultiLineString, ST_MultiPoint, ST_MultiPolygon, ST_Point, and ST_Polygon 全部是ST_Geometry的子类. ST_Geometry和他的子类共享属性和方法. ST_LineString, ST_MultiLineString, ST_MultiPoint, ST_MultiPolygon, ST_Point and ST_Polygon的构造函数的定义是相同的,构造函数的名字就是类型名。
ST_Point是个有限对象(只有一个点),因此可以使用下面的方法来构造。
1,使用xy坐标和SRID来构造ST_Point
1,使用xy坐标和SRID来构造ST_Point
METHOD
FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
Argument Name Type In/Out Default?
PT_X NUMBER IN
PT_Y NUMBER IN
SRID NUMBER IN
SQL> insert into sample_pt values (ST_Point (10, 20, 1) );
2,使用xy坐标、高程值(z)和SRID来构造ST_Point
METHOD
FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
Argument Name Type In/Out Default?
PT_X NUMBER IN
PT_Y NUMBER IN
PT_Z NUMBER IN
SRID NUMBER IN
SQL> insert into sample_pt values (ST_Point (10, 20, 5, 1) );
3,使用xy坐标、高程值(z),量测值(m)和SRID来构造ST_Point
METHOD
FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
Argument Name Type In/Out Default? PT_X NUMBER IN
PT_Y NUMBER IN
PT_Z NUMBER IN MEASURE NUMBER IN
SRID NUMBER IN
SQL> insert into sample_pt values (ST_Point (10, 20, 5, 401, 1) ); 五用户权限限制
在oracle使用ST_Geometry ,用户必须有以下权限:
CREATE TYPE
UNLIMITED TABLESPACE
CREATE LIBRARY
CREATE OPERATOR
CREATE INDEXTYPE
CREATE PUBLIC SYNONYM
DROP PUBLIC SYNONYM
The CONNECT and RESOURCE roles include these privileges.。