• GeoTools是什么,以及与JTS和GeoAPI之间的关系如何?
    时间:2014-07-31   作者:佚名   出处:互联网

    Geotools是一个java类库,它提供了很多的标准类和方法来处理空间数据,同时这个类库是构建在OGC标准之上的,是OGC思想的一种实现。而OGC是国际标准,所以geotools将来必定会成为开源空间数据处理的主要工具,目前的大部分开源软件,如udig,geoserver等,对空间数据的处理都是由geotools来做支撑。而其他很多的web服务,命令行工具和桌面程序都可以由geotools来实现。

    核心特点

      1. 为空间概念和数据结构定义了很多的接口
        1.1通过JTS类库集成了对几何拓扑的支持
        1.2通过使用OGC过滤编码规范可以对属性和空间要素过滤
      2.对于数据访问API,支持要素访问、事务支持和线程间锁定
        2.1可以访问多种格式的数据和空间数据库
        2.2支持多种坐标参考系统和及其转换
        2.3可以和扩展的地图投影一同工作
        2.4可以按照空间和非空间属性来过滤和分析数据
      3.一种无状态的,耗低内存的渲染机制,尤其在服务端环境下
        3.1通过复杂的样式(SLD)来组成和展现地图
      4.对于有xml schema绑定的GML文档,提供了强大的号称第四代xml解析技术gtxml。这种解析/编码技术可以应用到OGC标准中的SLD,GML,Filter,KML和SE,个人认为这是geotools的核心,也是geotools处理大空间数据的手段。
      5.geotools插件:开放的插件系统允许你为类库添加额外的格式。ImageIO-ext项目的插件允许geotools从gdal中读取额外的栅格格式。
      6.geotools扩展。通过使用核心类库的这些空间工具可以提供额外的构建能力,比如swing,brewer和graph。扩展模块提供了图像和网络支持、校验、web地图服务端解析,解析编码xml和color 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。
        对于额外的geometry、sld和filter的编码和解析可以通过dom和sax程序。

    实现的标准
      支持大部分的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才是一个符合规范的地理信息系统工具包。

    网友留言/评论

    我要留言/评论

    相关文章

    程序那些事:日志记录的作用和方法:程序中记录日志一般有两个目的:Troubleshooting和显示程序运行状态。好的日志记录方式可以提供我们足够多定位问题的依据。日志记录大家都会认为简单,但如何通过日志可以高效定位问题并不是简单的事情。这里列举下面三个方面的内容,辅以代码示例,总结如何写好日志,希望对他人有所启发和帮助:1、怎样记日志可以方便Troubleshooting。 2、程序运行状态可以记哪些。3、应该避免怎样的日志方式。
    Lucene 基础理论与实例:Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。本文将介绍Lucene 基础理论与实例。
    List,set,Map 的用法和区别等:List按对象进入的顺序保存对象,不做排序或编辑操作。Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List)。Map同样对每个元素保存一份,但这是基于"键"的,Map也有内置的排序,因而不关心元素添加的顺序。如果添加元素的顺序对你很重要,应该使用 LinkedHashSet或者LinkedHashMap.
    web压力测试工具集介绍:当一套程序写完或者一台服务器配置完成后,相必很多朋友会像我一样,非 常想知道它到底能 够承受多大的负载压力,那在本文中,就给大家介绍十个免 费的可以用来进行 Web 的负载/压力测试的工具,这样,你就可以知道你的服务 器以及你的 Web 应用 能够顶得住多少的并发量,以及你的网站的性能。
    五种 JSP页面跳转方法详解:本文向您介绍Servlet页面跳转实现方法的几种区别,包括Servlet和JSP中的不同实现,比如Servlet中的redirect方式和forward方式得区别等。
    JAVA,HashSet面试题:本文列举java面试题中关于HashSet的一些知识点
    开源混淆工具ProGuard配置详解及配置实例:ProGuard是一个免费的java类文件压缩,优化,混淆器.它探测并删除没有使用的类,字段,方法和属性.它删除没有用的说明并使用字节码得到最大优化.它使用无意义的名字来重命名类,字段和方法.
    在代码重构中蜕变:这几天,要对我半年前写的代码进行一些整理工作,在看代码时发现当时有很多地方写得不够好,俗称的有“坏味道”,呵呵,重构,必须的。
    搞懂java中的synchronized关键字:实际上,我关于java的基础知识的90%以上都来自Thinking in Java。对于其中的synchronized关键字,当时就是浏览一下,大概知道意思,也没有细看。后来一直没有用过这个关键字。昨天看Thinking in Patterns with Java中的Observer模式,看了其中的Observable类的源码,发现里面几乎所有的方法都用了synchronized关键字(不是全部),其中个别用了synchronized(this){}的区块。于是,我发觉有必要好好理解一下这个关键字了。
    JAVA中synchronized与static synchronized 的区别:通过分析这两个关键字的分析,我们可以理解java中锁的概念。一个是实例锁(锁在某一个实例对象上,如果该类是单例,那么该锁也具有全局锁的概念),一个是全局锁(该锁针对的是类,无论实例多少个对象,那么线程都共享该锁)。实例锁对应的就是synchronized关键字,而类锁(全局锁)对应的就是static synchronized(或者是锁在该类的class或者classloader对象上)。