网站首页 > 开源技术 正文
什么是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提供扩展、修复和改进,主要的改进点包括如下:
- 支持了GDAL I/O库。
- 支持通过Kakadu实现读写JPEG2000文件。
- 改进了对读写tiff文件的支持。
- 基于libjpeg-turbo开源高性能库提升对JPEG图像的读写。
- 通过PNGWriter改进Png文件的写入性能。
可以说imageio-ext也是java图形处理的扩展,是解决传统JAVA的iamgeIO无法支持GIS多种数据的问题。
3) 不维护模块
Geotools作为一个非常活跃的开源GIS库,除了常用的功能外,也公开了很多不受支持的功能模块,所谓不受支持就是GeoTools开发团队不维护该功能,如果使用者有需求,可以在现有的基础上自己去改进维护。
而这些不维护模块中,有一些却是我们常用的功能,比如对Mbtiles数据插件,Kml数据插件,geojson数据插件,ES的支持插件等等,虽然这些插件官方不申明维护,但是实际小编发现,很多插件都是可以满足日常需求的,比如Mbtiles插件,geojson插件,虽说有一些瑕疵,但是整体的逻辑都是没有问题的,有了这些插件对于我们使用者而言,可以避免过度的造轮子。
总结语:
今天关于Geotools的主要功能,大体罗列一些,但是这些功能只是罗列一个概念,很多重要的知识,后续会按照专题来梳理,下一篇文章,将会系统介绍投影相关的概念知识,欢迎大家持续关注。
- 上一篇: 《黑暗中的行者,光明的追寻者》(黑暗中的光明使者)
- 下一篇: GeoTools数据解析(geo分析)
猜你喜欢
- 2024-09-14 Spark及Hadoop常见问题集锦(hadoop spark flink)
- 2024-09-14 CentOS7下安装geowave+hbase+geoserver的实现
- 2024-09-14 5分钟掌握Elasticsearch空间查询之geo_point
- 2024-09-14 GIS工程师一些基础东西(gis工程师工作内容)
- 2024-09-14 Java图像基础知识(java图像算法)
- 2024-09-14 GIS坐标系介绍(gis常用坐标系)
- 2024-09-14 GeoServer安装以及部署(geoserver视频教程)
- 2024-09-14 Spring Boot集成GeoTools快速入门demo
- 2024-09-14 GeoTools数据解析(geo分析)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)