百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

GeoTools入门介绍

bigegpt 2024-08-24 23:05 2 浏览

什么是Geotools?

Geotools是一个开源的Java代码库,是java语言用来解决地理信息相关问题的开源库,它是符合OGC的规范的标准类库,关于OGC的规范介绍,可参考之前的文章——GIS数据协议——OGC数据服务规范

目前Geotools被很多Java开源软件GIS产品所应用,比如我们熟知的Geoserver、Udig等。

Geotools详细介绍

1、核心特性

Geotools作为Java语言用进行GIS数据处理的开源库,其核心特性包括如下方面:

1) 定义了GIS关键空间概念和数据结构的接口,首先是引入了JTS空间数据处理开源库,而JTS本身就是java优秀的空间数据处理开源库,具有强大的空间数据处理能力,关于这个库后面会专门出一篇文章介绍,总之它在GIS处理空间数据方面非常重要;其次定义并实现了OGC协议的过滤编码规范,使得Geotools具备了处理空间查询和属性查询的可能。

2)提供多种访问和解析GIS数据格式的方法,包括我们熟悉的栅格数据类型,像geotiff、grassraster、img、imagemosaic、imagepyramid、jp2k等;以及各种矢量数据,像csv、geojson、property、shapefile等;此外Geotools还接入了各种数据库类型,像db2、h2、mysql、oracle、postgis、sqlserver等。

3)作为一个实现OGC协议的GIS开源库,Geotools具备各种出图效果的渲染,尤其是结合OGC规范定义的SLD文件,Geotools也可以输出用户自定义配置的显示效果,可以说通过Geotools集成的渲染能力,使得GIS服务器端具备了无状态、低内存渲染器。

4)作为GIS处理开源库,Geotools支持大部分地理坐标系和投影坐标系,可实现不同地心坐标系(参心坐标系)间的数据转换以及不同投影坐标系间的转化(可能会有误差)。

2、主要类库

1) 标准的API实现

Geotools作为GIS开源库,其实现了opengis定义的多种gis标准(接口),并实现了这些接口,比如下面的这些接口(或者说是定义),都是我们GIS开发中经常用到的定义:

a)FeatureType: 提供描述所表示信息的元数据模型,简单来说就是存储数据的描述信息,描述信息包括属性类型(PropertyType)、名称(Name)、该属性出现的最大最小次数、属性是否允许为Null等信息,简单类比为数据库表的结构,Geotools可通过SimpleFeatureTypeBuilder来创建FeatureType。

b) Feature:用来表示在地图上可以绘制的要素,简单来说Feature就是对FeatureType描述信息的数据填充,该要素包括属性和几何信息。Geotools用来创建Feature的两个实现类包括FeatureFactory和SimpleFeatureBuilder。

c) Filter:过滤器参数,这是Geotools实现属性查询和空间查询的核心类,当然包括后续我们要讲的CQL(ECQL)最终的产物都是Filter,你可以理解它就是SQL语句中的where条件,关于Filter的使用后面我们会用专门的章节来说明。

d) GridCorverage: 这个可以理解是一个数据矩阵,里面包含图像信息、类别信息(category)、采样的维度(sampledimensions)、地理参考系(Georeferencing),这个参数就是图像信息和GIS信息的结合体,比如我们发布一个TIFF数据后,通过WMTS(一种OGC协议,可参考前面的文章)来访问某一个瓦片数据,就会通过GeoTiffReader来获取一个GridCorverage。

e) Coordinate Systems:坐标系,这里面涉及很多的GIS知识,后面有时间专门出一节来梳理这个概念,现在了解一般的GIS数据都会有一个地理坐标系,当然如果有投影,还会附带一个投影坐标系。

f) Style Layer Descriptor:图层样式的描述接口,用来定义地图的绘制方式,可以简单理解为图像的符号化,比如矢量线数据,如果想在GIS服务端栅格化的描述其颜色、宽度、形状等信息,就可以通过sld文件来处理。其实它就是一个xml文件,里面用各种标签来定义了很多属性,具体后面会有一章节来介绍。

除此之外,geotools还有很多其它的基础类库,不在这里一一列举,感兴趣的可以查看geotools的官网,有详细的介绍文档。

2) 外部核心类库

a) JTS:JTS是Geotools引用的专门处理GIS几何功能的三方库,JTS全程是Java Topology Suite,它凭借其优秀的能力,已被多个语言实现,包括C++的GEOS,js的JSTS,.net的NetTopologySuite。

实现的功能:Geotools中关于Geometry的处理都是基于JTS实现的,包括GIS几何关系中的相等(Equals)、脱节(Disjoint)、相交(Intersects)、接触(Touches)、交叉(Crosses)、内含(Within)、包含(Contains)、重叠(Overlaps)等几何关系都是由JTS来实现的,此外JTS中还多基础几何的算法,包括缓冲区、距离、凸包以及几何数据的简化算法。

目前JTS只能处理二维几何关系,三维相关的集合关系,JTS目前没有支持,如果有这方面的需求,可以考虑借助PostGIS插件(postgresql数据库的地理数据插件)。

b) Jaiext:JAI是Java Advance Image的简称,是java用来处理2D图像的库,但是由于sun公司一直没有公开源码,且目前也不维护了,而JAI-EXT是对JAI的扩展,目前比较活跃,而且针对JAI进行了扩展和改善,扩展的方面包括,增加nodata数据的处理,改善JAI原有的操作新能。

c) Imageio-ext:是一个开源项目,为java的ImageIO提供扩展、修复和改进,主要的改进点包括如下:

  1. 支持了GDAL I/O库。
  2. 支持通过Kakadu实现读写JPEG2000文件。
  3. 改进了对读写tiff文件的支持。
  4. 基于libjpeg-turbo开源高性能库提升对JPEG图像的读写。
  5. 通过PNGWriter改进Png文件的写入性能。

可以说imageio-ext也是java图形处理的扩展,是解决传统JAVA的iamgeIO无法支持GIS多种数据的问题。

3) 不维护模块

Geotools作为一个非常活跃的开源GIS库,除了常用的功能外,也公开了很多不受支持的功能模块,所谓不受支持就是GeoTools开发团队不维护该功能,如果使用者有需求,可以在现有的基础上自己去改进维护。

而这些不维护模块中,有一些却是我们常用的功能,比如对Mbtiles数据插件,Kml数据插件,geojson数据插件,ES的支持插件等等,虽然这些插件官方不申明维护,但是实际小编发现,很多插件都是可以满足日常需求的,比如Mbtiles插件,geojson插件,虽说有一些瑕疵,但是整体的逻辑都是没有问题的,有了这些插件对于我们使用者而言,可以避免过度的造轮子。

总结语:

今天关于Geotools的主要功能,大体罗列一些,但是这些功能只是罗列一个概念,很多重要的知识,后续会按照专题来梳理,下一篇文章,将会系统介绍投影相关的概念知识,欢迎大家持续关注。

相关推荐

Docker篇(二):Docker实战,命令解析

大家好,我是杰哥上周我们通过几个问题,让大家对于Docker有了一个全局的认识。然而,说跟练往往是两个概念。从学习的角度来说,理论知识的学习,往往只是第一步,只有经过实战,才能真正掌握一门技术所以,本...

docker学习笔记——安装和基本操作

今天学习了docker的基本知识,记录一下docker的安装步骤和基本命令(以CentOS7.x为例)一、安装docker的步骤:1.yuminstall-yyum-utils2.yum-con...

不可错过的Docker完整笔记(dockerhib)

简介一、Docker简介Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,...

扔掉运营商的 IPTV 机顶盒,全屋全设备畅看 IPTV!

其实现在看电视节目的需求确实大大降低了,折腾也只是为了单纯的让它实现,享受这个过程带来的快乐而已,哈哈!预期构想家里所有设备直接接入网络随时接收并播放IPTV直播(电信点播的节目不是太多,但好在非常稳...

第五节 Docker 入门实践:从 Hello World 到容器操作

一、Docker容器基础运行(一)单次命令执行通过dockerrun命令可以直接在容器中执行指定命令,这是体验Docker最快捷的方式:#在ubuntu:15.10容器中执行ech...

替代Docker build的Buildah简单介绍

Buildah是用于通过较低级别的coreutils接口构建OCI兼容镜像的工具。与Podman相似,Buildah不依赖于Docker或CRI-O之类的守护程序,并且不需要root特权。Builda...

Docker 命令大全(docker命令大全记录表)

容器生命周期管理run-创建并启动一个新的容器。start/stop/restart-这些命令主要用于启动、停止和重启容器。kill-立即终止一个或多个正在运行的容器rm-于删除一个或...

docker常用指令及安装rabbitMQ(docker安装rabbitmq配置环境)

一、docker常用指令启动docker:systemctlstartdocker停止docker:systemctlstopdocker重启docker:systemctlrestart...

使用Docker快速部署Storm环境(docker部署confluence)

Storm的部署虽然不是特别麻烦,但是在生产环境中,为了提高部署效率,方便管理维护,使用Docker来统一管理部署是一个不错的选择。下面是我开源的一个新的项目,一个配置好了storm与mono环境的D...

Docker Desktop安装使用指南:零基础教程

在之前的文章中,我多次提到使用Docker来安装各类软件,尤其是开源软件应用。鉴于不少读者对此有需求,我决定专门制作一期关于Docker安装与使用的详细教程。我主要以Macbook(Mac平台)为例进...

Linux如何成功地离线安装docker(linux离线安装httpd)

系统环境:Redhat7.2和Centos7.4实测成功近期因项目需要用docker,所以记录一些相关知识,由于生产环境是不能直接连接互联网,尝试在linux中离线安装docker。步骤1.下载...

Docker 类面试题(常见问题)(docker面试题目)

Docker常见问题汇总镜像相关1、如何批量清理临时镜像文件?可以使用sudodockerrmi$(sudodockerimages-q-fdanging=true)命令2、如何查看...

面试官:你知道Dubbo怎么优雅上下线的吗?你:优雅上下线是啥?

最近无论是校招还是社招,都进行的如火如荼,我也承担了很多的面试工作,在一次面试过程中,和候选人聊了一些关于Dubbo的知识。Dubbo是一个比较著名的RPC框架,很多人对于他的一些网络通信、通信协议、...

【Docker 新手入门指南】第五章:Hello Word

适合人群:完全零基础新手|学习目标:30分钟掌握Docker核心操作一、准备工作:先确认是否安装成功打开终端(Windows用户用PowerShell或GitBash),输入:docker--...

松勤软件测试:详解Docker,如何用portainer管理Docker容器

镜像管理搜索镜像dockersearch镜像名称拉取镜像dockerpullname[:tag]列出镜像dockerimages删除镜像dockerrmiimage名称或id删除...