龙空技术网

GeoTools入门介绍

开放GIS 157

前言:

目前咱们对“linux安装java gdal”可能比较着重,同学们都需要知道一些“linux安装java gdal”的相关文章。那么小编也在网摘上搜集了一些关于“linux安装java gdal””的相关知识,希望各位老铁们能喜欢,兄弟们一起来了解一下吧!

什么是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的主要功能,大体罗列一些,但是这些功能只是罗列一个概念,很多重要的知识,后续会按照专题来梳理,下一篇文章,将会系统介绍投影相关的概念知识,欢迎大家持续关注。

标签: #linux安装java gdal