Java GIS开发工具包-GeoTools浅谈

2024-08-28 10:28

本文主要是介绍Java GIS开发工具包-GeoTools浅谈,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

一、关于Geotools

1、GeoTools简介

2、官方仓库

3、使用Geotools的一些项目

二、Geotools架构

1、功能架构

 2、Geotools支持的数据格式

 三、Geotools科研热点

1、知网信息

2、百度学术

四、总结


前言

        地理信息,智联万物。地理信息在我们的生活中无处不在,随着我们的出生,我们就有了轨迹。我们的出生地,籍贯地等等,而随着现在交通的发达,我们也许会跟着父母一起南来北往。在不同的城市间穿梭。哪怕我们就在一个城市里面,围绕着你。也会形成许多的轨迹信息。或许你是一个运动达人,或许骑车、或许跑步、或许远足、或许驾车、玩皮划艇,等等。哪怕你不喜欢运动,我们每天生活的城市,每天上班和下班的到来。我们会从居住的地方到达上班的地方,乘坐公交、地铁、或者自驾等等。更不用说提供交通出行的飞机、游轮、地铁、汽车、公交车、的士、共享单车等等。如果把这些丰富的数据进行数据进行空间展示,制作成一幅幅有趣的时空分布图,或者是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) 规范的一个实现来作为他们的开发,Geotool 官方网站。

        Geotools是一款提供了全套空间解决方案的Java库并且它是完全开源的。相比传统地理信息领域的商业软件,Geotools提供了更开放的开发环境和更通用的空间数据规范。Geotools是当前开源地理信息领域的一个核心类库。基于Geotools,开源社区实现了GeoServer这样的空间数据服务平台和GeoMesa这类时空大数据处理类库。因此熟悉和了解GeoTools可以为各位开辟一条借助开源社区打造地理信息解决方案的新道路。 

2、官方仓库

        既然Geotools是一款开源的Java地理信息开发库。那么我们就可以在github上找到它的官方仓库。Geotools是一个基于GNU宽通用公共许可证LGPL的开源项目。它为地理空间数据提供符合开放式地理信息系统协会(Open GIS Consortium ,OGC)规范的各类处理方法,是OGC的Java实现,许多开源的Web底图服务、桌面应用的都是使用了Geotools。geotools github。打开后可以看到它的开源主页:

        可以看到这是一个有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可以支持哪些空间数据格式。

        栅格数据:

序号数据格式
1arcgrid
2geotiff
3grassraster
4image ( JPEG TIFF GIF PNG )
5imageio-ext-gdal
6imagemosaic
7imagepyramid
8JP2K
9matlab

        数据库支持:

序号数据格式
1db2
2geopackage
3hana
4h2
5mysql
6oracle
7postgis
8sqlserver
9teradata

        矢量数据:

序号数据格式
1app-schema
2csv
3geojson
4property
5shapefile
6wfs

        xml数据格式支持:

序号数据格式
1xsd-core (xml simple types)
2fes
3filter
4gml2
5gml3
6kml
7ows
8sld
9wcs
10wfs
11wms
12wmts
13wps

        与此同时,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在最近些年还是我们的主要研究课题,而且非常值得继续研究。我们打开一些科研论文看一下,论文中涉及的知识点和基础研究内容。

摘要:针对具有时空特征的轨迹大数据快速增长的趋势及对其快速查询的需求,传统的关系型数据库对海量轨迹数据的存储和特定的查询需求具有一定局限性,而非关系型数据库又难以满足海量数据的高效索引需求,轨迹数据的存储和索引效率仍亟待提高。本文设计并实现了一种基于HBase数据库的存储和检索的框架,以应对时空轨迹数据的高效管理。首先,构建了一种新颖的Rowkey结构,结合时空索引工具构建了GeoMesa-HBase底层存储模型;然后,融合了基于Hilbert曲线的编码技术构建空间索引,提高了轨迹数据的存储和检索效率;最后,为了评估所提方法的有效性,将其存储和查询性能与传统存储数据库(HBase和MySQL)和Geohash索引进行比较。试验结果表明,本文方案能够有效提升轨迹数据的存储和检索效率,这对于应对轨迹大数据管理领域面临的多项挑战具有重要现实意义。
关键词:	轨迹数据;时空索引;时空存储;HBase;Hilbert曲线;

        这是一篇将时空大数据的存储和检索的科研论文。 

2、百度学术

        同样的,可以看到近些年在使用Geotools的研究内容还是非常多的。

         一种基于geotools工具实现地理数据修复的方法,

        不论是科研论文或者是专利也好,Geotools不仅在工程实践领域有很多的应用,在科研领域也有非常的研究,尤其是面向大数据的结合方面。

四、总结

        以上就是本文的主要内容,文章以Java语言为主,围绕着GeoTools的所有模块来介绍,希望对Java转Gis的开发者有一定的帮助。本文想从以下几点来介绍,首先介绍GeoTools的官方仓库和基本架构,其次介绍Geotools的相关功能,然后介绍关于Geotools的相关学术科研进展。行文仓促,定有许多的不足之处,如有不足或者不当之处,在此恳请各位专家朋友不吝赐教,在评论区留下真知烁见,不才定当虚心接受。

        博客编写过程中,参考了以下博客,感谢前辈的知识积累,站在巨人的肩膀上才能看得更远:

1、Geotools Java GIS 工具包。

2、GeoTools学习篇------GeoTools体系。

3、Geotools链接。

4、基于Hilbert曲线的轨迹大数据分布式存储与索引方法。

5、[转载]基于多源城市交通出行数据的定制公交需求辨识方法研究。

6、geotools功能预览。

这篇关于Java GIS开发工具包-GeoTools浅谈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114499

相关文章

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Java访问修饰符public、private、protected及默认访问权限详解

《Java访问修饰符public、private、protected及默认访问权限详解》:本文主要介绍Java访问修饰符public、private、protected及默认访问权限的相关资料,每... 目录前言1. public 访问修饰符特点:示例:适用场景:2. private 访问修饰符特点:示例:

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做