Java GIS开发工具包-GeoTools浅谈

news2024/9/21 16:36:10

目录

前言

一、关于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功能预览。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2079673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《机器学习》—— OpenCV 对图片的各种操作(均值、方框、高斯、中值滤波处理)

文章目录 1、对有椒盐噪声的图片进行均值、方框、高斯、中值滤波处理2、给图像边缘增加边框3、对图片进行阈值化操作 1、对有椒盐噪声的图片进行均值、方框、高斯、中值滤波处理 均值滤波 cv2.blur是 OpenCV 库中的一个函数,用于对图像进行均值模糊处理。这个函数通…

【Mysql】通过Keepalived搭建mysql双主高可用集群

一、环境信息 主机名ip操作系统mysql版本VIP(虚拟ip)hadoop01192.168.10.200centos7_x865.7192.168.10.253hadoop03192.168.10.202centos7_x865.7 二、mysql集群搭建 两台节点,如果未部署mysql服务,部署文档请看【Mysql】mysql…

前端自动导入依赖

前言 开发中通常会有很多导入语句&#xff0c;如何确保一些通用的api和hook无需每次手动导入即可使用。 <script setup lang"ts"> import { ref, reactive } from "vue" import { useRoute, useRouter } from "vue-router" import { log…

C++——string类(1)

### string是C中的一种类&#xff0c;在标准库中的&#xff1b;可以直接对字符串进行一系列操作。 string类类型的构造 1、无参构造&#xff1a; string(); 定义string对象的时候不给值&#xff0c;这个string类的对象里面没有字符&#xff1b; #include<iostream> #in…

VsCode中Jupyter找不到内核的问题

问题描述 之前可以选择内核&#xff08;可能要先 “Python: 选择解释器”&#xff0c;也可能不用&#xff09;&#xff0c;并且是自己检测到 conda 环境中的 Python。 但是后来会突然找不到内核&#xff0c;点击选择内核&#xff0c;会在空白下加载很久&#xff0c;无果。 这…

MIPI联盟D-PHYv1.2规范阅读笔记二之物理层接口协议PPI

本文阅读自eetop.cn_mipi_D-PHY_specification_v1-2.pdf Logical PHY-Protocol Interface Description&#xff08;PHY物理层协议接口描述PPI&#xff09; PHY物理层协议接口被用于连接物理层和通信栈与更高层协议栈之间建立联系。 表 31 定义了物理层协议接口&#xff08;P…

day10JS-this的使用规则

1. this情况总结 开启严格模式&#xff1a; "use strict"; //开启严格模式 1.全局&#xff1a;非严格this--->window &#xff0c;严格 this--->window。 2.普通函数执行&#xff1a;函数名() 非严格this-->window &#xff0c;严格 this--->undefined…

全新的大语言模型Grok-2,最新测评!!

埃隆马斯克再次引发轰动&#xff0c;他旗下的xAI公司推出了全新的大语言模型Grok-2&#xff01; 最新的Grok-2测试版已经发布&#xff0c;用户可以在&#x1d54f;平台上体验小版本的Grok-2 mini。 马斯克还通过一种谜语般的方式揭开了困扰大模型社区一个多月的谜团&#xff1a…

C/C++ 包管理器 Conan 安装及使用

文章目录 Github官网文档简介安装 Conan 包管理器Conan 私有存储库创建 profile 文件添加远程存储库依赖包操作命令 Artifactory 私有存储库下载安装包&#xff08;推荐&#xff09;Docker 方式安装 Conan 官方示例 Github https://github.com/conan-io/conan 官网 https://…

零代码上手,工厂数据管理从未如此简单

在当今快节奏的工业环境中&#xff0c;工厂管理者们越来越依赖于数据分析来优化生产流程、提高效率和降低成本。然而&#xff0c;传统的数据分析工具往往复杂难用&#xff0c;且动辄需要高昂的费用&#xff0c;这让很多工厂望而却步。不过最近本人发现了一款非常实用的报表工具…

智能废弃瓶子垃圾箱:城市环境的绿色守护者

随着城市化进程的加速&#xff0c;生活垃圾的处理成为城市管理中的一大挑战。智能废弃瓶子垃圾箱的出现&#xff0c;不仅提高了垃圾回收的效率&#xff0c;还促进了资源的循环利用&#xff0c;成为智慧城市建设的重要组成部分。 目录 技术概述 核心功能 应用场景 环境与社会…

Java数据结构栏目总结

目录 数组与稀疏数组 队列&#xff1a;自己用数组模拟Queue 环形队列&#xff0c;取模【取余】实现. 单链表(LinkList) 双向链表&#xff08;Next 、Pre&#xff09; 单向环形链表 线性结构 数组与稀疏数组 稀疏数组&#xff0c;很多0值&#xff0c;可用于压缩 特点&a…

在 AMD GPUs 上进行图分析使用 Gunrock

Graph analytics on AMD GPUs using Gunrock — ROCm Blogs 图和图分析是可以帮助我们理解复杂数据和关系的相关概念。在这种背景下&#xff0c;图是一种数学模型&#xff0c;用于表示实体&#xff08;称为节点或顶点&#xff09;及其连接&#xff08;称为边或链接&#xff09;…

【CTF Web】BUUCTF BUU BRUTE 1 Writeup(弱口令+暴力破解+字典攻击)

BUU BRUTE 1 1 点击启动靶机。 解法 随便输个用户名。 试试 admin。 用 burp 抓包。 生成四位数字的字典。 导入字典到 burp。 添加载荷位置。 开始爆破。破解完成&#xff0c;密码&#xff1a;6490。取得 flag。 注意 如果破解得慢的话&#xff0c;记得要续期靶机。不然靶机…

算法工程师秋招面试问题总结

大模型分布式训练并行 一般有 tensor parallelism、pipeline parallelism、data parallelism 几种并行方式,分别在模型的层内、模型的层间、训练数据三个维度上对 GPU 进行划分。三个并行度乘起来,就是这个训练任务总的 GPU 数量。 1.数据并行 数据并行是最常见的并行形式…

2024.8.27 作业

1> 提示并输入一个字符串&#xff0c;统计该字符串中字母个数、数字个数、空格个数、其他字符的个数 #include <iostream>using namespace std;int main() {string s;cout << "请输入字符串>>>";getline(cin,s);int letter0,digit0,blank0,…

git 复制提交到另外分支上

查看提交id 在原分支上查看要复制的id git log切换目标分支 将刚才复制的id&#xff0c;在这个目标分支上执行复制命令 git cherry-pick <commit-id>其中是要复制的提交的提交ID 效果 新分支上未复制的提交&#xff1a; 新分支上已复制的提交&#xff1a;

PTA - C语言国庆题集2

目录 7-21 打妖怪7-22 统计连续高温的最大天数7-23 唱歌比赛打分7-24 找最长的字符串7-25 算龙脉7-26 DNA鉴定7-28 T9键盘7-31 单链表的创建&#xff0c;遍历与销毁7-36 有多少位是7&#xff1f;7-37 选择排序7-38 翻转单词顺序7-39 求因子和最大的数&#xff08;结构体排序&am…

min(n,k)*min(m,k)

今天看那场一题都没写出来的div12&#xff0c;发现我想了那么久的A题&#xff0c;别人用几行代码就搞出来了。。。&#xff0c;现在感觉这道题和状压dp好像。。。 这道题用到了切比雪夫距离。。。

2024114读书笔记|《漱玉词》—— 绛绡缕薄冰肌莹,雪腻酥香,满院东风,海棠铺绣,梨花飞雪

2024114读书笔记|《漱玉词》—— 绛绡缕薄冰肌莹&#xff0c;雪腻酥香&#xff0c;满院东风&#xff0c;海棠铺绣&#xff0c;梨花飞雪 《漱玉词》李清照&#xff0c;观之入微&#xff0c;是惆怅亦是欢乐&#xff0c;不费力就可以读完的小诗词&#xff0c;插图不错。 知否的主…