Java GIS开发工具包-GeoTools浅谈
目录
前言
地理信息,智联万物。地理信息在我们的生活中无处不在,随着我们的出生,我们就有了轨迹。我们的出生地,籍贯地等等,而随着现在交通的发达,我们也许会跟着父母一起南来北往。在不同的城市间穿梭。哪怕我们就在一个城市里面,围绕着你。也会形成许多的轨迹信息。或许你是一个运动达人,或许骑车、或许跑步、或许远足、或许驾车、玩皮划艇,等等。哪怕你不喜欢运动,我们每天生活的城市,每天上班和下班的到来。我们会从居住的地方到达上班的地方,乘坐公交、地铁、或者自驾等等。更不用说提供交通出行的飞机、游轮、地铁、汽车、公交车、的士、共享单车等等。如果把这些丰富的数据进行数据进行空间展示,制作成一幅幅有趣的时空分布图,或者是OD关系图,你会发现地图之美,地理信息之美。时空信息与我们的生活已经紧密的联系到了一起。
比如在疫情期间,我们通过地理信息赋能疫情防控,精准的进行时空接触判断。在空间上利用大数据信息、大量的轨迹信息、地理分析模型等等,将可能的涉疫人员进行精准的识别。同时根据疫情的影响范围,我们可以进行风控小区的精准划定。不再搞一刀切,不搞大二全。将疫情对人民的生活和工作的影响降到最低。在这些应用中,GIS地理信息系统在发挥着重要的作用。
在进行地理信息系统的开发过程中,可以有很多的开发解决方案。首先我们可以采用商业的解决方案,比如使用Arcgis的相关产品。同时在他们提供的技术上来进行二次开发,基于他们成熟的API来提供快速开发能力,也是一种不错的防范。而随着现在国产化,自主化的,在自主可控的要求下,使用开源产品甚至自主构建地理信息产品的能力显得尤为重要。通常在目前的市面上,可以用来用来进行GIS开发的语言也是比较多的,比如C++、Java、C#、Python、Nodejs、GO、PHP等,都是不错的选择。比如Python,得益于它的学习难度较低,很多朋友都在学习。而且GIS的兼容性和案例也比较丰富。其它的几个编程语言也有相对应的GIS解决方案。
博主本人是学Java出身,当然GIS本身与编程语言没有关系。作为一门基础学科,GIS与计算机本来两个独立的专业和学科。但是近年来,GIS和计算机的学科交叉融合越来越密切,将两者进行碰撞可以看到更多的可能性。也更加促进了两个学科的发展。本文无意于去综合比较每个编程语言的优越性,现代的电脑对不同编程语言的执行性能,差异性应该越来越小。以Java为例,Java应用程序本身对于内存的占用和性能的会有一定的要求。但是Java在大数据的结合上,有得天独厚的优势。hadoop、hdfs、hbase等等,无一不是Java的良好生态伙伴。未来,面对海量的地理信息数据,通过构建分布式处理系系统、通过大数据的支持、甚至加入人工智能的优化。可以预见的是,海量大规模的地理信息数据一定会被我们驯服,将按照我们的要求提供符合的优质内容。在城市规划、流量预测、智慧城市、物联网、智慧农业、乡村振兴等方面大放异彩。
虽然在之前的博客中也提到过一些GeoTools的相关知识,介绍不是很输入。因此萌生想对GeoTools来进行深入学习的想法,同时想将在学习过程中的心得、经验与大家分享。文章以Java语言为主,围绕着GeoTools的所有模块来介绍,希望对Java转Gis的开发者有一定的帮助。本文想从以下几点来介绍,首先介绍GeoTools的官方仓库和基本架构,其次介绍Geotools的相关功能,然后介绍关于Geotools的相关学术科研进展。希望对各位朋友的学习有一点点的帮助。
一、关于Geotools
近年来,随着“数字地球”、“数字孪生”概念的提出及相关技术的快速发展,政府、企业信息程度的不断提高,地理信息系统在政务、企业管理、大众生活方面被使用得越来越多。与最初的看、量、标、查等基础应用的,现在的GIS系统需要更扎实的技术基础,解决更复杂的的问题,比如拓扑关联、空间分析等。同时,一些技术的软件形态架构固定、功能扩展性差、依赖性高等缺点越来越凸显。因此,如何基于开源架构,来进行深度开发,以满足企业的深度业务需求,是一个值得深入研究的课题。在过去比较长的时间段内,由于地理信息系统和应用还在发展当中,同时一些基础资料缺乏中文信息,导致了我们对相关知识的缺失。因此有必要对GeoTools的知识进行深入的介绍。让大家知道在使用Java进行地理信息系统开发时,可以有一个Gis开发利器-GeoTools。
1、GeoTools简介
GeoTools is an open source (LGPL) Java code library which provides standards compliant methods for the manipulation of geospatial data, for example to implement Geographic Information Systems. The GeoTools library data structures are based on Open Geospatial Consortium (OGC) specifications.
上述是从Geotools的官方网站摘录的官方介绍,翻译成中文大意如下:GeoTools 是一个开源的 Java GIS 工具包,可利用它来开发符合标准的地理信息系统。GeoTools 提供了 OGC (Open Geospatial Consortium) 规范的一个实现来作为他们的开发,
。Geotools是一款提供了全套空间解决方案的Java库并且它是完全开源的。相比传统地理信息领域的商业软件,Geotools提供了更开放的开发环境和更通用的空间数据规范。Geotools是当前开源地理信息领域的一个核心类库。基于Geotools,开源社区实现了GeoServer这样的空间数据服务平台和GeoMesa这类时空大数据处理类库。因此熟悉和了解GeoTools可以为各位开辟一条借助开源社区打造地理信息解决方案的新道路。
2、官方仓库
既然Geotools是一款开源的Java地理信息开发库。那么我们就可以在github上找到它的官方仓库。Geotools是一个基于GNU宽通用公共许可证LGPL的开源项目。它为地理空间数据提供符合开放式地理信息系统协会(Open GIS Consortium ,OGC)规范的各类处理方法,是OGC的Java实现,许多开源的Web底图服务、桌面应用的都是使用了Geotools。
。打开后可以看到它的开源主页:可以看到这是一个有1.7Kstar的开源项目,发行的版本最近的是31.x的版本。这是一个更新非常迅速的网站,可以看到一共有近1w的代码提交,而且最近一次的提交是5天前。足以说明这是一个非常活跃的项目。
3、使用Geotools的一些项目
GeoTools 被许多项目使用,包括 Web 服务,命令行工具和桌面应用程序。下面我们将简单的介绍几款使用或者跟Geotools应用结合得很密切的应用或者项目。关于Geotools的应用项目,按照应用的部署模式可以分为以下3个方面:桌面端应用、WebGIS应用数据GIS应用。下面分别来进行介绍。
桌面端应用:对于传统的地理信息用户来说,他们是比较青睐用桌面端软件的,因此Geotools在这方面也还是有比较丰富的应用。比如uDig。uDig是一款使用Eclipse的富客户端开源桌面地理信息系统。它既可以作为一个独立的桌面软件使用,也可以作为Eclipse的插件集成到开发系统中。uDig提供了一种基于Java桌面开发技术体系的地理信息系统解决方案,包括空间数据的访问、空间数据编辑和空间数据渲染等功能。通过uDig,可以在图形化的界面中展示数据,编辑并设置地图的样式。也可以导出地图样式文件,为地图可视化渲染提供渲染支撑,也可以和GeoServer来一起实现桌面端和Web端的开源地理信息系统解决方案。
WebGIS应用:互联网应用离不开WebGIS。而使用Geotools的最有名的WebGIS产品,莫过于GeoServer。GeoServer是一套使用Java编写的用于编辑和分析空间数据的开源软件。GeoServer能够将各种GeoTools支持的空间数据发布为网络地图数据服务。相对于GeoTools,GeoServer实现了OGC的网络相关规范,主要包括WMS、WFS、WPS等。Geotools主要实现了对空间数据的读取、存储、处理、分析等,而GeoServer实现了空间数据的可视化。GeoServer是目前最常用(免费)的开源地理信息软件之一,许多互联网地图厂商均使用GeoServer作为地图服务器(当然,互联网厂商的架构一定不是单节点的,肯定是集群多节点的)。
大数据应用:大数据是时代的趋势,也是面向未来的需要。地理信息是海量的,大规模的。大数据对于非空间数据的处理解决方案已经非常成熟了。而面向地理信息的大数据还需要我们不断去研究。GeoTools作为开源地理信息系统的代表,它与很多大数据组件一样,由于其使用java开发。因此对接大数据就有了先天的优势,现实也是如此,有大量的管理空间数据的项目都采用了Geotools。其中比较有代表性的就有GeoMesa、GeoWave和GeoTrellis。GeoMesa是一套基于分布式系统的、用于大规模空间数据查询和分析的开源库。GeoMesa使用Geotools的数据源扩展能力,可以将点、线、面等矢量数据存储在Accumulo、HBase、BigTable、Cassadra等分布式大数据存储系统,并且提供了相应的时空数据索引。
二、Geotools架构
虽然在GeoTools的应用架构在官方网上上已经有了很详细的解释和说明,这里还是再次进行简单介绍,让大家对其有进一步的认识。
1、功能架构
关于Geotools的功能架构,按照功能层次可以分为三个方面,首先是API层、实现(Implementation)层、插件层(Plugins)。下面是一位CSDN的博主分享的各层的具体解释,大家可以参考:
gt-render | 实现了Java2D的渲染引擎画地图 |
gt-jdbc | 实现了访问空间数据库的 |
gt-data | 实现对空间数据的访问 |
gt-xml | 实现对共同的xml数据格式的支持 |
gt-cql | 实现简单语句的查询 |
gt-main | 针对要素、过滤器等 |
gt-api | 定义了处理空间信息的接口 |
jts | 定义和处理几何图形 |
gt-coverage | 实现了Raster数据格式的访问 |
gt-referencing | 实现了坐标的定义、转换 |
gt-metadata | 元数据的描述和识别 |
gt-opengis | 定义了空间概念的接口 |
Geotools还提供了非常丰富的扩展插件,扩展提供图形和网络支持(用于查找最短路径)、验证、网络地图服务器客户端、XML 解析和编码绑定以及颜色生成器!
2、Geotools支持的数据格式
其实Geotools支持的数据格式还是比较多的,有的不能直接支持,我们也可以自己编写扩展程序包来实现多源数据的接入。下面还是来看看Geotools可以支持哪些空间数据格式。
栅格数据:
序号 | 数据格式 |
1 | arcgrid |
2 | geotiff |
3 | grassraster |
4 | image ( JPEG TIFF GIF PNG ) |
5 | imageio-ext-gdal |
6 | imagemosaic |
7 | imagepyramid |
8 | JP2K |
9 | matlab |
数据库支持:
序号 | 数据格式 |
1 | db2 |
2 | geopackage |
3 | hana |
4 | h2 |
5 | mysql |
6 | oracle |
7 | postgis |
8 | sqlserver |
9 | teradata |
矢量数据:
序号 | 数据格式 |
1 | app-schema |
2 | csv |
3 | geojson |
4 | property |
5 | shapefile |
6 | wfs |
xml数据格式支持:
序号 | 数据格式 |
1 | xsd-core (xml simple types) |
2 | fes |
3 | filter |
4 | gml2 |
5 | gml3 |
6 | kml |
7 | ows |
8 | sld |
9 | wcs |
10 | wfs |
11 | wms |
12 | wmts |
13 | wps |
与此同时,Geotools支持的Ogc标准如下:
OGC Style Layer Descriptor / Symbology Encoding data structures and rendering engine
OGC General Feature Model including Simple Feature support
OGC Grid Coverage representation of raster information
OGC Filter and Common Constraint Language (CQL)
Clients for Web Feature Service, Web Map Service and experimental support for Web Process Service
ISO 19107 Geometry
三、Geotools科研热点
作为一款有将近20年的地理信息开发软件,Geotools一直在科研中也有所应用。本节将从知网、百度学术等等方面来介绍GeoTools的相关科研热点,通过学术论文的研究。说明现在其依然是炙手可热的科研热点软件,非常值得我们学习使用。
1、知网信息
通过在知网上搜索有关GeoTools的相关信息,可以看到如下的检索页面。
可以看到,Geotools在最近些年还是我们的主要研究课题,而且非常值得继续研究。我们打开一些科研论文看一下,论文中涉及的知识点和基础研究内容。
这是一篇将时空大数据的存储和检索的科研论文。
2、百度学术
同样的,可以看到近些年在使用Geotools的研究内容还是非常多的。
一种基于geotools工具实现地理数据修复的方法,
不论是科研论文或者是专利也好,Geotools不仅在工程实践领域有很多的应用,在科研领域也有非常的研究,尤其是面向大数据的结合方面。
四、总结
以上就是本文的主要内容,文章以Java语言为主,围绕着GeoTools的所有模块来介绍,希望对Java转Gis的开发者有一定的帮助。本文想从以下几点来介绍,首先介绍GeoTools的官方仓库和基本架构,其次介绍Geotools的相关功能,然后介绍关于Geotools的相关学术科研进展。行文仓促,定有许多的不足之处,如有不足或者不当之处,在此恳请各位专家朋友不吝赐教,在评论区留下真知烁见,不才定当虚心接受。
博客编写过程中,参考了以下博客,感谢前辈的知识积累,站在巨人的肩膀上才能看得更远:
1、
。2、
。3、
。4、
。5、
。6、
。
- 点赞
- 收藏
- 关注作者
评论(0)