新書推薦:
《
无尽的海洋:美国海事探险与大众文化(1815—1860)
》
售價:NT$
454.0
《
治盗之道:清代盗律的古今之辨
》
售價:NT$
556.0
《
甲骨文丛书·剑桥世界暴力史(第一卷):史前和古代世界(套装全2册)
》
售價:NT$
959.0
《
甲骨文丛书·中华早期帝国:秦汉史的重估
》
售價:NT$
1367.0
《
欲望与家庭小说
》
售價:NT$
449.0
《
惜华年(全两册)
》
售價:NT$
320.0
《
甲骨文丛书·古代中国的军事文化
》
售價:NT$
454.0
《
中国王朝内争实录(套装全4册):从未见过的王朝内争编著史
》
售價:NT$
1112.0
|
編輯推薦: |
本书弥补了讲解开源GIS的书籍少之又少的缺憾,为促进开源GIS在科研与教学中的应用,贡献一份绵薄之力。
本书是一本介绍空间数据组织与管理等基础知识,以及如何运用开源GIS软件和开源空间数据库PostGIS的实战操作教程。理论和实例相互结合,操作性强,读者在理论学习和实验操作中领悟开源软件的精髓。
|
內容簡介: |
本书以开源GIS软件和开源空间数据库PostgreSQL为主要内容,特别是以空间数据库PostgreSQL为中心,以OGC标准为主线,详细介PostgreSQL、QGIS、GeoServer等开源软件及其应用案例。全书分为8章,第1章对空间数据库的发展状况进行介绍和分析;第2章简单介绍开源GIS软件和空间数据库PostgreSQL的初步使用;第3章介绍空间数据库的SQL Geometry数据类型;第4章介绍矢量数据空间SQL查询与分析操作;第5章介绍栅格数据空间SQL查询与分析操作;第6章介绍利用QGIS、ArcMap对空间数据库进行管理以及利用GeoServer发布空间信息;第7章分别介绍利用Java和C#对空间数据库进行管理和操作;第8章以案例的方式介绍利用开源软件和开源空间数据库在“智慧林业”中的应用。
本书主要针对于教学科研和工程应用,特别对开源GIS和空间数据库的理论推广和工程项目应用具有重要的应用价值;本书主要适合于地理信息系统、林业、交通应用、测绘等与地学相关领域的从业人员。
|
目錄:
|
第1章初识空间数据库1
1.1回顾数据库的相关基础知识1
1.1.1数据库的基本概念1
1.1.2结构化查询语言1
1.1.3数据库访问技术2
1.1.4数据库的标准3
1.2认识空间数据库4
1.2.1空间数据库4
1.2.2空间数据库标准简介5
1.2.3空间数据模型6
1.3空间数据库产品8
1.3.1常见的商业空间数据库8
1.3.2开源空间数据库8
1.3.3PostGIS简介11
第2章开源GIS软件和空间数据库使用初步14
2.1PostgreSQL的安装与PostGIS空间引擎配置14
2.1.1PostgreSQL的安装14
2.1.2PostGIS空间引擎配置18
2.2QGIS与uDig的安装与配置24
2.2.1QGIS的安装与配置24
2.2.2uDig的安装与配置26
2.3GeoServer的安装与配置28
2.4pgAdminⅢ的基本操作35
2.4.1主窗体35
2.4.2导航菜单功能36
2.4.3工具栏的介绍37
2.4.4数据库与表的创建37
2.4.5数据库的备份与恢复42
2.5利用QGIS将shp数据导入PostgreSQL空间数据库43
2.5.1利用QGIS连接PostgreSQL空间数据库43
2.5.2导入导出shp数据45
开源GIS与空间数据库实战教程目录第3章空间数据库的SQLGeometry数据类型48
3.1空间数据类型继承关系UML图48
3.2空间数据的WKT和WKB表现形式48
3.3空间数据的坐标系统SRID50
3.4在PostgreSQL中直接利用SQL建立空间数据库51
3.4.1利用SQL语句在PostgreSQL空间数据库中建立空间数据表51
3.4.2利用SQL语句在PostgreSQL空间数据表中插入空间数据51
第4章矢量数据空间SQL查询与分析操作53
4.1PostGIS基本类型53
4.2管理函数UpdateGeometrySRID53
4.3几何构造函数55
4.3.1ST_GeomFromText55
4.3.2ST_MakePolygon56
4.4几何读写函数58
4.4.1ST_IsClosed、ST_IsRing和ST_IsSimple58
4.4.2ST_EndPoint与ST_StartPoint60
4.5几何编辑函数62
4.5.1ST_AddPoint62
4.5.2ST_RemovePoint63
4.6几何输出函数ST_AsText65
4.7运算符函数66
4.8空间关系与量测67
4.8.1ST_Centroid67
4.8.2ST_ClosestPoint68
4.8.3ST_Intersects70
4.8.4ST_Relate71
4.9几何处理函数73
4.9.1ST_Buffer73
4.9.2ST_Intersection75
4.9.3ST_Union76
4.10线性参考函数ST_LineInterpolatePoint78
4.11杂类函数ST_Point_Inside_Circle79
4.12特殊函数PostGIS_AddBBox81
第5章栅格数据空间SQL查询与分析操作82
5.1栅格数据管理82
5.1.1新建栅格数据82
5.1.2导出栅格数据文件83
5.1.3导入空间数据库83
5.2栅格数据属性查询86
5.2.1ST_MetaData86
5.2.2ST_BandMetaData86
5.2.3ST_Histogram87
5.2.4ST_Value88
5.2.5ST_Resize89
5.3栅格数据间的空间关系91
5.3.1ST_Intersects91
5.3.2ST_Contains91
5.4栅格数据处理与分析92
5.4.1ST_Clip92
5.4.2ST_Union93
5.4.3ST_HillShade、ST_Slope和ST_Aspect95
第6章利用QGIS、ArcMap和GeoServer对空间数据库进行管理、操作和发布97
6.1利用QGIS对PostgreSQL空间数据库进行空间数据管理97
6.1.1在QGIS中加载PostgreSQL空间数据库数据97
6.1.2编辑导入的空间数据,并保存在数据库中99
6.2利用ArcMap对PostgreSQL空间数据库进行空间数据管理101
6.2.1在ArcGIS和PostgreSQL中配置相关文件101
6.2.2在ArcMap设置到PostgreSQL的连接103
6.3利用GeoServer发布PostgreSQL中的空间数据105
6.3.1发布空间数据105
6.3.2预览发布的空间数据110
6.4利用Udig修饰PostgreSQL中的空间数据111
6.4.1利用Udig美化地图111
6.4.2在GeoServer中为发布地图添加地图样式115
第7章利用Java和C#对空间数据库进行管理和操作120
7.1Geotools、JTS地理信息系统Java开源库简介120
7.1.1Geotools简介120
7.1.2JTS简介120
7.2利用Geotools和JTS对PostgreSQL空间数据库进行空间数据分析120
7.2.1新建Java项目121
7.2.2代码实现122
7.3NetTopologySuite地理信息系统C#开源库简介127
7.4利用NetTopologySuite对PostgreSQL空间数据库进行
空间数据分析127
7.4.1新建控制台应用程序127
7.4.2代码实现127
7.4.3在QGIS中查看生成的Shape文件128
7.5SharpMap地理信息系统C#开源库简介129
7.6利用SharpMap对PostgreSQL空间数据库进行
空间数据分析130
7.6.1新建WinFrom程序,并进行简单布局130
7.6.2代码实现132
7.6.3实现效果134
第8章面向智慧林业的生态公益林开源应用136
8.1数据概况与开源解决方案136
8.1.1生态公益林数据136
8.1.2开源解决方案的总体思路136
8.2QGIS对公益林数据的管理与操作137
8.3PostGIS对公益林数据的管理与操作139
8.4QGIS专题地图的制作139
8.5快速发布网络地图142
8.5.1安装qgis2web插件142
8.5.2qgis2web的参数设置144
8.5.3ApacheServer发布地图并在不同移动终端查看145
附录A两大标准几何对象对比表147
附录BGeometry与ST_Geometry定义的空间操作对比表148
附录C函数汇总表151
1.1回顾数据库的相关基础知识1
1.1.1数据库的基本概念1
1.1.2结构化查询语言1
1.1.3数据库访问技术2
1.1.4数据库的标准3
1.2认识空间数据库3
1.2.1空间数据库3
1.2.2空间数据库标准简介5
1.2.3空间数据模型6
1.3空间数据库产品7
1.3.1常见的商业空间数据库7
1.3.2开源空间数据库8
1.3.3PostGIS简介11
第2章开源GIS软件和空间数据库使用初步14
2.1PostgreSQL的安装与PostGIS空间引擎配置14
2.1.1PostgreSQL的安装14
2.1.2PostGIS空间引擎配置19
2.2QGIS与uDig的安装与配置26
2.2.1QGIS的安装与配置26
2.2.2uDig的安装与配置29
2.3GeoServer的安装与配置32
2.4pgAdminⅢ的基本操作40
2.4.1主窗体40
2.4.2导航菜单功能41
2.4.3工具栏的介绍42
2.4.4数据库与表的创建43
2.4.5数据库的备份与恢复47
2.5利用QGIS将Shp数据导入PostgreSQL空间数据库49
2.5.1利用QGIS连接PostgreSQL空间数据库49
2.5.2导入导出shp数据52
第1章初识空间数据库〖1〗1.1回顾数据库的相关基础知识〖*45〗1.1.1数据库的基本概念
1.什么是数据库
数据库是由一批数据构成有序的集合,这些数据被存放在结构化的数据表中。数据表之间相互关联,反映了客观事物之间的本质联系。数据库系统提供数据安全控制和完整性控制。
数据库发展阶段大致划分为如下几个阶段:人工管理阶段、文件系统阶段、数据库系统阶段、高级数据库阶段。其种类大概有3种:层次式数据库、网络式数据库和关系式数据库。
对于数据库的明确定义并不固定,随着数据库历史的发展,定义的内容也有很大的不同,其中一种比较普遍的观点认为:数据库(Database,DB)是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。
2.表
在关系数据库中,数据库表是一系列二维数组的集合,用来存储数据和操作数据的逻辑结构。它由纵向的列和横向的行组成,行被称为记录,是组织数据的单位;列被称为字段,每一列表示记录的一个属性,都有相应的描述信息,如数据类型、数据宽度等。
3.数据类型
数据类型决定了数据在计算机中的存储格式,代表不同的信息类型。常用的数据类型有:整数数据类型、浮点数数据类型、精确小数类型、二进制数据类型、日期时间数据类型、字符串数据类型。表中的每一个字段都有某种指定的数据类型。
1.1.2结构化查询语言
结构化查询语言StructuredQueryLanguage简称SQL,SQL语言的主要功能就是同各种数据库建立联系,进行沟通。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。目前,绝大多数流行的关系型数据库管理系统,如Oracle,Sybase,MicrosoftSQLServer,Access等都采用了SQL语言标准。虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括Select,Insert,Update,Delete,Create,以及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。
开源GIS与空间数据库实战教程第1章初识空间数据库SQL语言包含4个部分。
数据定义语言(DDL):DROP、CREATE、ALTER等语句。
数据操作语言(DML):INSERT、UPDATE、DELETE语句。
数据查询语言(DQL):SELECT语句。
数据控制语言(DCL):GRANT、REVOKE、COMMIT、ROLLBACK语句。
下面是一条SQL语句,该语句声明创建了一个students表:CREATETABLEstudents
student_idINT,
nameVARCHAR30,
sexCHAR1,
PRIMARYKEYstudent_id
;该语句创建一张表,该表包含4个字段,分别为student_id、name、sex、birth。其中student_id被定义为表的主键。
现在只是定义了一张表,表中没有任何数据,接下来这条SQL声明语句,将在student表中插入一条数据记录:INSERTINTOstudentsstudent_id,name,sex,birth
VALUES41048101,''LeoKeith'',''1'',''1990-07-25'';执行完该SQL语句之后,students表中就会增加一行新记录,该记录中字段student_id的值为41048101,name字段的值为LeoKeith,sex字段值为1,birth字段值为1990\|07\|25。
再使用SELECT查询语句获取刚才插入的数据,语句如下:SELECTnameFROMstudentsWHEREstudent_id=41048101;上面简单的列举了常用的数据库操作语句,目的是帮助读者回顾数据库的基础知识,接下来会更进一步学习数据库的其他技术。
1.1.3数据库访问技术
不同的程序设计语言会有各自不同的数据库访问技术,程序语言通过这些技术,执行SQL语句,进行数据库管理,主要的数据库访问技术如下。
1.ODBC
OpenDatabaseConnectivity(开放数据库互连)技术为访问不同的SQL数据库提供了一个共同的接口。ODBC使用SQL作为访问数据的标准。这个接口提供了最大限度的互操作性:一个应用程序可以通过一组共同的代码访问不通过的SQL数据库管理系统(DBMS)。
一个基于ODBC的应用程序对数据库的操作不依赖于任何DBMS,不直接和DBMS打交道,所有的数据库操作有对应的DBMS的ODBC驱动程序完成。也就是说,不论是Access、PostgreSQL还是Oracle数据库,均可使用ODBCAPI进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。
2.JDBC
JavaDataBaseConnectivity(Java数据库连接)是Java应用程序连接数据库的标准方法,是一种用于执行SQL语句的JavaAPI,可以多种关系数据库提供统一访问,它由一组使用Java语言编写的类和接口组成。
3.ADO.NET
ADO.NET是微软在.NET框架下开发设计的一组用于和数据源进行交互的面向对象类库。它提供了关系数据、XML和应用程序数据的访问,允许和不同类型的数据源以及数据库进行交互。
1.1.4数据库的标准
在1.2和1.3节中介绍了SQL的基本使用,我们可以体会到SQL的简洁与强大,但是SQL的这些优秀特性并不是一蹴而就的,它的发展和数据库发展有着密切的联系,SQL之所以强大和为制定的SQL标准有直接的关系。
随着数据库技术的发展和信息化水平的提高,出现了很多数据库厂商和产品,为了在各个数据库厂商之间取得更大的统一性,美国国家标准学会(AmericanNationalStandardsInstitute,ANSI)于1986年发布了第一个SQL标准,并于1989年发布了第二个版本,该版本已经被广泛地采用。ANSI在1992年更新了SQL标准的版本,即SQL92和SQL2,并于1999年再次更新为SQL99和SQL3标准。在每一次更新中,ANSI都在SQL中添加了新特性,并在语言中集成了新的命令和功能。
对于各种数据库产品,ANSI标准规范化了很多SQL行为和语法结构。随着开源数据库产品(例如MySQL和PostgreSQL)日渐流行并由虚拟团队而不是大型公司开发,这些标准变得更加重要。这些开源数据库作为数据库产品占有着重要的地位,我们将在后面的章节对它们做更进一步的介绍。
现在,SQL标准由ANSI和国际标准化组织(InternationalStandardsOrganization,ISO)作为ISOIEC9075标准维护。最新发布的SQL标准是SQL:2008,下一版本的发布工作已经在进行之中,它将包含RDBMS在收集或分发数据方式上的新发展。
1.2认识空间数据库〖*45〗1.2.1空间数据库〖*2〗1.数据库与空间数据库历经50多年的发展,数据库技术依然成为对海量数据管理的一种重要手段。那么,空间数据库作为数据库的一个分支,利用空间数据库来存储和管理非结构化的空间数据。随着对地观测技术的迅速发展和社会需求的不断增大,基于空间数据的应用领域(如电子地图、导航服务等)也在不断地扩大,空间数据的管理将成为今后信息管理的重要组成部分。此外,空间数据库在整个地理信息系统中占有极其重要的地位,主要体现在:用户在决策中通过访问空间数据库获得空间数据,在决策过程完成后在将决策结果存储到空间数据库中。
空间数据库与一般数据库相比,具有数据量大、数据应用广泛和属性数据空间数据并存的特点,尤以第三点最为突出,空间数据库不仅有地理要素的属性数据(与一般数据库中的数据性质相似),还有大量的空间数据,它们描述地理要素的空间分布位置,并且这两种数据有着不可分割的关系。
2.空间数据库的发展历程
空间数据管理技术经历了多年的发展和演变,大体经历了文件系统、文件关系混合系统和对象关系型空间数据库管理系统等三个阶段。伴随着每一次空间数据库管理方式的变革,GIS软件的体系结构也在发生着革命性的变化。如图1\|1是空间数据库体系架构的演变图。
图1\|1空间数据库体系架构演变图
对于传统的第一代空间数据管理系统,空间数据主要采用文件管理系统,即将空间数据存储在自行定义的不同格式文件中。在这种管理方式下,文件管理系统仍然是操作系统的一部分,所有的空间数据要用特殊的地理信息系统软件进行解释和处理。
随着关系型数据管理技术的发展与成熟,第二代空间数据管理系统将数据存储在关系数据库中,通常将数据分为属性数据或者说非空间部分和空间数据两个部分。但是这种方式一直缺乏灵活地整合属性数据和空间数据。
真正的空间数据库起始于空间要素地位的变化,人们开始尝试把空间要素看作是数据库最重要的对象,空间数据库中的空间数据与对象关系数据库进行全面整合。这也完成了以GIS为核心的技术转变为以数据库为核心的导向性转变。就此第三代空间数据库诞生。
1.2.2空间数据库标准简介〖*2〗1.空间数据库标准的存在意义和数据库的标准一样,随着GIS和数据厂商逐步推出了自己的空间数据库产品,为了避免出现大量的空间数据库分散在不同的商业组织、政府部门和企业中,从而导致这些空间数据库处于封闭的状态,为了增强空间数据在管理管理上的统一性以适应空间数据管理的需要,许多标准化组织开发并完善空间数据存储和SQL语言的规范。比较典型的两个代表分别是开放地理空间信息协会(OpenGeospatialConsortium,OGC)推出的地理信息简单要素的SQL实现规范(SimpleFeatureAccessSQL,SFASQL)和国际标准化组织国际电工委员会第一联合技术委员会(ISOIECJTC1SC32)发布的SQL多媒体及应用包的第三部分(SQLMultimediaPart3:Spatial,SQLMM)。一方面,空间数据库标准可以提高空间信息的共享。另一方面,由于标准包含了一些空间数据库相关的明确概念和框架,可作为空间数据库实现的参考。
图1\|2开放式地理信息系统
联合会标志2.OGC地理信息实现标准简单要素访问
1994年开放式地理信息系统联合会成立,全称OpenGeospatialConsortium,他自称是一个非盈利的、国际化的、自愿协商的标准化组织,它的主要目的就是制定空间信息和基于位置服务相关的标准。其标志如图所示,这些标准都是OGC的"产品",而这些标准的用处就在于使不同产品、不同厂商之间可以通过统一的接口进行数据互操作。
在地理信息领域,OGC已经是一个类似于"官方"的标准化机构,它不但吸纳了ESRI、Google、Oracle等业界主要企业作为其成员,同时还和W3C、ISO、IEEE等协会组织结成合作伙伴关系。因此,OGC的标准虽然并没有强制性,但是因为其背景和历史的原因,它所制定的标准天然地具有一定的权威性。OGC推出的SFA定义了函数的访问接口,依据地理几何对象模型,提供在不同平台下OLECOM,SQL,CORBA对简单要素点、线、面的发布、存储、读取和操作的接口规范说明。目前,已被ISOTC211吸纳成为ISO19125标准。SFA的通用体系架构规范,基于分布式环境描述了通用的简单要素地理几何对象模型,以及地理几何对象的不同表达方式和空间参考系统的表达方式。
这个规范不是针对某个特定平台定义的,具有平台独立性。SFASQL定义了基于SQL平台实现几何对象模型及访问接口函数。目前,它有3个版本,分别是1999年推出的SFSQL1.1版SimpleFeatureSpecificationforSQLVersion1.1,2005年修订为SFASQL1.1.0版和最新的SFASQL1.2.0版。
3.ISOIEOSQLMM空间数据标准
SQL99具有支持触发器、集合和抽象数据类型等新特征,其中抽象数据类型提供对象扩展的能力,如继承、多态、封装等。随着SQL99对抽象数据类型定义的支持,以及用户对新的数据类型如全文、空间、图像等的巨大需求,ISOIEC开始考虑把这些数据类型作为标准数据类型,并进行相关的定义,因此,开发了SQL多媒体和应用程序包SQLMM标准。
SQLMM根据应用领域的不同,分为多个部分:第一部分架构Frame\|work提出了在各章中出现的公共概念,并简要地说明了其他各个部分中的定义方法;第二部分全文FullText定义了众多结构化用户自定义类型,以支持文本数据的存储一般在对象关系数据库;第三部分空间Spatial定义了空间矢量数据存储与检索的有关标准;第四部分通用工具GeneralPurposeFacilities指定一些在不同领域类可以通用抽象数据类型和操作,该部分已经被撤销;第五部分静态图像StillImage定义了静态图像数据存储与检索的相关标准;第六部分数据挖掘DataMining定义了有关数据挖掘的标准;第七部分历史History扩展SQL支持历史数据,这样有利于更新。第三部分Spatial定义了空间基本数据类型和空间操作,主要是为了解决如何使用存储和处理这些数据类型的空间数据。(注:本书主要介绍SQLMM的第三部分,如果没有特别指出,文中的SQLMM均指代SQLMMPart3:Spatial)。
1.2.3空间数据模型
空间数据模型是对现实世界地理现象、实体以及它们之间相互关系的认识和理解,用一定的方案建立起数据组织方式实现计算机对现实世界的抽象与表达。空间数据模型的三要素是:空间数据结构、空间数据操作和空间完整性约束。其中,空间数据类型与空间操作是空间数据模型主要组成部分,空间数据模型的设计、空间数据库系统的性能与查询语言的效率都和它们密切相关。为了规范空间数据模型及其空间操作,OGC和ISOIEC国际标准化组织制定了空间数据类型标准以及每一种空间数据类型拥有的空间操作子标准。
目前,SFASQL和SQLMM这两个标准公共部分的接口已经相互兼容,但是在这两个标准无论是从内容覆盖面,还是从某些概念的界定上都有一定的差别。这些差别都会在空间数据模型这一节中得到体现,如图1\|3和1\|4分别是SFASQL对象模型图和SQLMM对象类型图,这两幅重要的图主要说明了在OGC和ISOIEC下几何对象模型之间的层次关系。在以后的学习中体会到两套标准的差别,同时我们将会提供两份表格来具体说明这两套标准中空间数据模型表达上的具体差别,主要从两套标准几何对象和空间操作两个方面进行比较。(详见附录A和附录B)
图1-3SFASQL对象模型图
图1-4SQLMM对象类型图
3空间数据库产品
3.1常见的商业空间数据库
1.OracleSpatial
Oracle是最早实现空间数据管理的数据库管理系统。Oracle早在7.2版本就引入了内嵌式空间扩展技术--MultiDimension(MD);其后,在Oracle8中该产品名称先后被修改为SpatialDataCartridge和SpatialDataOption(SDO)。由于早期的版本不支持对象的定义,空间几何对象的坐标串主要依靠关联表来存储,故空间数据的管理效率较低。从Oracle8i起直到目前的Oracle版本,Oracle使用新的SDO_GEOMETRY数据类型存储空间数据。截止目前,OracleSpatial针对存储在Oracle数据库的空间要素,提供了一种SQL模式和便于存储、检索、更新、查询的函数集,主要包括:一种描述几何数据存储、语法、语义的模式MDSYS,一种空间索引机制,一组实现感兴趣区域查询和空间联合查询的算子和函数,一组处理结点、边和表的拓扑数据模型,一组网络数据模型以及一个存储、检索、查询、分析栅格数据的工具包(GeoRaster)。
2.SQLServerSpatial2008
MicrosoftSQLServer于2008年提供了对空间数据无缝的支持和整合,支持空间数据标准。其在数据库中整合了地理坐标系和平面坐标系数据模型及其针对该类型的相关操作,同时针对新的空间数据类型提供存储新的操作分析能力,并提供了针对多级网络索引结构来加速查询检索功能。同时为了直观的展示空间数据,可以将查询结果使用管理控制台和相关的前端工具直观的加以显示。
3.2开源空间数据库
3.2.1开源软件
(1)开源软件的概念
开源软件的详细定义比较复杂,简单来说,就是一种源代码可以任意获取的计算机软件,这种软件的版权持有人在软件协议的规定之下保留一部分权利并允许用户学习、修改、增进提高这款软件的质量。并非公开了源代码就算是开源,公开源代码和开放源代码是两回事。
开放源码软件主要被散布在全世界的编程者队伍所开发,但是同时一些大学,政府机构承包商,协会和商业公司也开发它。源代码开放是信息技术发展引发网络革命所带来的面向未来以开放创新、共同创新为特点的、以人为本的创新2.0模式在软件行业的典型体现和生动注解。开放源码软件在历史上曾经与UNIX,Internet联系的非常紧密。在这些系统中许多不同的硬件需要支持,而且源码分发是实现交叉平台可移植性的唯一实际可行的办法。在DOS,Windows,Macintosh平台上仅仅有很少的用户有可用的编译器,开放源码软件更加不普遍。对开放源码开发模式的更详细的讨论可以补充阅读看EricRaymond写的"TheCathedralandtheBazaar",该书的中文译本叫做《大教堂与市集》。
(2)开源GIS软件
GIS社会化和大众化需要实现地理数据共享和互操作,尽可能降低地理数据采集处理成本和软件开发应用成本。目前的地理信息系统大多是基于具体的、相互独立和封闭的平台开发的,它们采用不同的开发方式和数据格式,对地理数据的组织也有很大的差异,垄断和高额的费用在一定程度上限制了GIS的普及和推广。
上世纪90年代,开源思想广泛渗透到GIS领域,国内外许多科研院所相继开发出开源GIS,2006年初,国际地理空间开源基金会(OpenSouceGeospatialFoundation,OSGeo)成立,基金会的项目已从最初的8个,发展为满足BS架构的前端地理信息渲染平台、各种地理空间中间件、涵盖企业级地理空间计算平台等数十个门类的开源地理空间项目。开源GIS优势不仅仅是免费,而在于其Free和Open的真正含义,前者代表自由与免费,后者代表开放与扩展,与商业GIS产品不同,由于开源GIS软件的Free和Open,用户可以根据需要增加功能,当所有人都这样做的时候,开源产品的性能与功能也就超过了很多商业产品,因而也造就了开源的优势和活力。
此外,和一般的商业GIS平台相比,开源GIS产品大多都具有跨平台的能力,可以运行于Linux,Windows等系统,开源GIS软件得到学术界和GI5平台厂商越来越多的重视,成为GIS研究和应用创新的一个重要领域。
图1-5开源GIS软件热力图(StefanSteiniger,2013)
如图1-5,是开源GIS软件截止2012年的汇总热力图,从图可以看出开源GIS贴心地渗透到了行业内的方方面面,桌面GIS程序和地图服务器是开源GIS软件最为重要的两大类产品,用户数量和影响力也最大。空间数据库管理系统一类的开源产品也在开源GIS领域占有重要一席。下面我们简单介绍一下开源世界的重要保障--版权许可制度,开源软件版权的管理与商业软件有巨大的不同。
3.2.2开源GIS的版权许可制度
虽然开源软件有好的自由度,但是开源软件并非完全没有限制。最基本的限制,就是开源软件强迫任何使用和修改该软件的人承认发起人的著作权和所有参与人的贡献。任何人拥有可以自由复制、修改、使用这些源代码的权利,不得设置针对任何人或团体领域的限制。不得限制开源软件的商业使用等。而许可证就是这样一个保证这些限制的法律文件。基于开源软件定义中的"散布授权条款(DistributionofLicense):若软件再散布,必需以同一条款散布之。"这一条,开源软件必须附加一个法律文件,并且在任何修改后的开源或发行版本中附带同一条款。
对于开源GIS软件的版权许可制度,仍旧采用开源软件许可制度。经OpenSourceInitiative组织通过批准的开源协议目前有58种,其中最著名的许可制度有BSDtheBerkleySoftwareDistributionlicensefamily、GPLtheGNUGeneralPublicLicense、LGPLtheGNULesserGeneralPublicLicense和MITMassachusettsInstituteofTechnology四种。
1BSD是一个给予使用者很大自由的代码共享协议,不过需要使用者尊重代码作者的著作权。BSD允许使用者修改和重新发布代码,也允许使用或在BSD代码上进行商业软件开发、发布和销售。
2GPL协议和BSD许可不一样。GPL不允许修改后和衍生的代码作为闭源商业软件发布和销售。GPL协议的主要内容是只要在一个软件中使用"使用"指类库引用,修改后的代码或者衍生代码GPL协议的产品,则该软件产品必须也采用GPL协议,即必须也是开源和免费。这就是所谓的"传染性",由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成采用作为类库和二次开发的基础。
3LGPL是GPL的一个主要为类库使用设计的开源协议。和GPL要求任何使用修改衍生之GPL类库的软件必须采用GPL协议不同,LGPL允许商业软件通过类库引用link方式使用LGPL类库而不需要开源商业软件代码,这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。
4MIT是和BSD一样宽泛的许可协议,作者只保留版权而无任何其他限制。即必须基于开源的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的。
GPL与Linux类似,由于能够保护开源机构的利益,比较适合开源GIS软件的市场推广和研发支持,因此被许多开源GIS平台采用,如GRASS,QGIS,uDig。但也有一些非政府机构支持的基于MIT.LGPL的开源项目,如SAGA.MapWindow。
3.2.3常见的开源空间数据库
1.MySQLSpatial
MySQLSpatial是MySQL数据库为支持空间数据的存储和查询而加入的一种扩展功能。MySQL遵从OGC的规范,实施了一系列的空间扩展。MySQLSpatial的功能还不够完全。目前,它只支持了OpenGIS-个标准的一个子集,包涵有限的几种空间数据类型,MySQL具有与OpenGIS类对应的数据类型。目前已定义的数据类型有:GEOMETRY几何类型,POINT点,LINESTRING线,POLYGON面。GEOMETRY能够保存任何类型的几何值,而其他的单值类型POINT、LINESTRING以及POLYGON只能保存特定几何类型的值。
2.SpatiaLite
SpatiaLite空间数据库是一个简单、实用的轻量级数据库,只有几百KB,是在SQLite空间数据库基础上的扩展。它遵守OGC标准,支持SQL语言对几何类型字段的操作。同时它也集成了其他开源类库:①GEOS库,用于进行空间分析;②PROJ.4库,用于实现不同坐标参考系统间坐标的转换;③LIBICONV库,用于支持多种语言;④SQLite库,用于实现SQL数据引擎。Spatialite SQLite数据库操作简单,易于管理GIS环境下中小型的GIS数据,且数据库文件可移植性好,支持跨平台操作。此外,Spatialite还支持R-tree的数据检索,以及存储器存储,这极大地加快了用户访问数据库的速度。
3.3PostGIS简介
3.3.1什么是PostgreSQL
PostgreSQL是一个包含关系模型和支持SQL标准查询语言的数据库管理系统,支持丰富的数据类型(如JSON和JSONB类型,数组类型)和自定义类型。而且它提供了丰富的接口,可以很容易地扩展它的功能,3.3.2章节中将会重点介绍PostgreSQL的一个重要扩展PostGIS。
图1-6PostgreSQL开源数据库Logo
PostgreSQL数据库的优势如下:
PostgreSQL数据库是目前功能最强大的开源数据库,它是最接近工业标准SQL92的查询语言,并且正在实现的新功能已兼容最新的SQL标准:SQL2003.
PostgreSQL数据库是开源的、免费的,而且是BSD协议,在使用和二次开发上基本没有限制。
POstgreSQL数据库支持大量的主流开发语言,包括C、C 、Perl、Python、Java以及PHP等。
3.3.2什么是PostGIS
图1-7PostgreSQL开源数据库Logo
如图1-7,前面我们已经简单介绍了PostgreSQL,PostgreSQL数据库加上空间特性就是变成了PostGIS扩展。PostGIS的标志就是一直可爱的大象拖着一个地球。
在地理数据处理方面,让PostgreSQL更加强大的一面是其空间数据扩展PostGIS的支持。由于有PostGIS的支持,可以将PostgreSQL优良的特性和强大的功能充分的发挥在海量空间数据的存储与管理中,为空间数据库的实现提供又一优良的解决方案,并且其开源和免费的特性更是能够满足许多低成本应用的需求。
PostGIS是对象关系型数据库系统PostgreSQL的一个空间扩展组件,为PostgreSQL提供如下空间信息服务功能:空间数据对象、空间索引、空间操作函数和空间操作符。PostGIS同样也一款开源软件,源自著名的空间信息研究协会Refractions,是目前最强大的开源空间数据引擎,发展非常迅速,在国外许多成功的应用案例。
PostGIS具有如下主要特征:
支持OGC的空间数据标准,如简单要素规范的空间数据模型,WKT(Well-KnownText)、WKB(Well-KnownBinary)以及空间数据表的SQL查询规范。
通过空间数据操作符与空间操作函数提供强大的几何要素编辑功能与空间分析功能。
基于成熟的开源项目PROJ4提供地图投影坐标系的支持和GEOS提供空间地理要素类型的支持。
支持多种开发语言。
同样,PostGIS应用广泛,本书后面大部分章节都会以PostGIS为实验环境讲解空间数据库的操作,在本章的最后,我们来看看有应用程序支持PostGIS(表1-1)。
表1-1目前支持PostGIS的应用程序列举
开源软件商业软件
工具扩展
Shp2Pgsql
ogr2ogr
Dxf2PostGIS
网络服务
Mapserver
GeoServer
SharpMapSDK
MapGuideOpenSourceusingFDO
桌面应用程序
uDig
QGIS
mezoGIS
OpenJUMP
OpenEV
SharpMap
ZigGISforArcGISArcObjects.NET
GvSIG
GRASS工具扩展
SafeFMEDesktopTranslatorConverter
网络服务
IonicRedSpidernowERDAS
CadcorpGeognoSIS
IwanMapserver
MapDotNetServer
MapGuideEnterpriseusingFDO
ESRIArcGISServer9.3
桌面应用程序
CadcorpSIS
MicroimagesTNTmipsGIS
ESRIArcGIS9.3
Manifold
GeoConcept
MapInfov10
AutoCADMap3DusingFDO
|
內容試閱:
|
回忆和总结都是有价值的,在过去十年,我在大学教授GIS专业的相关课程,挥汗编写代码追赶项目进度,坐飞机到全国各地去赶场传授ArcGIS的知识。这十年中,我经历了从学生到老师、从青涩到成熟、从懵懂到淡定的一系列重要阶段。我相信,无论我的一生中有多少个十年,这十年都是在我生命中举足轻重的十年。
自己过去十年走过的那些路,现在看来是如此的崎岖,又充满了缺憾。对人生如此,对产业技术也如此。不过抱怨和自责都是没有价值的,只有留下文字和书稿,去记录和留住那些过去吧。
作为一名在地理信息产业从业长达15年之久的老兵,耳边经常听到的是ArcGIS、SuperMap、Oracle、SQLServer等内容。不论是我的学生还是认识的朋友,对开源社区(像Linux、PostgreSQL、Apache等,尤其像Hadoop或者LinuxKernel这些知名度高的社区),多数人知道的少之又少;说起来很惭愧,很多人对地理信息产业的中坚力量OGC、OSGeo也没有真正地去深入了解过它,更别说为之贡献些什么了。
我觉得这一切都需要改变!
在写作这本书的过程当中,力求内容精练、方法实用,注重GIS和空间数据库的理论与实践密切结合,同时反映地理信息产业界的最新研究成果,适合专业学生、从业人员阅读,为地学从业人员提供理论依据和技术参考。
在书稿即将完成之际,感触颇深。本书虽然只是一个开始,但笔者相信可以为今后的研究奠定一个较好的基础。希望通过本书的出版,使更多的专家、同行和学者关注该领域,进一步推动中国基础地理信息的研究和应用。此外,在撰写过程中,马天午、陈孝银、陈振德、单立刚、孙燕飞等出力颇多,对此书的完成花费了很多心血,对他们的付出表示感谢。
本书的研究和出版得到了国家自然基金项目(41201408)、浙江省公益项目(2014C32119和浙江省自然基金项目(LY16D010009)的资助。
最后,当今科技的发展突飞猛进,日新月异,本书虽尽可能力求全面,紧跟时代步伐,但深知该领域应用广泛,笔者才疏学浅,难免有遗漏及不足之处,恳请读者见谅并不吝指正。
陈永刚2015年11月
|
|