您好,欢迎访问一九零五行业门户网

ArcSDE for SQLServer的SQL操作

题记 大家对oracle数据库的sql操作应该不陌生吧,也就是出于所谓的效率而言,使用sql语句对arcgis对象(要素类)进行直接的读操作或写操作,目前来说在电信行业运用较广泛,这方面的知识我就不再赘述。那么可能会有人问,那么在sql server数据库是否可以使用
题记大家对oracle数据库的sql操作应该不陌生吧,也就是出于所谓的效率而言,使用sql语句对arcgis对象(要素类)进行直接的读操作或写操作,目前来说在电信行业运用较广泛,这方面的知识我就不再赘述。那么可能会有人问,那么在sql server数据库是否可以使用sql语句直接操作arcsde的对象呢?以前不可以,但是现在可以了。
系统需求为什么说上面故意卖个关子呢,也就是需要强调一下系统需求的重要性。也就是说从sql server 2008版本后,才可以的。自从2008版本之后,ms提供了为空间数据专有的也就是ms自己的存储:geometry和geogrphy。
关键词arcsde 地理数据库支持使用 microsoft 的几何类型和地理类型存储矢量数据。sql server 2008 中提供这些类型,因此无需单独安装即可使用。这个与比较繁杂的oracle的sql操作引用st_shapelib.dll来说就显得非常方便了。
microsoft 几何类型(geometry)与现有 gis 空间数据类型相似:使用任意平面(如已定义的投影)内的坐标。
microsoft 地理类型(geometry)用于旋转椭球体上的数据,该数据与纬度和经度坐标一同存储。
geometry 和 geography 数据类型支持十一种空间数据对象或实例类型。但是,这些实例类型中只有七种“可实例化”;可以在数据库中创建并使用这些实例(或可对其进行实例化)。这些实例的某些属性由其父级数据类型派生而来,使其在 geometrycollection 中区分为 points、 linestrings、polygons 或多个 geometry 或 geography 实例。
如图所示,geometry 和 geography 数据类型的七种可实例化类型为 point、multipoint、linestring、multilinestring、polygon、multipolygon 和geometrycollection。只要特定实例的格式正确,即使未显式定义该实例,geometry 和 geography 类型也可识别该实例。例如,如果您使用stpointfromtext() 方法显式定义了一个 point 实例,只要方法输入的格式正确,geometry 和 geography 便将该实例识别为 point。如果您使用stgeomfromtext() 方法定义了相同的实例,则 geometry 和 geography 数据类型都将该实例识别为 point。
怎么使用默认情况下,sql server 中的 arcsde 地理数据库使用 arcsde 压缩二进制类型,因此如果您要使用 microsoft 几何或地理类型进行存储,必须
(1) 将 sde_dbtune 表中 defaults 配置关键字下的 geometry_storage 参数更改为 geometry 或 geography
(2) 指定可在创建要素类时指定 geometry 或 geography 的 geometry_storage 参数的配置关键字。
如果多数用户在多数时候都使用几何或地理类型存储数据,则只应更改 defaults 关键字下的 geometry_storage 参数。如果只有部分数据将以几何或地理类型进行存储,则应在创建要素类时指定一个单独的关键字。为您提供了两个关键字:geometry 和 geography,也可以创建自己的自定义关键字。
用户在创建要素类或者导入要素类的过程中可以选择以上关键字,那么这些数据就已ms的几何或者地理类型进程存储了,那么用户也就可以使用sql对数据进行操作了。
操作步骤因为geometry和geogrphy基本类似,那么本文就已geometry存储来演示一下怎么在arcsde的sql server使用sql对空间数据进行操作
创建表//如果是geogrphy存储就替换一下即可create table spatialtable1( id int identity (1,1),geomcol1 geometry,geomcol2 as geomcol1.stastext() );go 
使用arcsde命令进行注册c:/users/gis>sdelayer -o register -l spatialtable1,geomcol1 -e a -t geometry -u sde -p sde -i esri_sdesqlarcsde 10.0 for sql server build 775 fri sep 17 11:45:27 2010layer administration utility-----------------------------------------------------successfully created layer. 
插入数据insert into spatialtable1 (geomcol1,objectid)values (geometry::stgeomfromtext('polygon ((0 0, 0 150, 150 150, 150 0, 0 0))', 0),1);goinsert into spatialtable1 (geomcol1,objectid)values (geometry::stgeomfromtext('polygon ((0 0, 0 75, 75 75, 75 0, 0 0))', 0),1);goinsert into spatialtable1 (geomcol1,objectid)values (geometry::stgeomfromtext('polygon ((100 100, 300 100, 300 300, 100 300, 100 100))', 0),3);go
使用空间关系操作declare @geom1 geometry;declare @geom2 geometry;declare @result geometry;select @geom1 = geomcol1 from spatialtable1 where objectid = 1;select @geom2 = geomcol1 from spatialtable1 where objectid = 3;select @result = @geom1.stinterdiv(@geom2);select @result.stastext();
微软为我们提供了丰富的空间关系操作符
? 确定两个实例是否包含相同的点集stequals? 确定两个实例是否不相接stdisjoint? 确定两个实例是否相交stintersects? 确定两个实例是否接触sttouches? 确定两个实例是否重叠stoverlaps? 确定两个实例是否交叉stcrosses? 确定某个实例是否在另一个实例内部stwithin? 确定某个实例是否包含另一个实例stcontains? 确定某个实例是否与另一个实例重叠stoverlaps? 确定两个实例是否存在空间关系strelate? 确定两个几何图形中的点之间的最短距离stdistance
大家可能都知道oracle的一些关系操作符,有些走空间索引,有些不走空间索引,那么我们在使用这些关系操作符时一定要使用走空间索引的,那么对sqlserver来说也是一样的。
在特定条件下,空间索引支持以下面向集合的几何图形方法:stcontains()、stdistance()、stequals()、stintersects()、stoverlaps()、sttouches() 和 stwithin()。若要使空间索引支持这些方法,必须在查询的 where 或 join on 子句中使用这些方法,并且必须在采用如下常规形式的谓词中执行这些方法:
geometry1.method_name(geometry2) comparison_operatorvalid_number 
若要返回非 null 结果,geometry1 和 geometry2 必须具有相同的空间引用标识符 (srid)。否则,该方法将返回 null。
查询几何图形实例的属性和行为点数所有非空 geometry 实例都由“点”组成。这些点表示在其上绘制几何图形的面的 x 和 y 坐标。geometry 提供许多用于查询实例的点的内置方法。
? 返回构成实例的点数。stnumpoints(geometry 数据类型)? 返回实例中的特定点stpointn? 返回位于实例上的某个任意点stpointonsurface? 返回实例的起始点ststartpoint? 返回实例的终点stendpoint? 返回点实例的 x 坐标stx(geometry 数据类型)? 返回点实例的 y 坐标sty? 返回多边形实例的几何中心点stcentroid 
维度非空 geometry 实例可以为零维、一维或二维。零维 geometries(例如 point 和 multipoint)没有长度或面积。一维对象(例如 linestring 和 multilinestring)具有长度。二维实例(例如 polygon 和 multipolygon)具有面积和长度。空实例将报告为 -1 维,并且geometrycollection 将根据其内容类型报告一个面积。
? 返回实例的维度stdimension? 返回实例的长度stlength? 返回实例的面积starea 
闭合“闭合的”geometry 实例是指起始点和终点相同的图形。polygon 实例是闭合的。point 实例不是闭合的。
环是一个简单、闭合的 linestring 实例。
? 确定实例是否闭合stisclosed? 确定实例是否为环stisring? 返回多边形实例的外环stexteriorring? 返回多边形的内环数stnuminteriorring? 返回多边形的指定内环stinteriorringn 
空间引用标识符 (srid)空间引用标识符 (srid) 是指定 geometry 实例所在的坐标系的标识符。两个拥有不同 srid 的实例是不可比的。
? 设置或返回实例的 sridstsrid 
此属性可以进行修改。
更多详见:http://msdn.microsoft.com/zh-cn/library/bb964708.aspx
两种数据类型之间的差别两种空间数据类型的行为经常非常相似,但在数据存储方式和操作方式上存在某些重要的差别。
http://msdn.microsoft.com/zh-cn/library/bb964711.aspx
构造几何图形实例http://msdn.microsoft.com/zh-cn/library/bb895335.aspx
-------------------------------------------------------------------------------------------------------
qq一群:              78773981
qq二群:            225989940
blog:               http://blog.csdn.net/linghe301
weibo:            http://www.weibo.com/linghe301
-------------------------------------------------------------------------------------------------------
其它类似信息

推荐信息