GeoTools 地理信息系统开发

978-7-115-59387-0
作者: 王顼刘钧文王新宇孙运娟
译者:
编辑: 郭媛

图书目录:

详情

GeoTools 是由开源社区维护的一套地理信息系统的开发组件和解决方案。GeoTools 的实现完整遵循了OGC 的各类规范,并在二十多年的迭代中,形成了活跃的开源社区生态。 本书从GeoTools 的基本信息、社区生态开始介绍,随后以地理信息的基本概念为脉络,详细介绍GeoTools 是如何实现并管理坐标参考系统、如何管理矢量数据和栅格数据,以及如何连接地理数据库的。在本书的最后,通过实现一个空间数据管理系统,将全书的知识体系串联起来,帮助读者形成开源地理信息解决方案,来解决地理信息系统中的数据解析、坐标计算、空间关系等常见问题。 本书适用于有志于从事地理信息系统开发工作的人员,也可以帮助从事传统商业地理信息系统开发和管理工作的人员进一步了解开源地理信息系统。

图书摘要

版权信息

书名:GeoTools 地理信息系统开发

ISBN:978-7-115-59387-0

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

编  著 王 顼 刘钧文 王新宇 孙运娟

责任编辑 郭 媛

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

读者服务:

微信扫码关注【异步社区】微信公众号,回复“e59387”获取本书配套资源以及异步社区15天VIP会员卡,近千本电子书免费畅读。


GeoTools是由开源社区维护的一套地理信息系统的开发组件和解决方案。GeoTools的实现完整遵循了OGC的各类规范,并在二十多年的迭代中,形成了活跃的开源社区生态。

本书从GeoTools的基本信息、社区生态开始介绍,随后以地理信息的基本概念为脉络,详细介绍GeoTools是如何实现并管理坐标参考系统、如何管理矢量数据和栅格数据,以及如何连接地理数据库的。在本书的最后,通过实现一个空间数据管理系统,将全书的知识体系串联起来,帮助读者形成开源地理信息解决方案,来解决地理信息系统中的数据解析、坐标计算、空间关系等常见问题。

本书适合有志于从事地理信息系统开发工作的人员阅读,也可以帮助从事传统商业地理信息系统开发和管理工作的人员进一步了解开源地理信息系统。


国家“十四五”规划聚焦“数字中国建设”,提出加快数字化发展,建设数字中国,驱动生产方式、生活方式和治理方式变革。数字化建设领域有广阔的市场前景和重要的社会价值。地理信息系统(GIS)的应用也正从一个专业领域逐渐成为数字化建设过程中的基础设施。两年前在进行智慧城市项目和相关系统建设中,我有幸与这本书的主要编著者王顼共事,他对GIS相关技术的全面和深刻理解让我印象深刻。这本书的内容深入浅出,指导性强,值得各位专业人士学习和了解。

——田康,中移系统集成有限公司(雄安产业研究院)智慧城市平台部副总经理,甘肃省数字政府建设、沈阳市数字政府建设负责人

GIS作为将空间信息与属性信息紧密关联的学科,在当下以及未来的高速数据物联网时代,发挥的作用也越来越重要。这本书基于GeoTools,深入浅出地为相关学科的从业者梳理了学科脉络和基础开发知识,并通过实际解决方案进一步探讨和明晰了工具的使用与实现方式,确实可为从业者提供重要的学习和参考依据。本人作为航天工作者,认为这本书很大程度上可以为航天技术应用产业遥感应用领域的开发工作者提供重要帮助。燃情地信,未来已来!这本书的出版,必将为GeoTools开发领域提供重要的借鉴,也必将为GIS事业的发展提供强大的动力!

——王骏飞,中国航天科技集团有限公司第五研究院西安分院业务主管

近十年来,伴随互联网的飞速发展,GIS取得了长足进步,而GeoTools作为现代GIS的基础设施,在此进程中扮演着极其重要的角色。这本书在内容上,尽量从最简单、最基础的部分入手,又从实际的GIS建设角度进行深入阐述,让读者可以毫不费力地进入GeoTools的强大功能世界。它既可以作为理论学习用书,也可以作为案前的工具书使用,初学者和有经验的相关从业人员都值得阅读。

——严福强,北京国遥新天地信息技术股份有限公司成都技术中心总经理

GeoTools是处理空间数据的利器,遵循OGC标准,业界众多基于Java的开源GIS软件均是基于GeoTools开发的。学习GeoTools,对于理解GIS生态很有帮助。这本书由浅入深,不但介绍了GeoTools的各种应用方法,同时对相关理论知识进行了阐述,帮助读者们理解GIS,值得广大GIS开发从业者学习。

——牛一峰,中国煤炭科工集团有限公司GIS高级工程师


近年来,随着“数字地球”“数字孪生”概念的提出及相关技术的快速发展,政府、企业信息化程度的不断提高,地理信息系统在政务、企业管理、大众生活方面被使用得越来越多。

区别于最初的看、量、标、查等基础应用需求,新一代的地理信息系统需要更多扎实的技术基础,解决更多复杂度高的场景问题,比如拓扑关联、空间分析等。并且,随着新技术的发展,传统的商业软件形态架构固定、功能扩展性差、依赖性高等缺点越来越凸显,这就要求技术人员对基础技术功能的理解足够深入,以便更加灵活、经济、高效地融合、扩展新的软件服务。而开源工具类库,如这本书所述的GeoTools,经过多年的发展,已经成为经济实用的地理信息处理的应用工具和教具。

不过,在过去很长一段时间里,一来因为整个地理信息系统发展和应用还处在成长阶段,“覆盖面积”还不够大,二来缺乏相应的中文资料,导致国内相关技术人员对譬如GeoTools类的开源工具的了解并不系统、深入。

再结合当下,如“数字孪生”“双向映射”等对地理信息系统更高的要求,技术人员需要采集现实世界的信息,再深度加工处理、分析出更高级的信息反哺现实世界,在这期间GeoTools会起到很多的作用。

从国内外各种行业软件的发展历史来看,行业软件需要由对所属行业具有深刻认识的从业人员,深入软件开发领域,立足行业特色需求,正向进行开发。经过了二十多年的实践与积累,我国地理信息系统行业软件得到长足发展,但是仍需要更多的精通软件开发和深入行业领域的从业者,来满足社会不断增长的地理信息发展需求。

这本书,正是在这样的时间窗口问世,详细深入地讲解这款工具。这对于国内地理信息系统的应用、开源地理信息系统工具的发展都有很好的促进作用。从书中的字里行间我也深刻地体会到4位编著者对新技术追求的热忱和对知识总结提炼的用心,他们是乐于分享技术成果的年轻人,这种精神值得同行学习。

谢国钧

中科星图股份有限公司副总裁

中科星图空间技术有限公司高级副总裁


地理信息系统是智慧城市和数字孪生的基础支撑技术,随着近年来相关领域的不断发展,越来越多的空间数据需要被采集、处理、存储、分析和可视化。GeoTools是一个提供了全套空间数据解决方案的Java类库。更为重要的是,GeoTools是开源的。相比传统地理信息领域的商业软件,GeoTools提供了更开放的开发环境和更通用的空间数据规范。GeoTools是当前开源地理信息领域的一个核心类库。基于GeoTools,开源社区实现了GeoServer这样的空间数据服务平台和GeoMesa这类时空大数据处理类库。因此,熟悉和了解GeoTools可以为读者开辟一条借助开源社区打造地理信息解决方案的新道路。

本书面向的读者主要是地理信息系统行业的从业人员和大中专院校相关专业的师生。本书力求简单明了地介绍通过GeoTools实现的各类空间数据规范和GeoTools自身的设计思想。与计算机行业的其他技术类图书不同,本书并不要求读者具有深厚的程序设计功底,书中的代码更多的是为地理信息系统行业相关开源规范做解释的。读者仅需了解入门级的Java程序设计知识,即可顺利地阅读书中的代码。

本书的4位编著者为地理信息领域的求学者或从业人员,在共同的学习和工作经历中深感当前开源地理信息资源的零碎和复杂,因此萌生出编写一本能够将各类复杂的空间数据规范讲清楚的书的想法。

全书共有12章。

第1章介绍GeoTools的基本信息,以及GeoTools在开源地理信息领域的生态等。

第2章介绍GeoTools的源代码组织与编译方法、如何构建GeoTools,以及GeoTools的使用方式。

第3章介绍Java拓扑库、九交模型和常见的空间索引。Java拓扑库是一个完全使用Java代码实现的几何对象模型类库,是GeoTools实现平面几何对象模型所依赖的类库。九交模型定义了平面几何对象之间的空间关系和判断依据。空间索引是一种加快空间数据查询速度的数据结构,是现代空间数据库的理论基础。

第4章介绍空间坐标系。空间坐标系是空间数据最复杂的部分,只有了解空间坐标系的相关信息,才能真正理解空间数据。

第5章是全书的重点,首先介绍常见的矢量数据格式,然后重点介绍GeoTools的矢量数据模型。GeoTools提供了一套完善的插件式数据模型,几乎能够支持对任意的空间数据源的扩展。

第6章介绍栅格数据模型。栅格数据是除矢量数据之外的另一类基础空间数据。

第7章介绍地图样式与地图渲染、OGC定义的地图样式规范以及GeoTools对其的实现。

第8章介绍通过GeoTools实现的空间查询与空间分析。

第9章介绍GeoTools如何连接和管理各类关系数据库。

第10章介绍GeoTools提供的各类地图组件。

第11章以一个实际项目为例,介绍如何使用GeoTools实现空间数据管理系统。

第12章介绍GeoTools使用中的一些常见问题。

王顼负责全书的统稿工作,以及第1、2、3、4、6、7、12章和第5章部分内容的编写工作。

刘钧文负责第8、10章和第5章剩余部分内容的编写工作。

王新宇负责第11章的编写工作。

孙运娟负责第9章的编写工作。

感谢其他3位老师的辛苦工作,感谢郭媛编辑对本书的勘误和校对,感谢人民邮电出版社对本书的大力支持。

王 顼

2022年3月


本书由异步社区出品,社区(https://www.epubit.com)可为您提供相关资源和后续服务。

您还可以扫码右侧二维码, 关注【异步社区】微信公众号,回复“e59387”直接获取,同时可以获得异步社区15天VIP会员卡,近千本电子书免费畅读。

编著者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区,按书名搜索,进入本书页面(见下图),单击“提交勘误”,输入错误信息后,单击“提交”按钮即可。本书的编著者和编辑会对您提交的错误信息进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

扫描下方二维码,您将会在异步社区微信服务号中看到本书信息及相关的服务提示。

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发电子邮件给我们,并请在电子邮件标题中注明书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发电子邮件给我们;有意出版图书的作者也可以到异步社区在线投稿(直接访问www.epubit.com/contribute即可)。

如果您所在的学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发电子邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发电子邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网。

“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近40年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的Logo。异步图书的出版领域包括软件开发、大数据、人工智能、测试、前端、网络技术等。

异步社区

微信服务号


对于大多数传统地理信息系统(Geographical Information System,GIS)开发的从业人员来说,GeoTools可能是一个比较陌生的名字。但是随着地理信息系统与互联网和一些新技术的结合,以GeoTools为代表的开源地理信息系统生态逐渐进入人们的视线,越来越多的开发者愿意使用GeoTools来开发自己的应用程序。为什么GeoTools有如此大的魅力呢?GeoTools是什么?GeoTools从何而来,又是如何发展的呢?本章将会从以下4个方面来介绍GeoTools。

GeoTools简介。

GeoTools架构。

GeoTools特性。

GeoTools生态。

随着开源地理信息系统生态的不断发展,越来越多的地理信息系统开发者选择使用GeoTools来进行相关软件的开发。那么GeoTools是什么呢?它又是从何而来的呢?1.1节会对这两个问题进行解答。

GeoTools是一个开源Java代码库,基于GNU宽通用公共许可证(Lesser General Public License,LGPL),它的标识如图1-1所示。它为地理空间数据(以下简称“空间数据”)提供符合开放式地理信息系统协会(Open GIS Consortium,OGC)规范的各类处理方法,是OGC规范的Java实现。许多开源地理信息工具,包括Web地图服务、桌面应用程序等均使用了GeoTools。

图1-1 GeoTools的标识

GeoTools始于1996年,最初是英国利兹大学的一个研究生课程项目,主要用于将空间数据可视化。不久之后,利兹大学将空间数据可视化独立为一门课程,并开始研究如何将地理信息系统应用于公众领域,之后使用1.0版本的GeoTools制作了一个地图网页,当地居民可在这个地图网页上讨论本地城乡规划方案。随着实际需求的不断增多,GeoTools的功能逐渐完善,并成为一个独立的地理信息工具类库。需要说明的是,早期的GeoTools开发过程中并没有参考任何OGC规范,而是直接使用了当时流行的Java Applet接口。1.0版本的GeoTools主要用于构建能够交互式展示空间数据的客户端。

1.0版本的GeoTools的开发团队中仅有两位是来自利兹大学的开发者,随着功能的不断增加,代码变得凌乱和难以维护。因此在2002年,开发者们对GeoTools进行了全新的设计与重构,此时GeoTools的开发团队已变成一个去中心化的全球团队,并在这次重构中明确了一套开源的软件设计、决策与实现体系,成立了GeoTools项目管理委员会。2.0版本的GeoTools新增了坐标系转换、栅格数据读取与渲染等功能,并开始明确将自身作为一个Java标准的空间数据类库的开发方向。当时,有很多使用Java程序设计语言的地理信息系统开发者,为了统一这些开发者的成果,GeoTools开始参考OGC规范,并实现了一套被称为GeoAPI的开放地理空间接口。之后的多年里,GeoTools的版本从2.1发展到2.7,GeoAPI已经开发完成,整体结构也与我们今天见到的代码库接近,并在2012年发布了里程碑版本,即GeoTools 8.0。现在版本的GeoTools的软件架构与8.0版本的软件架构相比没有太多改动,即在多年迭代中保持了稳定。

GeoTools作为一个持续迭代了二十多年的开源项目,其代码高度模块化与规范化,了解 GeoTools代码目录结构有助于厘清应用程序所需的依赖包。本节介绍GeoTools代码仓库的各个部分以及它们是如何组合在一起的。为了让特定应用程序仅包含其需要的依赖,用户可以为项目选择适量的GeoTools依赖包。GeoTools主要模块如图1-2所示,从左到右依次为接口层、实现层和插件层,模块的依赖关系为从上到下,即上面的模块依赖下面的模块。

图1-2 GeoTools主要模块

接口层封装了空间数据的核心规范。接口层主要包括三大类规范,分别是:GeoAPI,这是GeoTools提供的一套稳定的空间数据操作接口;Java拓扑库(Java Topology Suite,JTS),这是使用Java代码实现的一套几何类库;OpenGIS接口,这是对OpenGIS各类规范的Java接口的定义。

实现层是GeoTools的核心,是各类空间数据规范的具体代码实现。从底向上包括:元数据模块Metadata,负责处理各类空间数据格式的元数据信息;空间坐标系模块Referencing,负责各类地理坐标系和投影坐标系的定义与转换;栅格数据模块Coverage,负责栅格数据的读写;Main模块,负责各类常用工具、数据结构和框架的定义;矢量数据模块Data,负责所有矢量数据的读写;关系数据库操作模块JDBC,负责读写各类关系数据库和对应的空间数据扩展;空间查询语言模块 CQL,定义了一套逻辑完备的空间查询语言,用于实现各类空间数据查询;空间数据渲染模块Render,负责矢量数据和栅格数据的渲染;XML模块,用来操作各类使用XML格式描述的空间数据和元数据信息。

插件层是GeoTools扩展能力的体现。插件层基于接口层和实现层,是对具体应用的对应实现,具体包括欧洲石油调查组织(European Petroleum Survey Group,EPSG)的空间坐标系定义扩展模块epsg-hsql,该模块记录了欧洲石油调查组织的6000多个地理坐标系定义;Shapefile为空间数据文件格式扩展模块,该模块负责对Shapefile这类十分常用的矢量数据格式提供读写和索引的支持;空间数据库模块PostGIS负责对当前业界十分常用的PostGIS空间数据库提供读写和索引的实现;XSD WMS负责对基于XML的一些OGC的数据格式和服务规范提供实现。

GeoTools能够逐渐流行起来,离不开它本身的丰富特性,本节会对这些特性进行介绍。

(1)定义了空间数据概念和数据结构。

使用JTS作为基础的几何类库。依据OGC规范,实现空间过滤器和属性过滤器。

(2)定义了一套干净的数据访问接口,并支持访问者模式、事务和多线程。

支持访问多种地理空间文件格式和空间数据库。

支持坐标参考系统的转换。

支持常见的地图投影。

能够根据空间和非空间属性过滤和分析数据。

(3)提供了一个无状态、低内存消耗的地图数据渲染器,尤其适用于服务器端的地图渲染。

支持复杂的地图样式。

支持文本标签和文本颜色混合。

(4)支持OGC定义的地理标记语言(Geographic Markup Language,GML)规范、样式图层描述器(Styled Layer Descriptor,SLD)规范等XML格式规范。

(5)提供了一套被称为GeoTools Plugins的开放式插件系统,允许接入任意空间数据格式。

(6)提供了一套地理信息处理工具和扩展接口。

提供了基础的空间数据处理方法,支持图和网络分析、空间数据校验、Web 地图服务器的客户端、XML 解析和编码、地图样式生成器等。

(7)提供开源社区扩展。

GeoTools拥有一个活跃的开源社区,许多具有实验性的功能和最新的功能均是由社区开发者来维护的。这些功能主要包括支持桌面图形化方案、本地和 Web 流程支持、附加符号系统、附加数据格式、网格生成等。

经过多年的发展,GeoTools已经形成了庞大的生态。这个生态包含3个方面:在标准方面,GeoTools遵守并实现了地理信息系统行业的通用标准OGC规范;在其内部,它对不同数据类型、不同数据格式等进行兼容;在其外部,很多组件也实现了和它的对接。本节会对这3个方面进行详细的介绍。

OGC是一个面向地理空间信息的全球化开放组织,它的标识如图1-3所示。该组织包含了500多家企业、政府机构、研究机构和大学,致力于实现地理空间信息的可发现性、可到达性、可交互性和可重用性。OGC提供了一系列针对地理空间信息的基础标准和解决方案,同时OGC也是一个解决地理信息前沿问题的研究平台。

图1-3 OGC的标识

GeoTools的产生依托于OGC,GeoTools也被称为OGC规范的开源Java实现。在GeoTools的源代码中,许多 OGC 规范文本被直接写在代码的注释上。同时,OGC 规范文本中也使用GeoTools 的类图作为自身实现的解释。由于 OGC 已经成为国际标准化组织(International Organization for Standardization,ISO)的一员,因此GeoTools实现的规范也成为相关国际标准。

GeoTools中的JTS是一个提供了平面几何对象模型和常见几何函数实现的开源Java类库。JTS遵循OGC的简单要素规范和简单要素结构查询语言(Structure Query Language,SQL)规范。JTS既可以作为矢量地理信息系统中具有提供点、线、面等的能力的基础组件,又可以作为一种负责提供几何算法实现的通用类库。

GeoTools使用JTS作为自身对平面几何对象的实现,不同版本的GeoTools依赖不同版本的JTS。读者在使用Maven添加GeoTools依赖的时候,其会根据当前GeoTools版本,自动下载对应版本的JTS依赖。同时,GeoTools中的几何对象空间关系判断、几何算法和图算法等矢量计算范畴内的实现也依赖于JTS。

GeoTools的内部生态主要是其本身对不同标准和格式的兼容,包含对数据类型的兼容、空间运算逻辑的兼容、地理坐标系的兼容、不同的数据格式的兼容以及不同的查询接口的兼容等。接下来会对每一个具体方面进行介绍。

1.兼容数据类型

我们知道,在计算机程序设计语言中,数据类型有一套定义方式。例如在Java中,原生支持8种基本数据类型,如表1-1所示。当然Java也支持一些引用数据类型,这些一般是用户定义的。

表1-1 Java的基本数据类型

数据类型

中文名称

占用位数

byte

字节型

8

short

短整型

16

int

整型

32

long

长整型

64

float

单精度浮点型

32

double

双精度浮点型

64

boolean

布尔型

1

char

字符型

16

在地理信息系统场景下,这些数据类型是不能满足需求的,因此需要更多的矢量数据类型。例如在OGC规范中,就定义了一些空间矢量数据类型,部分常用的空间矢量数据类型如表1-2所示。

表1-2 部分常用的空间矢量数据类型

数据类型

中文名称

Point

LineString

多段线

Polygon

多边形

MultiPoint

多点

MultiLineString

多重多段线

MultiPolygon

多重多边形

Geometry

空间数据

GeometryCollection

几何对象集合

除了空间矢量数据类型,还有空间栅格数据类型,甚至有基于上述这两种数据类型形成的矢量切片数据类型和栅格切片数据类型。这些数据类型是比较特殊的,因此需要对前面提到的基本数据类型进行封装才能满足需求。

对于上述这些不同的数据类型,GeoTools都实现了支持,用户可以非常方便地利用GeoTools的内置方法或者类型定义来对上述的任何一种数据类型的数据进行管理。统一数据类型,可以大大提升数据管理效率。

2.兼容空间运算逻辑

对于单个空间数据的描述,GeoTools 是支持的;对于多个空间数据之间的空间关系,GeoTools 也是支持的。它是基于 OGC 规范中的九交模型(Dimensionally Extended Nine- Intersection Model,DE-9IM)进行实现的。九交模型支持的空间关系如表1-3所示。

表1-3 九交模型支持的空间关系

关系名称

中文名称

Contain

包含

Cross

交叉

Disjoint

相离

Equal

相等

Intersect

相交

Overlap

重叠

Touch

邻接

Within

内部

当然九交模型有一套逻辑推导和数学定义,这些细节将在第3章进行介绍。

3.兼容地理坐标系

为了更好地描述地球上的空间实体,人们一般会利用空间坐标系来进行定义。然而由于在不同的国家和地区,使用的大地参考有所不同,目前比较常用的地理坐标系如表1-4所示。

表1-4 常用的地理坐标系

坐标系名称

类型

坐标原点

WGS-84坐标系

地心坐标系

地球质心

GCJ02坐标系

地心坐标系

地球质心

北京54坐标系

参心坐标系

苏联普尔科沃

CGCS2000坐标系

地心坐标系

地球质心

不同的坐标系无法进行相互转换,对应的空间数据也无法进行统一管理。不过GeoTools对这些地理坐标系都实现了兼容,可以方便用户的开发。

4.兼容不同的数据格式

数据的封装往往涉及不同的数据格式,空间数据也不例外。空间数据的形式往往更加复杂,因此对应的数据格式也更加多样。其中,不仅有比较基本的逗号分隔值(Comma-Separated Values,CSV)格式,还有很多其他的数据格式,例如GeoJSON等。常用的空间数据格式如表1-5所示。

表1-5 常用的空间数据格式

数据格式名称

发布机构

Shapefile

ESRI

KML

Keyhole

GeoJSON

IETF

OSM

OpenStreetMap

CSV

当然还有很多其他的空间数据格式,GeoTools也实现了支持,在后续章节会有详细的介绍。

5.兼容不同的查询接口

由于地理信息系统行业涉及不同的数据源,因此也会涉及不同的查询接口。GeoTools在这方面也完成了对不同查询接口的适配。

最上层,GeoTools提供了一套完整的数据管理接口——DataStore,用户可以通过配置参数的方式构造对应的DataStore实例,并通过该实例完成对不同数据源的连接。查询接口采用的是OpenGIS的查询语言——上下文查询语言(旧称“通用查询语言”,Common Query Language,CQL),这样就能够保证GeoTools可以兼容所有地理信息系统行业的同类型数据源。

对于传统关系数据库所采用的JDBC接口,GeoTools也实现了支持,是通过将其内部的CQL语句转换成SQL语句来实现的。

对于新兴的非关系数据库,GeoTools也实现了支持。不过对应的数据源的接口往往不一样,因此针对每一种具体的数据源接口,GeoTools都是单独进行实现的。

GeoTools的外部生态是指使用GeoTools来进行空间数据管理的其他组件。GeoTools的外部生态主要可以分为3个方面:桌面端应用、互联网服务和大数据组件。本小节会对这3个方面进行介绍。

1.桌面端应用

对于比较传统的软件应用用户来说,他们比较习惯使用桌面端应用。GeoTools在这方面也实现了支持,它是基于uDig来实现的。

uDig是一个使用Eclipse富客户端技术构建的开源桌面地理信息系统。uDig既可以作为一个独立桌面软件独立使用,也可以作为一个Eclipse富客户端的插件集成到用户的开发中。uDig提供了一种基于Java桌面开发技术体系的地理信息系统解决方案,uDig的功能包括空间数据访问、空间数据编辑和空间数据渲染等。uDig的名称来源于它自身的开发理念。

第一,uDig包含一个友好的图形化用户使用界面。第二,它是一个基于Java跨平台技术的原生桌面应用,原生支持Windows操作系统、macOS和Linux操作系统。第三,uDig支持各种互联网地图特性,包括网络地图服务(Web Map Service,WMS)、网络要素服务(Web Feature Service,WFS)、网络处理服务(Web Processing Service,WPS)等各类网络空间数据服务。第四,uDig是一个插件化的、逻辑完备的地理信息平台,它不仅支持现有的各类地理信息数据服务,也能通过扩展支持未来的地理信息数据服务。uDig使用Eclipse公共许可证(Eclipse Public License,EPL)作为自己的开源许可证。

uDig是基于GeoTools构建的一套Java客户端地理信息平台软件。通过uDig,用户可以在图形化的界面中展示空间数据、编辑空间数据,并配置空间数据的样式。uDig导出的地图样式文件,可作为后续空间数据服务化的基础,和GeoServer一起构成一套桌面端和服务端的开源地理信息系统解决方案。

2.互联网服务

互联网应用离不开网络服务。在这个方面,GeoTools是通过兼容GeoServer来实现支持的,GeoServer的标识如图1-4所示。

图1-4 GeoServer的标识

GeoServer是一套使用Java编写的用于编辑和分享空间数据的开源软件。GeoServer能够将各种GeoTools支持的空间数据发布为网络地图数据服务。相对于GeoTools,GeoServer实现了OGC的网络相关规范,主要包括WMS、WFS、WPS等。GeoTools主要实现了对空间数据的读取、存储、处理、分析等,而GeoServer则实现了空间数据的服务化。因此GeoServer是目前最常用的开源地理信息软件之一,许多互联网地图厂商均使用GeoServer作为自家的地图服务器。

3.大数据组件

随着大数据技术的不断成熟,地理信息系统的原有技术与大数据技术的结合成为趋势。GeoTools作为开源地理信息系统的代表,它与很多大数据组件一样,是使用Java和类Java语言开发的,这也让它成为对接大数据生态的一个非常合适的切口。事实上,大量的管理空间数据的组件都采用GeoTools作为空间数据管理的工具,其中比较有代表性的有GeoMesa、GeoWave和GeoTrellis。

GeoMesa是一套基于分布式系统的、用于大规模空间数据查询和分析的开源类库,它的标识如图1-5所示。GeoMesa使用GeoTools的数据源扩展能力,能将点、线、面等矢量数据存储在Accumulo、HBase、BigTable、Cassandra等分布式大数据存储系统当中,并在这些大数据存储系统上提供了一套时空索引。GeoMesa基于自身的时空索引,能够对存储的海量矢量数据进行快速查询和分析。同时,GeoMesa也支持接入Kafka对时空数据进行近实时的流式计算和处理。并且GeoMesa也支持和GeoServer进行集成,将前文提及的大数据存储系统发布为符合OGC规范的网络地图数据服务。更重要的是,GeoMesa支持通过大数据计算引擎Spark对海量矢量数据进行分析,来构建一个分布式的海量时空数据分析系统。

图1-5 GeoMesa的标识

GeoMesa对一系列大数据存储系统的支持,均是通过扩展GeoTools的数据源能力获取的,因此GeoMesa可被认为是GeoTools的大数据存储和分析扩展组件。

GeoWave是美国国家地理空间情报局(National Geospatial-Intelligence Agency,NGA)开发的一个空间数据管理组件,它的标识如图1-6所示。它的作用与GeoMesa类似,也是一个基于分布式系统的、用于管理海量空间数据的组件。不过与GeoMesa不同的是,它管理空间数据的空间填充曲线有所不同,而且在管理的数据类型上,不仅有空间矢量数据,还有栅格数据。在软件的部署和使用方式上,它不仅支持Linux,也支持Windows,产品形态更为完善。

图1-6 GeoWave的标识

GeoTrellis是一个基于分布式系统的、用于对栅格数据进行分析的工具包,它的标识如图1-7所示。其中用于分布式计算的组件主要是Apache Spark,这是一种基于弹性分布式数据集(Resilient Distributed Dataset,RDD)进行分布式计算的组件。通过使用RDD的数据抽象模型,用户可以非常方便地使用多个服务器节点来完成一些复杂的计算操作。对于栅格数据分析这种强数值计算场景,GeoTrellis可以并行地使用更多资源来对栅格数据进行计算和分析,可极大地提升整体的分析效率。

图1-7 GeoTrellis的标识

除此以外,GeoTrellis也可以创建可扩展的地理信息处理Web服务,提升系统的易用性。而且它也对空间矢量数据实现了支持,并对GeoTools的一些空间数据定义方式进行了优化,简化了编码逻辑。

本章介绍了GeoTools的架构、特性、生态和历史发展。GeoTools作为一个持续迭代了二十多年的开源地理信息类库,已经构建了开源地理信息系统生态。基于GeoTools开发的常用开源地理信息软件有桌面端应用uDig、地图服务器应用GeoServer和大数据组件GeoMesa。学习GeoTools,可为后续学习其他开源地理信息软件打下基础。

微信扫码关注【异步社区】微信公众号,回复“e59387”获取本书配套资源以及异步社区15天VIP会员卡,近千本电子书免费畅读。


相关图书

Python地理空间分析指南(第2版)
Python地理空间分析指南(第2版)
GDAL源码剖析与开发指南
GDAL源码剖析与开发指南

相关文章

相关课程