guild-book

GeoTools

Geotools是Java语言编写的开源GIS工具包。该项目已有十多年历史,生命力旺盛,代码非常丰富,包含多个开源GIS项目,并且基于标准的GIS接口。Geotools主要提供各种GIS算法,各种数据格式的读写和显示。在显示方面要差一些,只是用Swing实现了地图的简单查看和操作。但是用户可以根据Geotools提供的算法自己实现地图的可视化。OpenJump和udig就是基于Geotools的。

核心特点

  1. 为空间概念和数据结构定义了很多的接口
    • 通过JTS类库集成了对几何拓扑的支持
    • 通过使用OGC过滤编码规范可以对属性和空间要素过滤
  2. 对于数据访问API,支持要素访问、事务支持和线程间锁定
    • 可以访问多种格式的数据和空间数据库
    • 支持多种坐标参考系统和及其转换
    • 可以和扩展的地图投影一同工作
    • 可以按照空间和非空间属性来过滤和分析数据
  3. 一种无状态的,耗低内存的渲染机制,尤其在服务端环境下
    • 通过复杂的样式SLD来组成和展现地图
  4. 对于有xml schema绑定的GML文档,提供了强大的号称第四代xml解析技术gtxml。这种解析/编码技术可以应用到OGC标准中的SLDGMLFilterKMLSE,个人认为这是geotools的核心,也是Geotools处理大空间数据的手段。
  5. Geotools插件:开放的插件系统允许你为类库添加额外的格式。ImageIO-ext项目的插件允许Geotoolsgdal中读取额外的栅格格式。
  6. Geotools扩展。通过使用核心类库的这些空间工具可以提供额外的构建能力,比如swingbrewergraph。扩展模块提供了图像和网络支持、校验、web地图服务端解析,解析编码xmlcolor brewer(地图绘图)。
  7. Geotools尚不支持的。Geotools作为广泛社区的一部分可以用来孵化一些新的项目,重点是swing支持,本地和web处理支持,添加额外符号symbology,添加额外格式,生成网格等和ISO geometry的实现。

支持的格式

  1. 支持的栅格格式和数据访问:arcsde, arcgrid, geotiff, grassraster, gtopo30, image (JPEG, TIFF, GIF, PNG), imageio-ext-gdal, imagemoasaic, imagepyramid, JP2K, matlab
  2. 支持的数据库“jdbc-ng”:db2, h2, mysql, oracle, postgis, spatialite, sqlserver
  3. 支持的矢量格式和数据访问:app-schema, arcsde, csv, dxf, edigeo, excel, geojson, org, property, shapefile, wfs
  4. XML绑定。基于xml的Java数据结构和绑定提供了如下格式xsd-core (xml simple types), fes, filter, gml2, gml3, kml, ows, sld, wcs, wfs, wms, wps, vpf。对于额外的geometrysldfilter的编码和解析可以通过domsax程序。

实现的标准

支持大部分的OGC标准

  1. OGC中的sld/SE和渲染引擎;
  2. OGC一般要素模型包括简单要素支持;
  3. OGC中栅格信息的网格影像表达;
  4. OGC中WFS,WMS和额外的WPS;
  5. ISO 19107 geometry规范;

与JTS和GeoAPI之间的关系

  1. JTS:JTS是加拿大的 Vivid Solutions 做的一套开放源码的 Java API。它提供了一套空间数据操作的核心算法,为在兼容OGC标准的空间对象模型中进行基础的几何操作提供2D空间谓词API。
  2. GeoAPI:GeoAPI为OpenGIS规范提供一组Java接口。
  3. Geotools:Geotools是一个开源的Java GIS工具包,可利用它来开发符合标准的地理信息系统。Geotools提供了OGC(Open Geospatial Consortium)规范的一个实现来作为他们的开发。

简单而言

GeoTools的目标是致力于开发一个符合规范的Gis工具包,既然是工具包,那么就要有很多工具用来对付构建一个完整的地理信息系统时会碰到的问题,常见的问题比如:投影的转换,基准面的设定,空间数据对象的渲染和样式,各种数据源的支持,各种GIS文件格式支持,空间数据过滤与搜索等问题。

在开发这些工具的时候,恰好在处理空间数据图形关系的时候,有一个非常好的解决方案,那就是JTS,JTS解决了对象与对象之间拓扑关系的判定和计算,并提供很多有用的算法来解决对象的面积,长度等等的问题。这样而言,JTS就相当于GeoTools中的一个子模块。但因为这个模块本身不是GeoTools工程的,所以在javadoc中找不到JTS的API,需要到JTS官网上面另外下载。至于GeoAPI则是GeoTools符合标准的模板。它制定了地理信息系统中所有的数据类型应该是什么,投影转换的方式有哪几种诸如此类的规范。这样兼容GeoAPI接口的GeoTools才是一个符合规范的地理信息系统工具包。

相关链接

  1. JTS
  2. GeoTools