GeoSQL4种数据库比较1.doc_第1页
GeoSQL4种数据库比较1.doc_第2页
GeoSQL4种数据库比较1.doc_第3页
GeoSQL4种数据库比较1.doc_第4页
GeoSQL4种数据库比较1.doc_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

GeoSQL 4种数据库比较组员:黄梅、姚红、王涛、陈铁桥组长:黄梅指导老师:张山山、王盼成引言:gis专业进行二次开发需要空间数据库,现在市面上主要有四大数据库能支持空间数据,他们分别为:Oracle Spatial、Sql Sever 2008、Postgis、DB2。我们主要进行的就是这四种数据库在空间数据上的支持、类型和操作比较等。话不多说,我们进入具体的实践环节吧。目录1、引言32、数据导入42.1Microsoft SQL Server 2008加载数据详解42.2Oracle Spatial加载数据详解52.3 Postgis加载数据详解72.4DB2加载数据详解103、空间数据类型的比较113.1Microsoft SQL Server 2008支持的空间数据类型113.2Oracle Spatial支持的空间数据类型123.3Postgis支持的空间数据类型143.4DB2支持的空间数据类型153.5 综合比较174、空间索引的比较1741 Microsoft SQL Server 2008支持的空间索引1742 Oracle Spatial支持的空间索引2243 Postgis支持的空间索引2444DB2支持的空间索引2745 综合的效率比较295、坐标系与投影转换的比较295.1坐标系295.2 投影转换305.2.1Microsoft SQL Server 2008投影变换305.2.2Oracle Spatial支持的投影变换305.2.3Postgis支持的投影变换305.2.4DB2投影变换345.2.5 综合效率比较346、几大数据库支持空间数据的语法比较346.1Microsoft SQL Server 2008的语法346.2 Oracle Spatial 11g的语法346.3 Postgis的语法346.4 DB2的语法357、空间分析比较3571 空间查询72711基于空间关系的查询72712基于空间关系和属性特征的查询72713地址匹配查询7272 空间量算73721 求两点距离73722 求线要素长度73723 求面积7373 缓冲区分析的比较73731 Microsoft SQL Server 2008缓冲区的分析73732 Oracle Spatial 缓冲区分析73733 Postgis缓冲区分析73734 DB2缓冲区分析73735四大数据库缓冲区分析性能比较7474 叠加分析74741 Microsoft SQL Server 2008叠加分析74742 Oracle Spatial 叠加分析74743 Postgis叠加分析74744 DB2叠加分析7475 最短路径分析比较748、支持的平台 图形化的界面749、遇到的问题及解决方法781、引言因为有着对数据库知识的探索精神,所以我们小组在这次期末实习的选题中选择了四大空间数据库的分析比较,通过这次学习我们了解了很多课本上没有的知识,我们知道了更多,我们了解了更多,是的,不论是MSSql的庞大还是oracle、postgis的快捷都让我们感到深深的满足,这些知识正是我们所需要的,所追求的!因为笔者文笔有限,所以如果我们有哪些地方做的不好,请多多原谅。好的,下面请进入我们的空间数据库德天堂吧!2、数据导入2.1Microsoft SQL Server 2008加载数据详解sql 2008自带空间数据库,但是其不支持直接从shp文件导入,所以可以使用google公司提供的开源软件shp2sqlserver来进行导入,不过此软件不能导入太大的数据,我曾经对老师给的allriver这个拥有一百多万条数据的shp文件进行导入,进行了一个多小时,因为超时,所以被停止了导入,一共才导入了40万条数据,效率较低,其代码行格式为:Shp2sqlserver s 21416 “Data Source=.;Initial catalog=china;User Id=sa;Password=* F:dataDATAnet.shp”其中 -s 为投影编号,21416为srid的value值,data source是电脑名,initial catalog是要导入的数据库,user id是登陆用户名,password 是密码,F:dataDATAnet.shp是要导入的shp文件路径。注意:这种方法导入shp数据,如果数据量较大,所花费时间较多,以allriver表为例,作者导入allriver shp文件,一百多万条数据,花了一个小时二十六分钟,因为超时而意外停止,此时作者只导入了一百三十余万条数据。这个工具软件效率不行,可待提高的地方还有很多。2.2Oracle Spatial加载数据详解Oracle Spatial 空间数据加载的方法有多种,包括用SQL*Loader从文本文件中加载、在不同数据库之间交换空间数据(如Import/Export实用工具,可传输的表空间机制,从Oracle Spatial先前版本移植)、从外部格式导入等。下面将详细介绍使用Oracle实用工具SHP2SDO导入ESRI Shapefiler的方法。首先,要把shp文件转换分割成oracle可以导入的数据库文件,这个转换可以使用oracle提供的一个提供的工具shp2sdo,下载后把此工具复制到PATH变量包含的目录下,如oracle客户端安装后自动注册的环境变量是 path:C:Oracleproduct10.1.0Client_1bin。把此文件拷贝到该目录下,然后在dos下运行该工具,定位到我们的shp文件的位置。例如,现在要导入的shp文件名称是state.shp(shapefile包括至少三个文件state.shp state.dbf state.shx),在D:data目录下,我们在dos命令窗口下就应该这样操作:shp2sdo state states -i gid-s 8307 -g geom -d -x (-180,180) -y (-90,90) -t 0.5 v d其中,state即为本地的shp文件名(不加shp后缀);statearea为生成的文件名(同时也是将来导进数据库的表名);-i指定id序列,默认是id,即作为生成数据的唯一性标志,此列是不可能重复的,一般作为索引列;-s这是空间参考系统ID(spatial reference system ID)的缩写。默认是null,目前一般是8307(WGS84坐标系);-g geometry column指定sdo_geometry,默认是GEOM,此选项一般使用默认即可;-d代表含义是将分解后的ctl文件(控制文件)和data文件(数据存储文件)分别生成,如果没有该选项,则不会有单独的data文件生成,数据存储和控制都在ctl一个文件中; -x 表示x坐标的聚值范围,在GCS中表示经度的取值范围为-180180。同理,-y表示y坐标的取值范围。-t 代表容差大小;命令执行后,会生成三个文件,statearea.sql、statearea.ctl、stateare.data。分解完成后就是导入,这里仍然使用命令行的方式 执行shp2sdo的输出文件,向Oracle中加载数据:D:datasqlplus scott/tigerorcl-登录SQLstatearea.sqlSQLquit 导入ctl文件 D:datasqlldr pgg/pggControl=statearea 建立空间索引 D:datasqlplus scott/tigerorclSQLCREATE Index STATEAREA_idx ON STATEAREA (GEOM) INDEXTYPE is MDSYS.SPATIAL_INDEX; 至此空间数据导入完毕。2.3 Postgis加载数据详解这里以shp文件的转换为例:首先用shp2pgsql工具把shp文件转换为一个sql的文件,然后将这个sql导入到数据库中,分为这两个步骤就可以完成shp文件导入到postgis数据库中。具体说明:我的c盘有一个data的文件夹里面有中国1:25万的数据,具体路径如下C:dataallriver。然后还有一个psql的文件夹里面存放(.sql)的文件,具体路径如下C:ptsqlallriver.sql。我的postgis是安装在如下目录的:D:Program FilesPostgreSQL。下面我们具体完成下面的转换:(1)将shp转换为sql语句文件,命令行程序如下:D:Program FilesPostgreSQL8.3binshp2pgsql -s -4326 -W gbk C:dataallriver.shpallriverC:ptsqlallriver.sql-s 是指定坐标系统 我用的是4326(具体坐标系统的解释可以参见postgis中的spatial_ref_sys表)。-W是编码问题,我给的是gbk的编码(支持中文字符)。C:dataallriver.shp 是shp文件的路径。allriver是转换到数据库中的表名。C:ptsqlallriver.sql是转换后sql文件的名称和存放的路径。通过这条语句就可以完成shp到sql。(2)将allriver.sql导入到数据库中(我建立的是一个mydb的数据库)这个模板一定要选择postgis,只有这样建立的才是一个空间数据库。这个数据库是postgres所有,postgres的登陆密码是123456(在安装数据库时设置的)导入过程如下:D:Program FilesPostgreSQL8.3binpsql -d mydb -f C:ptsqlallriver.sql postgres password=123456psql -d 这个是指定数据库mydb -f C:ptsqlallriver.sql 就是数据库mydb导入allriver.sql的文件。postgres password=123456 数据库的所有者和其密码。这样就可以完成数据的导入,还有其他类型的数据导入在这里不多做介绍。2.4DB2加载数据详解DB2 UDB for Linux、UNIX 和 Windows 从 7.1 版开始就提供了 DB2 Spatial Extender,用于支持空间数据的存储、管理和修改,可以用专用于空间信息及其属性的结构来扩展已有的数据类型。由于有这样的空间扩展器中各种函数的支持,DB2可以对空间数据进行直接处理。对于空间数据shp文件,可直接导入,不用做数据类型的转换。以下即为使用 Spatial Extender 命令行工具 db2se将文件allriver.shp导入数据库SAMPLE的具体实现语句:Connect to SAMPLE /在对数据库进行操作之前,必须连入数据库db2se import_shape SAMPLE /指定导入的数据库-fileName E:/DB2/data/allriver.shp /指定将要导入的shp文件 -tableName allriver -createTableFlag 1 /创建导入后形成的数据表格 -spatialColumn shape /命名导入后的空间属性列-typeName ST_MultiLineString /说明数据类型-idColumn MYDC /指定ID属性列 -commitScope 1500 /规定范围-messagesFile allriver.msg /命名消息文件 注意:上面整个属于同一条语句,并且要注意的是,在DB2的命令行处理器中,认为回车键是语句结束符。3、空间数据类型的比较3.1Microsoft SQL Server 2008支持的空间数据类型(类型postgis 2种 、输入输出(2种)、)sql 2008的输入方式有两种方式,分别为text和wkb格式,两种方法范例分别为:1.geometry:STGeomFromText(point(2 2),srid(没有投影则为0)/geometry:STGeometry(linestring(2 2,4 3),srid)、geometry:STGeometry(polygon(0 0,3 4,2 1,0 0),srid);2.geometry:STGEomFromWKB(0x010200000003000000000000000000594000000000000059400000000000003440000000000080664000000000008066400000000000806640, srid);其输出方式也有三种方式分别为STAstext和STAsbinary以及其原本的输出方式。测试linstring(2 2,4 3);这个数据,三种方式输出分别为:其原本的输出结果是:0x0000000001140000000000000040000000000000004000000000000010400000000000000840语法为:select a;转换为text(STAsText)输出结果是LINESTRING (2 2, 4 3)语法为:select a.STAsText();转换为binary(STAsText)输出结果是:0x0102000000020000000000000000000040000000000000004000000000000010400000000000000840语法为:select a.STAsBinary();3.2Oracle Spatial支持的空间数据类型在Oracle中SDO_GEOMETRY数据类型是一个很有威力的结构。你可以用这个类型存储点、线串、多边形、面和立方体等几何体,同样还可以存储这些几何体的同构或异构集合。SDO_GEOMETRY中的SDO_GTYPE属性指定几何体类型(形状),SDO_ELEM_INFO属性和SDO_ORDINATES属性一起指定了几何体的坐标信息和连通性。SDO_POINT属性存储二维或三维的点的位置。简而言之,你可以将OGC简单特性规范12中提到的任何二维类型以及OGC GML 2.0和3.0规范中提到的大多数三维类型(不包括参数曲线和参数面)存储为一个SDO_GEOMETRY。除了几何结构外,你可以用合适的坐标系将空间参照和SDO_GEOMETRY对象相关联。如果坐标系是基于EPSG模型的,还可以在不同坐标系之间定义自己的转换路径。在应用程序中,你可以使用SDO_GEOMETRY数据类型将客户的位置、交货地点和竞争对手建模为一个二维空间的点。你可以将街道和高速路的位置和形状建模为线串、将城市边界建模为多边形。对于城市建模和资产管理应用,使用SDO_GEOMETRY类型列,你不仅可以存储位置,还可以将建筑物的精确结构存储为三维的立方体或者集合。SDO_GEOMETRY类型能够存储许多不同类型的空间数据,其中包括:点,可用来存储实体的位置坐标,例如,客户场所、店面位置、交货地点等。线串(line string),可用来存储某一路段的位置及形状。多边形和面,可用来存储城市的边界、商业区等。复杂的几何体,如多重多边形,可用来存储德克萨斯州、夏威夷和加州等地的边界。SDO_GEOMETRY的属性有:SDO_GTYPENUMBER SDO_SRIDNUMBER SDO_POINTMDSYS.SDO_POINT_TYPE SDO_ELEM_INFOMDSYS.SDO_ELEM_INFO_ARRAY SDO_ORDINATESMDSYS.SDO_ORDINATE_ARRAY下面是SDO_GEOMETRY每个属性的用处:SDO_GTYPE属性,表示几何体实际形状的类型(点、线串、多边形、集合、多重点、多重线串或者多重多边形)。如,SDO_GTYPE为2001时,表示二维的点;若为3001时,表示三维的点。SDO_SRID属性,指定空间参考系(坐标系)的ID。几何体的位置和形状都在该参考系中确定。如果几何体是一个点(如客户的位置),你可以把它的坐标存储到SDO_GEOMETRY的SDO_POINT属性中。如果几何体是一个任意形状(如街区网络或城市边界),则可以把它的坐标存储到SDO_ORDINATES和SDO_ELEM_INFO数组属性:SDO_ORDINATES属性存储所有几何体元素的坐标。SDO_ELEM_INFO规定在SDO_ORDINATES数组中,一个新的元素从什么地方开始,怎么连接(通过直线还是弧),是点、线串还是多边形。3.3Postgis支持的空间数据类型3.4DB2支持的空间数据类型当我们启用一个数据库来执行各种空间操作时,DB2 Spatial Extender为数据库提供了一个结构化空间数据类型的等级表,如表1,在这个表中,白色框中的数据类型是实例化的数据类型(instantiable types),而阴影框中的是非实例化的数据类型(uninstantiable types)。Instantiable data types 包括 ST_Point, ST_LineString, ST_Polygon, ST_GeomCollection, ST_MultiPoint, ST_MultiPolygon, and ST_MultiLineString.uninstantiable types包括 ST_Geometry, ST_Curve, ST_Surface, ST_MultiSurface, and ST_MultiCurve. 数据类型的等级包括以下几种: Data types for single-unit features运用ST_Point, ST_LineString, and ST_Polygon等数据类型来存储坐标;表示可自觉形成一个独立单位的地理特征的数据类型,例如:个人住宅和孤立的湖泊。 Data types for multi-unit features运用ST_MultiPoint, ST_MultiLineString, and ST_MultiPolygon等数据类型来存储坐标;表示由多个单位或部分组成的地理特征的数据类型,例如:运河系统和岛群的胡。 A data type for all features表示各种地理特征的数据类型;对于不能确定属于那种数据类型的数据,就可以用ST_Geometry。3.5 综合比较4、空间索引的比较41 Microsoft SQL Server 2008支持的空间索引在sql 2008中,空间索引使用B树构建,也就是说这些索引必须按照b树的线性顺序表示二维空间数据,在导入空间索引之前,sql先实现对空间的分层均匀分解。索引创建过程会将空间分解成一个四级“网络层次结构”。这些级别指的是:“第一级”、“第二级”、“第三级”、和“第四级”。 每个后续级别都会进一步分解其上一级,因此上一级别的每个单元都包含下一级别的整个网格。在给定级别上,所有网格沿两个轴都有相同数目的单元(例如 4x4 或 8x8),并且单元的大小都相同。 一般语法为:CREATE SPATIAL INDEX index_the_geom ON dbo.jumingdi (the_geom)USING GEOMETRY_GRID WITH (BOUNDING_BOX =(0, 0, 60, 60), GRIDS =(LEVEL_1 = MEDIUM,LEVEL_2 = MEDIUM,LEVEL_3 = MEDIUM,LEVEL_4 = MEDIUM), CELLS_PER_OBJECT = 16, PAD_INDEX = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY 其中:using 为指定分割方案:有两种分割方案:geometry_grid和geography_gird两种; with(空间索引参数) bounding_box 为指定定义边界框四个坐标的一个数值四元组:左下角的最小 x 坐标和最小 y 坐标,以及右上角的最大 x 坐标和最大 y 坐标。grids为定义分割方案中每一级别的网格密度,参数如下:LEVEL_1指定第一级(顶级)网格。LEVEL_2指定第二级网格。LEVEL_3指定第三级网格。LEVEL_4指定第四级网格。LOW为给定级别的网格指定可能的最低网格密度。LOW 等于 16 个单元(4x4 网格)。MEDIUM 为给定级别的网格指定中等网格密度。MEDIUM 等于 64 个单元(8x8 网格)。HIGH为给定级别的网格指定可能的最高网格密度。HIGH 等于 256 个单元(16x16 网格)。cells_per-object=n为指定分割过程可以为索引中的单个空间对象使用的每个对象的分割单元格数:n 可以是介于 1 到 8192(包括 1 和 8192)之间的任何整数。每个对象的默认单元格数为 16。如果传递的数字无效或者该数字大于指定分割的最大单元格数,则会引发错误。PAD_INDEX = ON | OFF 指定索引填充。默认值为 OFF。ONfillfactor 指定的可用空间百分比应用于索引的中间级页。OFF 或不指定 fillfactor考虑到中间级页上的键集,将中间级页填充到接近其容量的程度,以留出足够的空间,使之至少能够容纳索引的最大的一行。PAD_INDEX 选项只有在指定了 FILLFACTOR 时才有用,因为 PAD_INDEX 使用由 FILLFACTOR 指定的百分比。如果为 FILLFACTOR 指定的百分比不够大,无法容纳一行,数据库引擎将在内部覆盖该百分比以允许最小值。中间级索引页上的行数永远都不会小于两行,无论 fillfactor 的值有多小。FILLFACTOR = fillfactor指定一个百分比,表示在索引创建或重新生成过程中数据库引擎应使每个索引页的叶级别达到的填充程度。fillfactor 必须为介于 1 至 100 之间的整数值。默认值为 0。如果 fillfactor 为 100 或 0,数据库引擎将创建叶级页达到其填充容量的索引。SORT_IN_TEMPDB = ON | OFF 指定是否在 tempdb 中存储临时排序结果。默认值为 OFF。DROP_EXISTING = ON | OFF 指定应删除并重新生成已命名的先前存在的空间索引。默认值为 OFF。ON删除并重新生成现有索引。指定的索引名称必须与当前的现有索引相同;但可以修改索引定义。例如,可以指定不同的列、排序顺序、分区方案或索引选项。OFF如果指定的索引名称已存在,则会显示一条错误。使用 DROP_EXISTING 不能更改索引类型。ALLOW_ROW_LOCKS = ON | OFF 指定是否允许使用行锁。默认值为 ON。ON在访问索引时允许使用行锁。数据库引擎确定何时使用行锁。OFF不使用行锁。ALLOW_PAGE_LOCKS = ON | OFF 指定是否允许使用页锁。默认值为 ON。ON在访问索引时允许使用页锁。数据库引擎确定何时使用页锁。OFF不使用页锁。42 Oracle Spatial支持的空间索引Oracle Spatial: 快速R-树索引和四叉树索引SQL:Create index on ()Indextype is mdsys.spatial_indexParameters(空间索引参数设定);其中,空间索引参数包括:tablespace(存储空间索引的表空间)、work_tablespace(工作表空间)、layer_gtype(几何类型)、sdo_indx_dims(维数)、sdo_dml_batch_size(批量大小)、sdo_level()空间索引定义 每一个空间索引的信息取决于该索引是一个R -树索引或一个四叉树索引。 对于一个R -树索引,空间索引中包含下表显示的列。列名数据类型用途NODE_IDNUMERIC树节点唯一的ID号码NODE_LEVELNUMERIC定义在树节点。叶节点为第1级,而他们的父节点是2级,依此类推INFOBLOB其他节点的信息。包括对对(数组最大扇出值,或每个R -树节点的子节点数目)对于一个四叉树索引,空间索引中包含如下表显示的列。列名数据类型用途SDO_CODERAW在同一行的对象用SDO_ROWID确定索引条目 SDO_ROWIDROWID一个行的ROWID包含索引对象SDO_STATUSVARCHAR2包含MBR是否在Geometry内和MBR是否在Geometry边界上SDO_GROUPCODERAW对SDO_LEVEL级别进行索引(混合索引项只)说明:对于一个四叉树索引,SDO_CODE,SDO_ROWID和SDO_STATUS列总是存在的。该SDO_GROUPCODE栏是目前只有在选定的索引类型为混合。 43 Postgis支持的空间索引ostgreSQL 提供了好几种索引类型 B-tree,R-tree,Hash 和 GiST。每种索引类型都比较适合某些特定的查询类型, 因为它们用了不同的算法。 缺省时,CREATE INDEX 命令将创建一个 B-tree 索引, 它适合大多数情况。 用于空间索引的是 R-tree 和 GISTGiST 的意思是通用的搜索树(Generalized Search Tree)。 它是一种平衡的,树状结构的访问方法,在系统中起一个基础的模版,然后可以 使用它实现任意索引模式。B+-trees,R-trees 和许多其它的索引模式都可以用 GiST 实现。 (1)GiST 索引不是单独一种索引类型,而是一种架构,可以在这种架构上实现很多不同的索引策略。 因此,可以使用 GiST 索引的特定操作符类型根据索引策略的不同而不同(操作符表)。 标准的 PostgreSQL 包含等效于 R-tree 的 GiST 操作符表, 另外还有很多其它 GiST 操作符表在 contrib (一个文件夹)里以独立的项目的形式存在。create index idx on tablename using GIST(the_geom);GiST 的一个优点是它允许一种客户化的数据类型和合适的 访问方法一起开发,并且是由该数据类型范畴里的专家,而不是数据库专家开发。R-tree 索引看上去并不比等效的 GiST 索引操作性能更好。 和散列索引一样,它们也是没有记录 WAL(先写日志) 日志的,因此可能在数据库崩溃之后需要重建。R树简介:R-Tree是一种空间索引数据结构,下面做简要介绍:(1)R-Tree是n 叉树,n称为R-Tree的扇(fan)。(2)每个结点对应一个矩形。(3)叶子结点上包含了小于等于n 的对象,其对应的矩为所有对象的外包矩形。(4)非叶结点的矩形为所有子结点矩形的外包矩形。R-Tree的定义很宽泛,同一套数据构造R-Tree,不同方可以得到差别很大的结构。什么样的结构比较优呢?有两标准:(1)位置上相邻的结点尽量在树中聚集为一个父结点。(2)同一层中各兄弟结点相交部分比例尽量小。R树是一种用于处理多维数据的数据结构,用来访问二维或者更高维区域对象组成的空间数据.R树是一棵平衡树。树上有两类结点:叶子结点和非叶子结点。每一个结点由若干个索引项构成。对于叶子结点,索引项形如(Index,Obj_ID)。其中,Index表示包围空间数据对象的最小外接矩形MBR,Obj_ID标识一个空间数据对象。对于一个非叶子结点,它的索引项形如(Index,Child_Pointer)。 Child_Pointer 指向该结点的子结点。Index仍指一个矩形区域,该矩形区域包围了子结点上所有索引项MBR的最小矩形区域。一棵R树的示例如图所示:44DB2支持的空间索引DB2数据库中一般采用空间格网索引(spatial grid index)来进行空间索引。有几种方法来创建一个空间格网索引: 1)使用控制中心。 2)使用SQL CREATE INDEX语句。由于空间数据的多维特性,DB2 通常使用的 B* 树并不是很合适,因此 DB2 Spatial Extender 提供了专门的索引机制。 3)利用地理信息系统工具,与DB2空间扩展工程。 SQL创建语法:CREATE INDEX-+-+-index_name-ON- -index_schema.- -+-+-table_name-(-column_name-)- -table_schema.- -EXTEND USING-db2gse.spatial_index-(-finest_grid_size-,-middle_grid_size-,-coarsest_grid_size-)-参数: index_schema。 实例的名称,即该索引所属的实例的名称。index_name 正在创建的索引名称。 table_schema 实例的名称,包含column_name的表所属的实例。 table_name 包含该column_name的表的名称 。 column_name 空间列的名称。EXTEND USING db2gse.spatial_index(-finest_grid_size-,-middle_grid_size-,-coarsest_grid_size-)DB2中DB2 Spatial Extender提供的一种专门的索引机制。这里是使用了EXTEND软件包中的db2gse.spatial_index函数finest_grid_size, middle_grid_size, coarsest_grid_size 为空间格网索引网格大小。 这些参数必须遵守下列条件: finest_grid_size必须大于0。 middle_grid_size必须是大于finest_grid_size或为 0。 coarsest_grid_size必须是大于middle_grid_size或为0。实例CREATE INDEX terridx ON branches (territory) EXTEND USING db2gse.spatial_index (1.0, 10.0, 100.0)删除语法:Drop INDEX index_name45 综合的效率比较5、坐标系与投影转换的比较5.1坐标系5.2 投影转换5.2.1Microsoft SQL Server 2008投影变换Sql server 2008没有找到可以进行投影转换的函数STTransform,但是其能在数据库里修改器srid值,其语法为:update bountprov set the_geom.STSrid=4326;我的数据表为bountprov这个表,因为没有索引,所以所花时间较少,其花费时间为1秒,1136条数据5.2.2Oracle Spatial支持的投影变换SDO_CS.TRANSFORMSELECT cname, SDO_CS.TRANSFORM(geom, 8199) FROM railkroute WHERE cname = 京广线 And rownum=1;5.2.3Postgis支持的投影变换patial_ref_sys表 在基于PostGIS模板创建的数据库的public模式下,有一个spatial_ref_sys表,它存放的是OGC规范的空间参考。我们取我们最熟悉的4326参考看一下:在spatial_ref_sys表中的各个字段以及含义:srid(字段)srid存放的就是空间参考的Well-Known ID给定的唯一的投影编号,每一种投影变换和这个编号一一对应auth_name(字段)通常使用EPSG 标准,所以每条记录这个字段的属性都是EPSGauth_srid(字段)在postgis中和srid的编号一样srtext(字段)PROJCSBeijing 1954 / Gauss-Kruger CM 111E,GEOGCSBeijing 1954,DATUMBeijing_1954,SPHEROIDKrassowsky 1940,6378245,298.3,AUTHORITYEPSG,7024,AUTHORITYEPSG,6214,PRIMEMGreenwich,0,AUTHORITYEPSG,8901,UNITdegree,0.01745329251994328,AUTHORITYEPSG,9122,AUTHORITYEPSG,4214,UNITmetre,1,AUTHORITYEPSG,9001,PROJECTIONTransverse_Mercator,PARAMETERlatitude_of_origin,0,PARAMETERcentral_meridian,111,PARAMETERscale_factor,1,PARAMETERfalse_easting,500000,PARAMETERfalse_northing,0,AUTHORITYEPSG,21459,AXISY,EAST,AXISX,NORTH这个投影的含义:这个是采用 Gauss-Kruger的投影,北京1954的坐标系统,中央经线111度proj4text(字段)+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs 表示:坐标原点向西移动500000米geometry_columns表 geometry_columns表存放了当前数据库中所有几何字段的信息,把数据库中存放空间数据的表和spatial_ref_sys表联系起来。主要字段:其中f_table_schema字段表示的是空间表所在的模式,f_table_name字段表示的是空间表的表名,f_geometry_column字段表示的是该空间表中几何字段的名称,srid字段表示的是该空间表的空间参考,type表示geometry的类型。投影变换:主要是通过一个函数来实现的:ST_transformupdate allriver set the_geom = st_transform(st_setsrid(the_geom,4214),2333);由于刚开始在导入数据时,没有给定投影坐标,而在转换的过程中必须要有,所以先给定一个坐标的srid(st_setsrid(the_geom,4214))后来再进行转换。在这个过程中我们要先把一个名叫enforce_srid_the_geom的约束删掉才能经行最终的转换。5.2.4DB2投影变换5.2.5 综合效率比较6、几大数据库支持空间数据的语法比较6.1Microsoft SQL Server 2008的语法Sql server 2008支持的空间查询的语法为面向对象的语法,语句逻辑结构较其他非面向对象语法清晰,更加易于理解。比如,查找allriver表里面长江的与其相连接的省的图,语法为:Select b.the_geom from allriver a,bountprov b where a.the_geom.STIntersects(b.the_geom)=1 and a.CNAME like %长江%;6.2 Oracle Spatial 11g的语法6.3 Postgis的语法PostGIS的使用其实就相当于使用一个经过扩展的SQL语法,熟悉SQL语法的人一看都很熟悉,都是普通的SQL语句,不同的只不过是增加了PostGIS特殊的geometry数据类型。下面给几条简单的语句:create table mytest (myID int4, the_geom geometry, myName varchar );(创建一个表)insert into mytest values (1, POINT(0 0), beijing );(插入一条数据)select ST_Distance(the_geom, POINT(0 0) from mytest;(查询表中的点到点(0 0)的距离)看了上述三条语句我们可以知道,只是增加了个geometry数据类型和一些空间分析量算的函数。6.4 DB2的语法7、空间分析比较数据选择:数据选择:allriver(线) bountprov(面) bountcnty(面) rawrespt(点) railkroute(线)allriver(fid, shape, fnode_, tnode_, lpoly_, rpoly_, length, hydnt_id, code, gb, hydc, tn, name, maptn) bountprov(fid, shape, mapindex, cnty_code, cname, minx, miny, maxx, maxy, cx, cy, prov, the_geom)bountcnty(fid, shape, mapindex, cnty_code, cname, cx, cy, cnty, the_geom)rawrespt(fid, shape, area, perime

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论