文档库 最新最全的文档下载
当前位置:文档库 › 《开源GIS》教案 2 开源空间数据库

《开源GIS》教案 2 开源空间数据库

《开源GIS》教案 2 开源空间数据库
《开源GIS》教案 2 开源空间数据库

第二讲:开源空间数据库

一、教学目标

1.了解空间数据库原理和PG实现以及PostgreSQL/PostGIS基本知识。

2.掌握PostgreSQL的操作和管理;PostGIS的常用空间特性。

二、重点与难点分析

1.重点:PostGIS空间数据库的实现技术,支持的空间特性和基本操作。

2.难点:PostGIS对PostgreSQL的空间扩展如何实现。

三、教学内容与教学过程

1PostgreSQL 简介

1.1PostgreSQL历史

1986-1994: Postgres

–Original research project

1995: Postgres95

–SQL support

1996-2000: PostgreSQL 6.0-7.0

–Open source team

–MVCC, stability, performance

2001-2005: PostgreSQL 7.0-8.0

–SQL92, complex SQL, schemas, optimizer, Win32

2006-2007: PostgreSQL 8.1, 8.2

–In-memory bitmap, roles, partitioning,

Performance

9.1.5 · 2012-08-17

PostgreSQL 9.2: Full Throttle Database: Live Streaming

Date: 2012-09-11

Location: San Francisco, CA, United States

1.2Ingres和Postgres项目

PostgreSQL 的前身是BSD 始于1977 年的Ingres 项目

在1985 年,Michael Stonebraker 回到伯克利开始一个后-Ingres(post-Ingres)的项目,目的是解决Ingres 中,同时也是1980 年代的数据库系统中的主要问题:数据关系维护的问题。这就是Postgres 的开端。

Ingres 是比较早的数据库系统,开始于加利福尼亚大学柏克莱分校的一个研究项目,该项目开始于70 年代早期,在80 年代早期结束。像柏克莱大学的其他研究项目一样,它的代码使用BSD许可证。从80 年代中期,在Ingres 基础上产生了很多商业数据库软件,包括Sybase、Microsoft SQL Server、NonStop SQL、Informix 和许多其他的系统。在80 年代中期启动的后继项目Postgres,产生了PostgreSQL、Illustra,无论从任何意义上来说,Ingres 都是历史上最有影响的计算机研究项目之一。

在1993年,用户开始暴涨,并且特性需求急剧增加;在做了一些代码清理、发布了版本4 之后,Postgres 项目正式终止。

在1994年,两名伯克利的研究生在做研究生课题的时候,向Postgres 里增加了现代的SQL 语言的支持。

两位研究生是来自中国香港的Andrew Yu 和Jolly Chen 用bison 和flex 工具的组合,把Postgres 的Postquel查询语言替换成了SQL92,然后将Postgres 改名为Postgres95。

Andrew Yu 和Jolly Chen 最大的贡献在于,完成了Postgres95 之后,将其发布到了互联网上,随后的1996 年,加拿大的https://www.wendangku.net/doc/3f1275201.html, Networking Services的Marc Fournier(一名FreeBSD 黑客)提供了第一个非大学的开发服务器平台,然后Bruce Momjian(美国)和Vadim B. Mikheev(俄国)开始修改以及稳定伯克利发布的代码,并于1996年8月发布了第一个开源版本。

目前,PostgreSQL 的稳定版本到了9.2,在RDBMS的各种特性方面,已经接近于“无可指责”的境界了。而目前PostgreSQL 的开发是围绕在更易用的SQL 语言扩展、SQL 标准的兼容(比如SQL2003、XML/Xquery的支持)、扩展工具、外围工具等方面。

PostgreSQL 的读法:Post-gres-Q-L。

1.3PG安装配置

PostgreSQL可以用于C/S(客户/服务器)环境。PostgreSQL的C/S架构允许任务分工。非常适合于存储和访问大量数据的服务器主机可以用作安全的数据储存库。可以为客户端开发复杂的图形界面程序。另外,基于网页的前端可以通过建立网页模式的结果集到浏览器访问数据,而不需要另外的客户端软件。

PG网络配置:VB设置网络为桥接模式。

【服务器端】配置可连接接口(postgresql.conf)

打开postgresql.conf文件

$sudo vim /etc/postgresql/8.4/main/postgresql.conf

检索修改位置

/listen_addresses

修改文件(i,进入编辑模式)

listen_addresses = ‘*’

保存文件(:wq)

【服务器端】配置可连接服务器信息(pg_hba.conf)

打开pg_hba.conf文件

$sudo vim /etc/postgresql/9.1/main/pg_hba.conf

检索修改位置

host all all 127.0.0.1/32 md5

修改文件(i,进入编辑模式)

在3.1.2后添加下述设定内容

host all all 192.168.11.0/24 md5

注:该修改的目的是允许所有机器,所有用户都使用TCP/IP协议连接,用密码进行认证的方式

如果想指定数据库,修改第一个all,指定用户的话,修改第二个all

如果想明确访问机器的ip地址的和话,修改192.168.11.1/24部分,目前这部分的设定含义是允许从192.168.11.0到192.168.11.255的IP地址的机器访问数据库。

保存文件(:wq)

重启postgres数据库

$sudo /etc/init.d/postgresql restart

[教学提示]:希望大家自学Xubuntu操作系统的使用。

1.4BSD许可证

BSD许可证(Berkeley Software Distribution license),是自由软件(开源软件的一个子集)中使用最广泛的许可证之一。BSD软件就是遵照这个许可证来发布,该许可证也因此而得名。

BSD包最初所有者是加州大学的董事会,这是由于BSD源自柏克莱加州大学。BSD开始后,BSD许可证得以修正,使得以后许多BSD变种,都采用类似风格的许可证。

跟其他许可证相比,从GNU通用公共许可证(GPL)到限制重重的著作权(Copyright),BSD许可证比较宽松,甚至跟公有领域更为接近。事实上,BSD 许可证被认为是copycenter(中版权),界乎标准的copyright与GPL的copyleft之间。"Take it down to the copy center and make as many copies as you want"。

Copyright (c) 1998 著作权由加州大学董事会所有。著作权人保留一切权利。

* * 这份授权条款,在使用者符合以下三条件的情形下,授予使用者使用及再散播本* 软件包装原始码及二进位可执行形式的权利,无论此包装是否经改作皆然:

* * 对于本软件源代码的再散播,必须保留上述的版权宣告、此三条件表列,以及下述的免责声明。

* * 对于本套件二进位可执行形式的再散播,必须连带以文件以及/或者其他附于散播包装中的媒介方式,重制上述之版权宣告、此三条件表列,以及下述的免责声明。

* * 未获事前取得书面许可,不得使用柏克莱加州大学或本软件贡献者之名称,来为本软件之衍生物做任何表示支持、认可或推广、促销之行为。

免责声明:本软件是由加州大学董事会及本软件之贡献者以现状(“as is”)提供,本软件包装不负任何明示或默示之担保责任,包括但不限于就适售性以及特定目的的适用性为默示性担保。加州大学董事会及本软件之贡献者,无论任何条件、无论成因或任何责任主义、无论此责任为因合约关系、无过失责任主义或因非违约之侵权(包括过失或其他原因等)而起,对于任何因使用本软件包装所产生的任何直接性、间接性、偶发性、特殊性、惩罚性或任何结果的损害(包括但不限于替代商品或劳务之购用、使用损失、资料损失、利益损失、业务中断等等),不负任何责任,即在该种使用已获事前告知可能会造成此类损害的情形下亦然。最自由的是BSD软件许可(Berkeley Software Distribution),它提供“随便你怎么处置这个软件。”

最宽容的许可是伯克利软件分发(BSD,Berkeley Software Distribution)许可,它实际上

说“用这个软件做任何你想做的。但不提供任何担保”。PostreSQL使用的软件许可(https://www.wendangku.net/doc/3f1275201.html,/about/licence)响应BSD软件许可的精神并套用它的说法,“允许以任何目的使用、拷贝、修改和重新发布这套软件以及文档,不需要任何费用,不需要签订任何书面协议,提供以上的版权通告以及这段和以下两个段落的文字在所有的拷贝中”。

2PostgreSQL 功能

PostgreSQL技术功能

后端;性能;安全;网络;国际化;平台;数据类型;函数和触发器;程序语言;contrib模块。

PostgreSQL比较

2.1基本信息

2.2操作系统支持

2.3基本功能

2.4表与视图

2.5索引

2.6其他对象

2.7数据表分区

2.8数据库与模式(Schemas)

2.9外部连接

3PostgreSQL优点

PostgreSQL提供了许多其他数据库系统的优势,为您的公司或企业。

3.1免疫过度部署

部署是一些专有数据库厂商视为他们的许可证合规性问题。在PostgreSQL,没有人可以控告你打破许可协议,有没有相关的授权费用的软件。

这有几个附加的优点:

更多有利可图的商业模式,与大规模的部署。

没有可能的许可证合规性审核的任何阶段。

灵活地进行概念研究和试验部署,而不需要包括额外的许可费用。

比专有软件厂商的更好的支持。

除了我们提供的大力支持,我们有一个充满活力的社区,PostgreSQL的专业人士和爱好者,您的员工可以借鉴和促进。

3.2节省人力成本显着

我们的软件已经被设计和创造有比领先的专有数据库的维护和调整的要求要低得多,但仍保留了所有的功能,稳定性和性能。

此外,我们的培训课程通常被看作是更符合成本效益,易于管理,并实际在现实世界领先的专有数据库厂商。

3.3传奇的可靠性和稳定性

与许多专有数据库,它是很普遍的公司报告了PostgreSQL,从来没有,永远为他们坠毁在几年的高活性操作。一次也没有。这只是工作。

3.4可扩展

源代码是不收取任何费用。如果你的员工有需要自定义或扩展PostgreSQL以任何方式,那么,他们能够做到以最小的努力,并没有附加费用。这是补充社会的PostgreSQL世界各地的专业人士和爱好者,也积极扩展PostgreSQL每天的基础上。

3.5跨平台

PostgreSQL是,几乎每一个品牌的Unix(34平台上使用最新的稳定版本),Windows 的兼容性可以通过Cygwin的框架。本机Windows的兼容性也可与8.0及以上版本。

3.6专为高容量的环境

我们使用多行数据存储策略称为MVCC,让PostgreSQL在高容量环境非常敏感。领先的专有数据库厂商使用这种技术,出于同样的原因。

3.7GUI数据库设计和管理工具

有许多高品质的图形用户界面工具可用于PostgreSQL的开源开发者和商业供应商。列表是我们的wiki上作为一个社会PostgreSQL的GUI工具。

4PostgreSQL体系结构

4.1主进程Postmaster:

它主要负责在客户

端第一次发送请求

给服务器的时候建

立一个服务器端进

程并监听用户连

接。

4.2监听器Listener:也

就是每个客户端对

应的服务器端进程,

它的主要作用是和

客户端进行通信,获

取客户端的sql语

句,并把查询结果返

回给客户端。

4.3查询优化器

Optimizer:主要功能是分析客户端提交的sql语句,给出所有的执行路径,

并从中找出一个最优的方案,最后把这个执行方案交给执行器。

4.4缓冲管理器Buffer Manager:,主要功能是对共享缓冲区和本地缓存区进

行管理。

7POSTGIS 简介

7.1空间数据库及其特征

空间数据库:一个软件模块,以DBMS为底层;支持多种空间数据类型、及相应的ADT及能调用ADT的查询语言;支持空间索引、空间操作算法和优化查询的特定领域规则(Shashi Shekhar/Sanjay Chawla,Spatial Databases: A Tour,03年)。

空间数据库特征:数据量庞大——海量;具有高可访问性——并发;空间数据模型复杂——数字地球;属性数据和空间数据联合管理——二元结构;应用范围广泛——80%空间信息。

7.2空间数据库的实现

关系型数据库+空间数据引擎模式

ESRI的ArcSDE和MapInfo的SpatialWare。访问速度快,支持通用的关系数据库管理系统,空间数据按BLOB存取,可跨数据库平台,与特定GIS平台结合紧密,应用灵活。其缺点主要表现为,空间操作和处理无法在数据库内核中实现,数据模型较为复杂,扩展SQL比较困难,不易实现数据共享与互操作。

扩展对象关系型数据库模式

Oracle的Oracle Spatial, IBM的DB2 Spatial Extender, Informix 的Spatial DataBlade。空间数据的管理与通用数据库系统融为一体,空间数据按对象存取,可在数据库内核中实现空间操作和处理,扩展SQL比较方便,较易实现数据共享与互操作。其缺点主要表现为,实现难度大,压缩数据比较困难,目前的功能和性能与第一类系统尚存在差距。

7.3POSTGIS快速入门

PostGIS:postgresql的一个扩展。在遵循OpenGIS规范下,提供空间对象、空间索引、空间操作函数和空间操作符等空间信息服务功能。相当于ARCSDE或Oracle的spatial,是中间件技术。遵循GPL许可发布。实现OGC 2006 SFS_SQL标准规范。

SQL 预定义schema

OGC 空间数据库中需要预定义的schema

可见,数据库中必须要有一个记录几何字段信息的GEOMETRY_COLUMNS

表和一个记录空间参考信息的SPATIAL_REF_SYS 表。

–2001: First release, Mapserver

support

–2002: Improved functions,

indexes

–2003: GEOS support, many

functions

–2004: SFSQL conformance

–2005: Lightweight geometries

–2006: OpenGIS SFSQL

compliance

–2007: SQL/MM, curves & performance

7.4 PostGIS 的GIS 对象

OpenGIS 规范定义了两种表达空间数据的标准方法:Well-Known Text (WKT) 和Well-Known Binary (WKB)。PostGIS 支持所有OGC 规范的“Simple Features”类

型,同时在此基础上扩展了对3DZ 、3DM 、4D 坐标的支持。

PostGIS 又扩展了带有空间参照系统的EWKB ,EWKT 多种形式,以及一种叫做“Canonical(正经) Form ”形式,看上去是一串古怪的数字,其实是一种增强的十六进制编码。

EWKT和EWKB相比OGC WKT和WKB格式主要的扩展有3DZ、3DM、4D坐标和内嵌空间参考支持。

以下以EWKT语句定义了一些几何对象:

POINT(0 0 0) ——3D点

SRID=32632;POINT(0 0) ——内嵌空间参考的点

POINTM(0 0 0) ——带M值的点

POINT(0 0 0 0) ——带M值的3D点

SRID=4326;MULTIPOINTM(0 0 0,1 2 1) ——内嵌空间参考的带M值的多点

以下语句可以使用EWKT格式插入一个点要素到一个表中:

INSERT INTO table ( SHAPE, NAME )

VALUES ( GeomFromEWKT('SRID=4326;POINTM(116.39 39.9 10)'), '北京' ) SQL-MM Part 3:SQL-MM格式定义了一些插值曲线,这些插值曲线和EWKT 有点类似,也支持3DZ、3DM、4D坐标,但是不支持嵌入空间参考。

以下以SQL-MM语句定义了一些插值几何对象:

CIRCULARSTRING(0 0, 1 1, 1 0) ——插值圆弧

COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1)) ——插值复合曲线

CURVEPOL YGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1)) ——曲线多边形

MULTICURVE((0 0, 5 5),CIRCULARSTRING(4 0, 4 4, 8 4)) ——多曲线

MULTISURFACE(CURVEPOL YGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0

0),(1 1, 3 3, 3 1, 1 1)),((10 10, 14 12, 11 10, 10 10),(11 11, 11.5 11, 11 11.5, 11 11)))

——多曲面

7.5PostGIS的Geometry数据类型

Geometry: Geometry可以说是PostGIS最重要的一个概念,是"几何体"的意思,目前支持的几何体类型包含其实例有:点(Point)/线(linestring)/多边形(polygon)/多点(multipoint)/多线(multilinestring)等。

Geometry数据类型

SFS和SQL/MM几何类型的对应关系

7.6POSTGIS功能结构

7.7PostGIS的核心功能

数百空间函数;缓冲区、合并、叠加、距离等函数;ACID事务的完整性;R-树空间索引;多用户支持;行级锁定;复制;分区;基于角色的安全性;表空间,模式。

完整实现了Simple Features标准之中的空间对象模型,如点、折线、多边形、多点、多折线、多多边形与几何集合。

通过调用提供GEOS之中的几何分析函数,实现了使用3x3Egenhofer matrix分析空间对象之间拓扑关系的运算,并遵循Simple Features定义,实现了一些常见的关系运算,如Intersect、Contain、Overlap等等。

实现了空间数量度量,能够计算几何体之间的距离、几何体的面积、周长等等。通过调用提供GEOS之中的几何分析函数,实现了常见的GIS空间分析功能,如求交、求并、求差、缓冲区等等。

利用R-tree与GiST实现了空间索引,大大加快了正交查询的速度。

支持选择性索引,为空间与非空间的混合查询指定适当的查询策略,提高了搜索的效率。

目前,PostGIS仍不支持在数据库中存储栅格数据。然而目前PostGIS有一个名为PostGIS Raster的计划,正在实现在PostgreSQL中存储栅格数据,并实现矢量数据与栅格数据之间的无缝操作。该计划已经整合到PostGIS 2.0的版本中,目前正在开发中。

在Windows平台下,PostGIS提供了一个pgAdminII的插件,该插件能够把ESRI Shapefile格式的地理数据导入到PostGIS数据库之中。

PostGIS实现了一个基于轻量级的几何体实现,并提供了完善的索引,这大大减少了硬盘与内存的存储量。轻量级的几何体实现使服务器能够把磁盘中更加大量的

数据载入到内存之中,这大大加快了查询的性能。

PostGIS已经注册成为了OGC的Simple Features for SQL标准[1] 的其中一种实现。然而由于某些原因,OGC并未把PostGIS列为其一种“兼容”的实现。其原因包括PostGIS扩展了WKB与WKT格式来存储带有三维或四维坐标的几何体,该扩展并不符合OGC的最新定义。

7.8读写PostGIS数据

?使用SQL语言

假如road.sql文件内容如下:

BEGIN;

INSERT INTO roads (road_id, roads_geom, road_name)

VALUES (1,ST_GeomFromText('LINESTRING(191232 243118,191108 243242)',-1),'Jeff Rd');

INSERT INTO roads (road_id, roads_geom, road_name)

VALUES (2,ST_GeomFromText('LINESTRING(189141 244158,189265 244817)',-1),'Geordie Rd');

COMMIT;

psql导入

数据文件可以很容易使用psql的SQL终端显示器通过管道导入PostgreSQL:psql -d [database] -f roads.sql

?实用工具:shp2pg;ogr2ogr(\usbgis\apps\pgsql\bin)

shp2pgsql -c -D -s 4269 -i -I shaperoads.shp myschema.roadstable > roads.sql

psql -d roadsdb -f roads.sql

或者

shp2pgsql shaperoads.shp myschema.roadstable | psql -d roadsdb

?使用pgAdminIII

创建表:OSGeoCity

CREATE TABLE OSGeoCity (gid int4, name

varchar , the_geom geometry );

主键约束: CONSTRAINT cities_pkey

PRIMARY KEY (gid)--有了主键,才能进行

编辑

维度约束:CONSTRAINT

enforce_dims_the_geom CHECK

(ndims(the_geom) = 2)

几何类型约束:

CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = ‘POINT’::text OR the_geom IS NULL)--空间数据库特证

投影约束:CONSTRAINT enforce_srid_the_geom CHECK (srid(the_geom) = -1)—地理坐标和地图投影

?使用GIS软件导入PG

QGIS(Quantum 量子GIS),gvSIG。

?编程导入

利用接口在应用程序中读写PostGIS数据(具体内容在后面课程中学习)。pgRouting是PostGIS的扩展应用。

psql -d pgrouting -f ../user/Downloads/pgRouting-1.02_pg-8.3.3/roads.sql

7.9使用PostGIS函数

查询OSGeoCity表中的所用字段信息

select * from OSGeoCity ;

将OSGeoCity表中的几何体类型the_geom字段文本显示

select gid, st_astext(pt) from OSGeoCity ;

返回118 32点到OSGeoCity表中所有点的距离

select st_distance(the_geom, 'POINT(118 32)') from OSGeoCity ;(空间类型(ST)前缀:Spatial Type)

SELECT cities.gid, cities."NAME" AS name , cities.the_geom INTO OSGeoCity7 FROM cities

WHERE cities."NAME" ='Lausanne'

OR

cities."NAME" ='Victoria'

OR

cities."NAME" ='Cape Town'

OR

cities."NAME" ='Sydney'

OR

cities."NAME" ='Barcelona'

OR

cities."NAME" ='Denver'

[教学提示]:开源空间数据库部分需要3讲完成。

8教学小结

对象关系型数据库,空间数据库,PostGIS的空间特性。

PostGIS的SQL、加载器工具、开源GIS软件导入PG等。

PostGIS的空间数据库,空间表,空间数据操作和地图显示。

四、作业与实验

1.书面作业

名词解释:空间数据库,WKT,WKB,EWKT。

简述:PostGIS的功能特点。

2.上机作业

实验1:

创建空间数据库OSGIS和OSGeo城市表OSGeoCity;写入所有城市数据。

综合使用SQL、shp2pgsql、pgAdimIII、QGIS四种方式导入PG。

相关文档