ImageVerifierCode 换一换
格式:DOCX , 页数:71 ,大小:5.97MB ,
资源ID:6005508      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/6005508.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(基于开源GIS的电子地图开发.docx)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

基于开源GIS的电子地图开发.docx

1、目录 1 开源GIS概述 2 1.1 什么是开源GIS 2 1.2 为什么需要开源GIS 2 1.3 开源GIS项目简介 3 1.3.1 PostGIS简介 3 1.3.2 GeoServer简介 5 1.3.3 OpenLayers简介 7 1.4 体系结构布署 7 1.4.1 基于J2EE 的WebGIS 体系结构 7 1.4.2 WMS 规范和WFS 规范 8 2 基于PostgreSQL和PostGIS的地图呈现 9 2.1 PostgreSQL和PostGIS的安装 11 2.2 PostGIS中的几何类型 12 2.3 PostGIS中空间信息处理的实现

2、 13 2.4 PostGIS中的常用函数 15 2.5 向PostGIS导入shapefile数据 21 2.6 基于PostGIS的地图呈现实例 21 3 OpenLayers实践 23 3.1 项目介绍 24 3.2 源代码总体结构分析 25 3.3 BaseTypes :定义底层类与定制JS内置类 28 3.4 BaseTypes: OpenLayers中定制JavaScript内置类 30 3.5 空间数据的组织与实现 33 3.6 OpenLayers 数据解析—以GML为例 35 3.7 数据渲染分析 37 3.8 地图表现 38 3.9 OpenLay

3、ers中的控件 42 3.10 OpenLayers事件机制分析 45 3.11 体系结构 47 3.12 GeoServer自带OpenLayers实例 47 3.13 OpenLayers官网经典例子 57 3.13.1 图层叠加 58 3.13.2 编辑功能 60 3.13.3 书签及样式 63 3.13.4 改变显示内容 64 3.13.5 动画效果 66 3.13.6 获得属性 66 3.13.7 局部放大 67 3.13.8 编辑功能 70 3.13.9 全屏 70 数据来源于百度,网易等论坛 基于开源GIS的电子地图开

4、发 1 开源GIS概述 1.1 什么是开源GIS 顾名思义,开源GIS就是开放源代码的GIS软件。开源:软件开发者以某种协议发布某些软件的源代码,并允许他人在遵守该协议的基础之上可以自由下载、修改、使用和散布其源代码。开源协议:GNU GPL、BSD、LGPL、MIT、MS-PL;开源网站:open source GIS、sourceforge、google code、apache、codeplex。 随着商业GIS的发展而发展壮大,功能性强、技术强劲,背后是来自技术狂热者、科研院所和非盈利机构的大力支持。开放、集成、标准和互操作,跨各类操作平台:linux、windows、mac、m

5、obile;跨各类语言:C、C++、Java、C#、Python、Ruby、Perl、JavaScript、ActionScript;各种层次的产品:桌面、服务器、数据库、客户端、中间件、工具集。 1.2 为什么需要开源GIS 商业软件需要高昂的使用和维护费用,频繁的升级换代和兼容性。其数据格式无法完全的共享和转换,而且商业软件的跨平台支持不够完善。与之对比,开源软件是完全免费使用的,开源软件的发展足以满足常用的需求,提供做种解决方案。 开源GIS项目以及应用领域: 桌面:GRASS、QGIS、UDig 服务器:GeoServer、MapServer(free) 数据库:Pos

6、tGIS、MySQL Spatial、MS-SQL Spatial 客户端:QGIS、OpenLayers、WorldKit 工具集:JTS(NTS)、GEOS、Shapely、GDAL/OGR 中间件:GeoTools、MapTools 其他:WorldWind、TileCache、Proj4 开源GIS主要应用于:资源管理 (Resource Management) ,资源配置 (Resource Configuration) ,土地信息系统和地籍管理 (Land Information System and Cadastral Applicaiton) ,生态、环境管理与模

7、拟 (Environmental Management and Modeling) 以及分布式地理信息应用 (Distributed Geographic Information Application)等众多领域。 1.3 开源GIS项目简介 开源GIS项目主要有三个方面,即: ·数据库:PostGIS ·服务器:GeoServer ·客户端(B/S):OpenLayers 1.3.1 PostGIS简介 PostGIS是加拿大Refractions公司支持的开源项目,它为开源数据库PostgreSQL提供了空间支持。PostGIS安装后,Postgre SQL中出现一个模版数

8、据库,新建空间数据库时只需以PostGIS为模版即可。PostGIS在SQL级别上实现了基本的空间运算功能。另外绝大多数开源GIS软件(即使是不严格遵守OpenGIS标准的)都支持PostGIS数据表的直接载入,读写等功能。毋庸置疑,PostGIS 是OpenGIS数据源最佳实现。 图 1 PostGIS数据 PostGIS安装和使用: 首先下载(http://www.postgresql.org/)并安装PostgreSQL8.x版本,目前最新的为8.4。安装完毕后设置默认的用户名和密码,添加此用户。然后打开Application Stack Builder选择需要安装的插

9、件,里面选中PostGIS1.5 for PostgreSQL 8.x,选择合适的版本。下载后自动安装。安装后可以看到一个模板数据库和一个默认的空间数据库,之后可以根据模板数据库添加一个空间数据库来使用,里面实现的大量的空间分析和空间应用的函数。同时包含一个shapefile dbf input loader工具。再登录到PostgreSQL中可以进行空间数据的增删改查。 PostGIS 中的几何数据类型 1)OGC 的WKB 和WKT 格式 PostGIS 支持所有OGC 规范的“Simple Features”类型。OGC 定义了两种描述几何对象的格式,WKB(Well-Known

10、Binary)和WKT(Well-Known Text)。WKT 是以文本形式描述,WKB 是以二进制形式描述。使用WKB 和WKT 能够很好的与其他系统数据交换,目前大部分支持空间数据存储的数据库构造空间数据都采用这两种方式。支持的几何对象在Simple Features Geometries 1.0 中包括:Point,Line String,Polygon,Multi-Polygon,Multi Line String,Multi Point,Geometry Collection。 2)EWKT、EWKB 和Canonical 格式 OGC 中定义的WKT 与WKB 只支持二维的几

11、何数据类型,并且不支持空间参考。PostGIS 对OGC 的数据格式进行扩展得到EWKT 和EWKB 格式,主要扩展有3DZ、3DM、4D 坐标和内嵌空间参考支持。每个有效的WKT 和WKB 格式都是有效的EWKT 和EWKB。然而这种数据格式并不稳定,如果与OGC 推出的新数据格式冲突,那么它将来有可能会改变。而目前OGC 的Simple Features1.2 已经推出支持3D,4D 的WKT,WKB 格式,EWKT 与EWKB 的发展方向还需拭目以待。Canonical 格式是一种简单查询结果(没有任何函数调用),并且此格式支持简单的插入、更新和复制,是一种16 进制编码的几何对象。

12、3)SQL-MM 格式 QL 多媒体及应用包(SQL-MM)格式定义了一些插值曲线,这些插值曲线和EWKT 类似,也支持3DZ、3DM、4D 坐标,但是不支持嵌入空间参考。 PostGIS 中的地理数据类型 在 PostGIS 最近发布的版本1.5.0 中加入了地理数据类型(Geography Type)。这种数据类型直接支持大地坐标(geodetic coordinates),即经纬度。PostGIS 几何数据类型的基础是一个平面,平面上两点之间的最短距离是一条直线。因此,在计算几何图形的面积、距离、长度、交集等操作时可以使用笛卡尔数学计算公式和直线向量。PostGIS地理数据类型

13、的基础是一个球体。球体上两点之间的最短距离是大圆圆弧(great circle arc)。如果要结果更加精确,则需要考虑真实世界的球体形状,这样将使计算变得复杂。因此,基于地理数据类型的功能函数少于基于几何数据类型的功能函数。而且这种数据类型现在还只支持WGS84(SRID (Spatial reference system):4326)的经纬度坐标。PostGIS 地理数据类型现在仅支持最简单的要素:OGC 规范的“Simple Features”类型。在数据格式方面,支持OGC 的WKB 和WKT 格式,也可以使用EWKB 或EWKT 插入数据。 PostGIS 对空间数据的读取

14、 现存的GIS 软件产生的数据格式很多,PostGIS 提供了多种方式支持数据的读取。 1)PSQL 语言 Psql 语言是PostgreSQL 内嵌的一个命令行工具,其语法基本上跟标准的SQL 语法一致,结合标准的SQL 语法和一些PostGIS 的扩展对PostGIS 数据库进行读写操作。 2)使用转换工具 ①PostGIS 自带的转换工具:shp2pgsql、pgsql2shp 可在shapefile 数据与PostGIS 数据库之间转换; ②使用ogr 工具:这个工具PostGIS 自身并没有提供,但它同样是一个开源软件,Ogr 是GDAL的一个组成部分,GDAL 是一个各种

15、GIS 数据格式的转换软件库,ogr 是转换矢量GIS 数据的软件库,目前ogr 所支持的数据格式有以下几种:ESRI Shapefile, MapInfo Tab file, TIGER, s57, DGN, CSV,GML, KML, Interlis, SQLite, ODBC, PostGIS/PostgreSQL, MySQL[11];③使用桌面软件QuantumGIS中的SPIT 插件来将shapefile 读到PostGIS 数据库中。 1.3.2 GeoServer简介 GeoServer 是 OpenGIS Web 服务器规范的 J2EE 实现,利用 GeoServer

16、可以方便的发布地图数据,允许用户对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间地理信息。GeoServer 主要特性包括:兼容 WMS 和 WFS 特性;支持 PostGIS 、 Shapefile 、 ArcSDE 、 Oracle 、 VPF 、 MySQL 、 MapInfo ;支持上百种投影;能够将网络地图输出为 jpeg 、 gif 、 png 、 SVG 、 KML 等格式;能够运行在任何基于 J2EE/Servlet 容器之上;嵌入 OpenLayers 支持 AJAX 的地图客端;除此之外还包括许多其他的特性。 图 2

17、 GeoServer功能 图 3 GeoServer界面图 客户端Open layers的使用及开发方法 GeoServer中集成了Openlayers,也可以使用单独下载的OpenLayers软件包。在默认情况下,Openlayers只有基本的缩放(Zoom)、拖动(Pan)功能。如果需要更丰富的服务,可以调用openlayers.layer 的子类完成图层的初始化; 在创建好图层后, 还可以调用Openlayers 提供的openlayers.control类为地图添加一些与用户有互动功能的工具栏或者是“按钮”。GeoServer支持多种客户端,WMS可以返回GeoRS

18、S和KML用来和其他地图服务互通。 GeoServer 服务启动后,在浏览器中输入http://localhost:8080/geoserver/即可以看到操作界面。要完成数据的发布,需要进行四个方面的配置。 Server:设置服务器信息和联系信息,服务信息包括:最大地理要素数限制、是否显示详细异常信息、数字精度、语言编码、日志相关;联系信息包括:单位名称、地址、联系方式等。 WFS:设置WFS 相关信息,包括:是否启用WFS 服务、服务层次(基本服务、事务处理层次、完全服务)以及WFS 服务器描述信息和Test Suites 的使用。 WMS:设置内容包括,是否启用WMS 服务、描述

19、信息、SVG 图形表现形式。 Data:数据配置,有四部分内容:名称空间、数据、要素类、样式。GeoServer 默认可读取的数据有PostGIS、shapefile 等几种格式,对ArcSDE,GML 等格式的支持,可通过插件实现。在本文中,使用PostGIS 加载数据。 1.3.3 OpenLayers简介 OpenLayers是一个用于开发WebGIS客户端的JavaScript包。OpenLayers符合行业标准,比如 OpenGIS的WMS和WFS规范。OpenLayers采用面向对象方式开发,并使用来自Prototype.js和Rico中的一些组件。OpenLayers 支持

20、的地图来源包括Google Maps、Yahoo! Map、微软Virtual Earth 等。用户还可以用简单的图片地图作为背景图,与其他的图层在OpenLayers 中进行叠加。OpenLayers 支持Open GIS 协会制定的WMS和WFS等网络服务规范,可以通过远程服务的方式,将以OGC 服务形式发布的地图数据加载到基于浏览器的OpenLayers 客户端中进行显示。OpenLayers 可以在浏览器中实现地图浏览的基本效果,比如放大、缩小、平移等常用操作之外,还可以进行选取面、选取线、要素选择、图层叠加等不同的操作。可以对已有的OpenLayers 操作和数据支持类型进行扩充,为

21、其赋予更多的功能。可以为OpenLayers 添加网络处理服务WPS 的操作接口,从而利用已有的空间分析处理服务来对加载的地理空间数据进行计算。 OpenLayers安装和使用: 首先下载(http://openlayers.org/)压缩包,通过Web服务器发布。Builder文件夹用来打包压缩所有的js文件,doc文件夹存放API文档,examples文件夹存放所有的例子(重要的学习途径),lib是源文件库,test文件夹是一个测试例子,tools存放用来打包的工具(python)。在浏览器输入发布地址+/examples/xx.html进入需要了解的例子查看即可。 1.4 体系

22、结构布署 1.4.1 基于J2EE 的WebGIS 体系结构 将WebGIS与J2EE相结合,利用J2EE的平台无关性与分布式结构,以EJB(Enterprise JavaBean)封装WebGIS 的应用功能,实现WebGIS 应用层的可移植性。对应于J2EE 从业务逻辑上的划分,将WebGIS 分为3 层:客户层、中间层、数据层。 1)客户层:可以是应用程序、浏览器,本文采用浏览器与OpenLayers 相结合,为用户提供栅格或者矢量地理信息。 2)中间层:包括Web 层、Web 应用服务层。Web 层采用Tomcat 作为Web 容器,在此容器中提供了JSP(JavaServer

23、 Pages)以及Servlet 组件,负责客户端与应用服务器的通讯和客户端的请求。 Web 应用服务层是系统的核心,它运行在WebGIS 应用服务器上,由运行在EJB 容器中的实体EJB组件与会话EJB 组件组成。本系统的GIS 服务器采用GeoServer1.6.0,由它来处理各种来自于浏览器或者其他应用程序的WMS 与WFS 请求,完成WebGIS 空间数据访问和复杂的空间任务,并可以通过多种数据源接口直接访问空间数据,将处理的结果以栅格、矢量或者GML 的形式传输到客户端。 3)数据层:空间数据源可以有多种,可以是单独的文件或者是数据库。本文采用了PostGIS 空间数据库存放数据

24、源,数据源可由应用服务器内的EJB 通过JDBC 访问。图 4是系统结构图。 图 4系统结构图 1.4.2 WMS 规范和WFS 规范 OGC 的宗旨是让用户能从任何一个网络、应用程序或计算机平台中,方便地获取地理信息和服务;通过共同的接口规范,让数据、服务提供者、应用系统开发者和信息整合者,能在短时间内花最少的费用,让使用者容易获取、使用数据及服务[5]。在OGC 完成的正式规范中,用于网络客户端与服务器端之间通信的共同接口规范Web 地图服务接口规范(WMS)和Web 要素服务实现规范(WFS)等在不同程度上解决了地理空间数据和服务的互操作问题。 WMS 规范 W

25、MS 是OGC 提出的Open Web Services 规范之一。它利用具有空间地理位置信息的数据制作地图。在WMS 规范中,将地图定义为地理数据可视化表现,通过请求WMS 返回的是地图图像,而不是地理数据。 此规范定义了三个基础性操作协议:GetCapabilities、GetMap、GetFeatureInfo。这些协议共同构成了利用WMS 创建和叠加显示不同来源的远程异构地图服务的基础[6]。 1)GetCapabilities 用来请求获得WMS 的服务级元数据,服务器端返回包括版本信息、服务类型、请求内容等元数据使用XML 形式来表示。 2)GepMap 根据请求内容的不同,

26、返回不同格式的数据。可以返回常用图片格式的栅格地图片段,也可以通过安装第三方插件返回矢量地图供用户浏览。地图的渲染是通过一个样式文件SLD(Styled Layer Descriptor)生成的,此文件用XML 编写。 3) GetFeatureInfo 操作是可选操作,可提供给用户地理要素信息,如用户在客户端点击地图上的某一元素,GetFeatureInfo 操作即可返回该元素的相关属性信息。 WFS 规范 WFS 也是由OGC 提出的Open Web Services 规范。WFS 更透明更开放的提供了网络地图应用。它不像WMS 一样只提供图片给用户,而是以GML 格式把源地理信

27、息数据表现出来,GML 是一种基于XML 的数据格式,它可以完整的再现数据,使得服务器端和客户端能够在要素层面进行“通讯”。这些GML 数据可以下载并可以与其他数据结合做分析,也可以与其他的网络服务相结合,给网络提供更丰富的应用[8]。WFS 可以分为两种服务类型:Basic WFS 与Transaction WFS 服务。BasicWFS 提供了三种操作: 2 基于PostgreSQL和PostGIS的地图呈现 1986年,加州大学伯克利分校的Michael Stonebraker教授领导了Postgres的项目,它是PostgreSQL的前身。随后出现了PostGIS,PostGIS是

28、对象-关系型数据库系统PostgreSQL的一个扩展,它的出现让人们开始重视基于数据库管理系统的空间扩展方式,而且使PostGIS有望成为今后管理空间数据的主流技术。 由于空间数据具有空间位置、非结构化、空间关系、分类编码、海量数据等特征,一般的商用数据库管理系统难以满足要求。 为了提高数据库管理系统(DBMS)对空间数据的管理能力,国内外先后出现过:文件与关系数据库混合管理系统、全关系型空间数据库管理系统、关系型数据库+空间数据引擎、扩展对象关系型数据库管理系统,以及面向对象空间数据库管理系统等多种解决方案。目前,国内外较为流行的主要集中在“关系型数据库+空间数据引擎”、“扩展对象关

29、系型数据库”两方面。 缘起PostgrSQL 1986年,加州大学伯克利分校的Michael Stonebraker教授领导了Postgres的项目,它是PostgreSQL的前身。这个项目的成果非常显著,在现代数据库的许多方面都作出了大量的贡献,如在面向对象的数据库、部分索引技术、规则、过程和数据库扩展方面都取得了显著的成果。同时,Stonebraker将PostgreSQL纳入到BSD版权体系中,使得PostgreSQL在各种科研机构和一些公共服务组织得到了广泛的应用。 在PostgreSQL中已经定义了一些基本的集合实体类型,这些类型包括:点(POINT)、线(LINE)、线段

30、LSEG)、方形(BOX)、多边形(POLYGON)和圆(CIRCLE)等;另外,PostgreSQL定义了一系列的函数和操作符来实现几何类型的操作和运算;同时,PostgreSQL引入空间数据索引R-tree。 尽管在PostgreSQL提供了上述几项支持空间数据的特性,但其提供的空间特性很难达到GIS的要求,主要表现在:缺乏复杂的空间类型;没有提供空间分析;没有提供投影变换功能。为了使得PostgreSQL更好的提供空间信息服务,PostGIS应运而生。 PostGIS简介 PostGIS是对象关系型数据库系统PostgreSQL的一个扩展,PostGIS提供如下空间信息服务

31、功能:空间对象、空间索引、空间操作函数和空间操作符。同时,PostGIS遵循OpenGIS的规范。 PostGIS的版权被纳入到GNU的GPL中,也就是说任何人可以自由得到PostGIS的源码并对其做研究和改进。正是由于这一点,PostGIS得到了迅速的发展,越来越多的爱好者和研究机构参与到PostGIS的应用开发和完善当中。 PostGIS特性 PostGIS支持所有的空间数据类型,这些类型包括:点(POINT)、线(LINESTRING)、多边形(POLYGON)、多点(MULTIPOINT)、多线(MULTILINESTRING)、多多边形(MULTIPOLYGON)和集合对象

32、集(GEOMETRYCOLLECTION)等。PostGIS支持所有的对象表达方法,比如WKT和WKB。 PostGIS支持所有的数据存取和构造方法,如GeomFromText()、AsBinary(),以及GeometryN()等。 PostGIS提供简单的空间分析函数(如Area和Length)同时也提供其他一些具有复杂分析功能的函数,比如Distance。 PostGIS提供了对于元数据的支持,如GEOMETRY_COLUMNS和SPATIAL_REF_SYS,同时,PostGIS也提供了相应的支持函数,如AddGeometryColumn和DropGeometryColum

33、n。 PostGIS提供了一系列的二元谓词(如Contains、Within、Overlaps和Touches)用于检测空间对象之间的空间关系,同时返回布尔值来表征对象之间符合这个关系。 PostGIS提供了空间操作符(如Union和Difference)用于空间数据操作。比如,Union操作符融合多边形之间的边界。两个交迭的多边形通过Union运算就会形成一个新的多边形,这个新的多边形的边界为两个多边形中最大边界。 PostGIS还提供以下功能: ·数据库坐标变换 数据库中的几何类型可以通过Transform函数从一种投影系变换到另一种投影系中。在OpenGIS中的几何类

34、型都将SRID作为自身结构的一部分,但不知什么原因,在OpenGIS的SFSQL规范中,并没有引入Transform。 ·球体长度运算 存储在普通地理坐标系中的集合类型如果不进行坐标变换是无法进行程度运算的,OpenGIS所提供的坐标变换使得积累类型的程度计算变成可能。 ·三维的几何类型 SFSQL规范只是针对二维集合类型。OpenGIS提供了对三维集合类型的支持,具体是利用输入的集合类型维数来决定输出的表现方式。例如,即便所有几何对象内部都以三维形式存储,纯粹的二维交叉点通常还是以二维的形式返回。此外,还提供几何对象在不同维度间转换的功能。 ·空间聚集函数 在数据库中

35、聚集函数是一个执行某一属性列所有数据操作的函数。比如Sum和Average,Sum是求某一关系属性列的数据总和,Average则是求取某一关系属性列的数据平均值。与此对应,空间聚集函数也是执行相同的操作,不过操作的对象是空间数据。例如聚集函数Extent返回一系列要素中的最大的包裹矩形框,如“SELECT EXTENT(GEOM) FROM ROADS”这条SQL语句的执行结果是返回ROADS这个数据表中所有的包裹矩形框。 ·栅格数据类型 PostGIS通过一种新的数据类型片,提供对于大的栅格数据对象的存储。片由以下几个部分组成:包裹矩形框、SRID、类型和一个字节序列。通过将片的大

36、小控制在数据库页值(32×32)以下,使得快速的随即访问变成可能。一般大的图片也是通过将其切成32×32像素的片然后再存储在数据库中的。 2.1 PostgreSQL和PostGIS的安装 PostgreSQL是基于加州大学伯克利分校计算机系写的 POSTGRES(Version 4.2 )软件包开发的对象关系型数据库管理系统(ORDBMS),是开源的,发布在 BSD许可下 。经过二十几年的发展(起始与1986年), PostgreSQL 是世界上可以获得的最先进的开放源码的数据库系统, 它提供了多版本并行控制,支持几乎所有 SQL 构件(包括子查询,事务和用户定 义类型和函数), 并且可

37、以获得非常广阔范围的(开发)语言绑定 (包括 C,C++,Java,perl,tcl,和 python),目前最新的版本是 PostgreSQL8.3.x。 PostgreSQL 使用一种客户端/服务器的模式,即一次 PostgreSQL 会话在,需要执行数据库操作的用户的客户端(前端)应用和数据库服务器程序(postmaster)之间完成。这跟典型的客户端/服务器应用(C/S应用)一样,这些客户端和服务器可以在不同的主机上,它们通过 TCP/IP 网络联接通讯。 两个图形界面工具: pgAdmin III : 图形界面形式的管理工具 PhpPgAdmin :Web-based Po

38、stgreSQL 管理工具 PostSQL+PostGIS的安装(windows环境下) 下载 PostgreSQL安装程序,这里8.3.0版或其他。 解压postgresql-8.3.0-1.zip文件后,双击postgresql-8.3.msi安装程序即可。 安装过程大概会遇到: Secongdary Logon服务没有运行 的问题。 在系统服务里,找到 Secongdary Logon服务,启动之,即可。 这样,完成之后, pgAdmin III 同时也会被安装。 对于不使用命令进行操作的朋友来说,图形用户界面是直观方便、容易上手的,其主窗口如下图: 新版

39、本的PostgreSQL在其安装程序中集成了PostGIS,只需要在安装过程中选中PostGIS和pgsql项就可以了。 2.2 PostGIS中的几何类型 PostGIS支持所有OGC规范的“Simple Features”类型,同时在此基础上扩展了对3DZ、3DM、4D坐标的支持。 1. OGC的WKB和WKT格式 OGC定义了两种描述几何对象的格式,分别是WKB(Well-Known Binary)和WKT(Well-Known Text)。 在SQL语句中,用以下的方式可以使用WKT格式定义几何对象: POINT(0 0) ——点 LINESTRING(0 0,1 1

40、1 2) ——线 POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)) ——面 MULTIPOINT(0 0,1 2) ——多点 MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4)) ——多线 MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1))) ——多面 GEOMETRYCOLLECTION(POINT(2 3),LINESTRING((2 3,3 4)

41、)) ——几何集合 以下语句可以使用WKT格式插入一个点要素到一个表中,其中用到的GeomFromText等函数在后面会有详细介绍: INSERT INTO table ( SHAPE, NAME ) VALUES ( GeomFromText('POINT(116.39 39.9)', 4326), '北京'); 2. EWKT、EWKB和Canonical格式 EWKT和EWKB相比OGC WKT和WKB格式主要的扩展有3DZ、3DM、4D坐标和内嵌空间参考支持。 以下以EWKT语句定义了一些几何对象: POINT(0 0 0) ——3D点 SRID=32632;POINT

42、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)'), '北京' ) Canonical格式是16进制编码的几何对象,直接用SQL语句查询出来的就是这种格式。 3. S

43、QL-MM格式 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)) ——插值复合曲线 CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1)) ——曲线多边形 MULTICURVE((0

44、0, 5 5),CIRCULARSTRING(4 0, 4 4, 8 4)) ——多曲线 MULTISURFACE(CURVEPOLYGON(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))) ——多曲面 2.3 PostGIS中空间信息处理的实现 1. spatial_ref_sys表 在基于PostGIS模板创建的数据库的public模式下,有一个spatial_ref_sys表

45、它存放的是OGC规范的空间参考。我们取我们最熟悉的4326参考看一下: 它的srid存放的就是空间参考的Well-Known ID,对这个空间参考的定义主要包括两个字段,srtext存放的是以字符串描述的空间参考,proj4text存放的则是以字符串描述的PROJ.4 投影定义(PostGIS使用PROJ.4实现投影)。 4326空间参考的srtext内容: GEOGCS["WGS 84",DATUM["WGS_1984", SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]], TOWGS84[0,0,

46、0,0,0,0,0],AUTHORITY["EPSG","6326"]], PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]], UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]] 4326空间参考的proj4text内容: +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs 2. geometry_columns表 geometry_columns表存放了当前数据库中所有几何

47、字段的信息,比如我当前的库里面有两个空间表,在geometry_columns表中就可以找到这两个空间表中几何字段的定义: 其中f_table_schema字段表示的是空间表所在的模式,f_table_name字段表示的是空间表的表名,f_geometry_column字段表示的是该空间表中几何字段的名称,srid字段表示的是该空间表的空间参考。 3. 在PostGIS中创建一个空间表 在PostGIS中创建一个包含几何字段的空间表分为2步:第一步创建一个一般表,第二步给这个表添加几何字段。 以下先在test模式下创建一个名为cities的一般表: create table test

48、cities (id int4, name varchar(20)) 再给cities添加一个名为shape的几何字段(二维点): select AddGeometryColumn('test', 'cities', 'shape', 4326, 'POINT', 2) 4. PostGIS对几何信息的检查 PostGIS可以检查几何信息的正确性,这主要是通过IsValid函数实现的。 以下语句分辨检查了2个几何对象的正确性,显然,(0, 0)点和(1,1)点可以构成一条线,但是(0, 0)点和(0, 0)点则不能构成,这个语句执行以后的得出的结果是TRUE,FALSE。 sel

49、ect IsValid('LINESTRING(0 0, 1 1)'), IsValid('LINESTRING(0 0,0 0)') 默认PostGIS并不会使用IsValid函数检查用户插入的新数据,因为这会消耗较多的CPU资源(特别是复杂的几何对象)。当你需要使用这个功能的时候,你可以使用以下语句为表新建一个约束: ALTER TABLE cities ADD CONSTRAINT geometry_valid CHECK (IsValid(shape)) 这时当我们往这个表试图插入一个错误的空间对象的时候,会得到一个错误: INSERT INTO test.cities (

50、 shape, name ) VALUES ( GeomFromText('LINESTRING(0 0,0 0)', 4326), '北京'); ERROR: new row for relation "cities" violates check constraint "geometry_valid" SQL 状态: 23514 5. PostGIS中的空间索引 数据库对多维数据的存取有两种索引方案,R-Tree和GiST(Generalized Search Tree),在PostgreSQL中的GiST比R-Tree的健壮性更好,因此PostGIS对空间数据的索引一般采用Gi

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服