关于GeoTools技术架构知识简介

news2024/11/13 10:12:32

目录

前言

一、GeoTools架构说明

1、GeoTools Library

2、各模块说明

3、GeoTools插件

4、GeoTools的扩展功能

5、GeoTools的xml支持

二、从Geotools的源码看架构

1、GeoTools源码

2、各功能模块介绍 

 3、以library来看相关组件

三、总结


前言

        作为使用Java语言开发的地理信息实现,GeoTools已经是一个家喻户晓的一个框架。在很多的应用系统中进行运用。在之前的博客中虽然对GeoTools的相关知识进行了简单的介绍,作为一个使用Java进行WebGIS开发的技术人员,很有必要对GeoTools的知识进行深入的学习。本文是GeoTools基础学习的一部分之一。

        本文将重点介绍GeoTools的技术框架,对GeoTools的相关依赖与功能jar的叙述进行讲解。文章从GeoTools的插件、扩展、XML支持、非GeoTools的官方扩展这几个方面来进行讲解。通过本文的内容,您可以对GeoTools的架构更进一步的熟悉,同时对GeoTools的主要模块更加了解。

一、GeoTools架构说明

Having an understanding of how the GeoTools library is structured is helpful for sorting out what jars you need to include with your application.

This page introduces you to the modules of the GeoTools library and how they fit together. By including only the jars you need you can select just the right amount of GeoTools for your next project.

        目的:通过了解包含在应用程序中的jar,从而对GeoTools库有更进一步的结构了解。在这里首先介绍GeoTools库的模块以及它们是如何组合在一起的。通过只包含您需要的jar包,您可以为下一个项目选择适量的GeoTools。

1、GeoTools Library

        GeoTools库是一个丰富的软件资源库,每个模块都建立在前一个模块中定义的思想和概念之上。通过丰富的组件来构成功能强大的Geotools生态。下面就来介绍一下GeoTools的模块架构。下图是GeoTools的模块架构图:

Geotools 模块架构图

        GeoTools的每一层都建立在它下面的层之上,采用的是多模块构建的开发模式:比如要使用引用的资源包,您需要ggt-api, gt-metadata 和gt-referencing。要使用“EPSG”代码,您需要一个插件,如gt-EPSG-hsql,为引用模块提供EPSG定义。或者您要使用Coverage,您需要ggt-api, gt-metadata 和gt-referencing(使用插件gt epsg-hsql)、gt-main和gt-covage。要充分利用Coverage模块,可以使用gt geotiff等插件访问geotiff文件。通过丰富的插件库,向上构建多样的实现层应用。从而让我们实现更丰富的功能和应用。

2、各模块说明

        maven工具可以管理和维护您需要的jar,下面将对GeoTools中的各个实现模块与maven的jar资源对应关系进行一个简单的说明。

序号模块作用说明
1gt-renderMap API, with Java2D rendering engine for mapping.地图API,使用Java2D的渲染引擎
2gt-jdbcImplements for accessing spatial database操作空间数据库的实现
3gt-xmlImplements of common spatial XML formats空间xml格式的实现
4gt-cqlImplements of Common Query Language for filters通用查询语言的实现
5gt-coverageImplementation for accessing raster information访问读取栅格数据的实现
6gt-mainData API, with default implementations of filter, feature, etc…数据操作API,默认的过滤器实现
7gt-referencingImplementation of co-ordinate location and transformation坐标定位和转换的实现
8gt-metadataImplementation of identification and description定义和管理元数据的实现
9gt-apiDefinition of interfaces for common spatial concepts
10jtsJTS Topology Suite (external library) implementing GeometryJTS拓扑套件(外部库)

3、GeoTools插件

         在GeoTools中又根据不同的模块进行了插件的扩展。以gt-jdbc为例,众所周知,常见的数据库种类有很多种,包括DB2、MySQL、Oracle、PostgreSQL、SqlServer等等。因此在面向数据库的支持上,GeoTools又根据不同的数据类型进行了支持。类似与Jdbc的驱动一样,根据数据库类型的不同扩展了不同的gt-jdbc,下面是具体的插件与扩展列表详情:

序号jar说明
1gt-jdbc-db2Geometry in DB2,DB2 数据库支持
2gt-jdbc-h2Pure Java “H2” database,H2内存数据库支持
3gt-jdbc-mysqlGeometry in MySQL,MySQL支持
4gt-jdbc-oracleOracle SDO Geometry,Oracle支持
5PostgreSQL extension PostGISPostGIS扩展支持
6gt-jdbc-sqlserverSqlServer支持
7gt-jdbc-hanaSAP HANA 支持

        在gt-main中集成了对shapefile和wfs的读写扩展支持,与Gdal不一样的地方是,geotools对于空间矢量数据的读写支持,分别采用了不同的扩展来实现。

序号jar说明
1gt-shapeShapefile read/write support,shp数据的读写支持
2gt-wfsWFS read/write support,wfs的读写支持

        与gt-jdbc的扩展类似,geotools也支持不同格式的栅格数据的读写与处理,因此根据不同的数据类型进行了对应的扩展。比如常见的geotiff、image等等,下面是详细的栅格数据的扩展支持包。

序号jar说明
1gt-geotiffGeoTIFF raster format,支持geotiff格式栅格数据
2gt-arcgridarcgrid format
3gt-mifMIF format
4gt-imageJPG, PNG, TIFF formats

        通常,GeoTools的每一层都需要至少一个插件来执行某些操作。例如,每次使用引用模块时,请确保有一个EPSG插件(否则引用模块将不知道“EPSG:4326”就是已知的坐标参考)。

4、GeoTools的扩展功能

        我们更进一步的,在GeoTools库的基础上实现了一些有趣的“扩展”。这些扩展提供了使用核心库的全部功能构建在GeoTools之上的额外功能。这里我们来简单介绍GeoTools的扩展功能。下面这张图是Geotools的扩展架构图:

GeoTools 扩展功能架构图

        在GeoTools中,这些扩展按照功能模块来划分是独立的。大家可以按照需要来进行引入到具体的开发中。 下面对涉及到的插件进行简要介绍:

JAR

Extension

gt-app-schema

Map from application schema to complex feature model

gt-brewer

Generation of styles using color brewer

gt-complex

Support for making custom complex feature model

gt-graph

Work with graph and network traversals,这个很重要,实现图像渲染的重要组件

gt-grid

Dynamicly generate features from grid definiton

gt-transform

Transform features on the fly

gt-wms

Web Map Server client,这是对wms等ogc标准的支持

gt-wmts

Web Map Tile Server client,这是对Wmts的OGC标准的支持

gt-xsd

Parsing/Encoding for common OGC schemas

5、GeoTools的xml支持

        在GeoTools当中,对于xml的支持能力非常强。不仅可以实现WMS、WMTS、MFS等常见的OGC标准服务,同时对于地图的样式XLD渲染能力也支持得比较好。已xsd为例,XSD解析器通过一系列XSD插件使用这些工具。这些插件指示如何使用Eclipse XSD库解析和编码其他内容,以解析XML模式文档,并提供“绑定”,显示如何解析和编码到Java类,如String、Date、URL和Geometry。

JAR

Bindings

gt-xsd-core

Basic types defined by XML schema

gt-xsd-fes

filter 2.0

gt-xsd-filter

filter (used by OGC CAT and WFS)

gt-xsd-kml

keyhole markup language

gt-xsd-wfs

web feature service

gt-xsd-wps

web processing service

gt-xsd-gml3

geographic markup language 3

gt-xsd-gml2

geographic markup language 2

gt-xsd-ows

open web services

gt-xsd-wcs

web coverage service

gt-xsd-wms

web map service

gt-xsd-sld

style layer descriptor

        关于xml的支持,还可以看下面的这个表格:

JAR

Schema

net.opengis.ows

open web services schema

net.opengis.wfs

web feature service

net.opengis.wps

web processing service schema

net.opengis.wcs

web coverage service schema

net.opengis.wfs

web feature service schema

org.w3.xlink

XLink schema

        这里重点是关于对opengis的支持功能非常强大,比如常见的wfs、wps、wcs等等。这些都是标准的ogc的实现,使用Java可以构建出这些完全符合标准的OGC服务,再通过java的分布式系统构建能力来扩展ogc服务的处理能力,提高我们应用的处理功能。上述资料摘自geotools的官方资料,在实际开发时,可以翻阅上的资料进行查阅,GeoTools Architecture。

二、从Geotools的源码看架构

        虽然在GeoTools的官方文档说明中,我们对其大概的功能架构有了基本的认识,但是还没有看到GeoTools的源码,下面从源代码的模块划分来进行讲解。

1、GeoTools源码

        GeoTools的源码可以在GitHub上搜索得到,如果大家的网络条件不是很好的话,可以在国内使用Gitee来加速。在Gitee上也有从github上复制过来的镜像,大家也可以放心下载。关于源码的编译JDK版本,下次在讲解GeoTools的本地编译时再重点讲解,本地开发环境使用的jdk1.8,因此GeoTools使用的28.x的版本。

         将GeoTools的源代码下载到本地后,就可以阅读它的源代码,本地源码的目录结构如下所示:

2、各功能模块介绍 

        在Geotools的各功能模块中,它的主要源代码是放在modules这个目录下面的。我们打开modules这个文件夹,就可以看到它的子包。

        可以看到,这个Geotools的模块划分与我们在博客的开始讲到的知识是基本一致的。我们可以打开它的Pom.xml来进行进一步的查看划分。 

<?xml version="1.0" encoding="UTF-8"?>
<!-- =======================================================================    
        Maven Project Configuration File                                        
                                                                                
        The Geotools Project                                                    
            http://www.geotools.org/                                            
                                                                                
        Version: $Id$              
     ======================================================================= -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0                                 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.geotools</groupId>
    <artifactId>geotools</artifactId>
    <version>28-SNAPSHOT</version>
  </parent>
  <!-- =========================================================== -->
  <!--     Module Description                                      -->
  <!-- =========================================================== -->
  <groupId>org.geotools</groupId>
  <artifactId>modules</artifactId>
  <packaging>pom</packaging>
  <name>Geotools modules</name>
  <description>Geotools libraries.</description>
  <licenses>
    <license>
      <name>Lesser General Public License (LGPL)</name>
      <url>http://www.gnu.org/copyleft/lesser.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>
  <!-- =========================================================== -->
  <!--     Modules included in the build                           -->
  <!-- =========================================================== -->
  <modules>
    <module>library</module>
    <module>ogc</module>
    <module>plugin</module>
    <module>extension</module>
    <module>unsupported</module>
  </modules>
  <!-- =========================================================== -->
  <!--     Dependencies to be inherited by all modules.            -->
  <!-- =========================================================== -->
  <dependencies>
    <dependency>
      <groupId>javax.media</groupId>
      <artifactId>jai_core</artifactId>
      <!-- The version number is specified in the parent POM. -->
    </dependency>
  </dependencies>
</project>

        在上述的xml文档中,重点定义了相关的模块内容。

        同时在pom.xml中,可以看到是我们想clone的28.x的版本。

<parent>
    <groupId>org.geotools</groupId>
    <artifactId>geotools</artifactId>
    <version>28-SNAPSHOT</version>
  </parent>

 3、以library来看相关组件

        通过上小节的modules可以知道geotools的功能是非常丰富的,通过一篇文章肯定不能完整的进行介绍,这么多的源码,非常值得我们去学习,掌握它的设计理念和实现方式。而且需要耗费一定的时间,由于时间有限,这里不将每个包都一一罗列,后面会根据不同的包和具体的使用会出一些详细的教程。这里以library库为例做一些简单的介绍,让大家知道如何进行源代码的阅读,根据不同的模块来研究自己感兴趣的功能模块。

        可以看到,在library当中包含了我们之前说的coverage、cql、http、Jdbc、main、metadata、opengis、referencing、render、xml等等的模块,大家就可以根据自己的需要逐模块,逐包进行源代码的阅读和debug调试。 比如我们想阅读jts下面的一些知识,如下图所示:

         Geotools的代码封装的非常不错,都是按照面向对象的方式来进行设计和实现的。因此学习它的源代码的编写,对我们的程序开发能力有很大的借鉴意义。学有余力的朋友们,可以深入学习起来哦。本文这里起抛砖引玉的作用,关于geotools的更多知识,欢迎大家一起交流探讨。

三、总结

        以上就是本文的主要内容,本文将重点介绍GeoTools的技术框架,对GeoTools的相关依赖与功能jar的叙述进行讲解。文章从GeoTools的插件、扩展、XML支持、非GeoTools的官方扩展这几个方面来进行讲解。通过本文的内容,您可以对GeoTools的架构更进一步的熟悉,同时对GeoTools的主要模块更加了解。关于GeoTools的源代码阅读,以后会在系列博客中进行详细介绍。结合案例的方式进行深入讲解,本文对基础的功能架构进行了简单介绍。行文仓促,定有许多不足之处,还恳请各位专家博主在评论区留下宝贵意见,不胜感激。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2102229.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CAD图纸怎么加密?推荐5个有效防止图纸泄露的方法

随着技术的发展&#xff0c;CAD图纸成为了设计和工程领域不可或缺的一部分。然而&#xff0c;这些图纸往往包含敏感信息&#xff0c;一旦泄露可能会给企业带来严重的商业损失或知识产权问题。因此&#xff0c;采取有效的加密和保护措施至关重要。下面将介绍五种有效的方法来保护…

DBMS-2.1 数据库设计(1)——数据库设计与数据模型

本文章的素材与知识均来自于李国良老师的数据库管理系统课程。 数据库设计和数据模型 一.数据模型 1.概念 &#xff08;1&#xff09;数据库结构的基础就是数据模型。数据模型是用于描述数据间的联系、数据语义(即数据操作)、一致性(完整性)约束的概念和工具的集合。 2.分…

海外合规|新加坡网络安全认证计划简介(一)

新加坡网络安全局&#xff08;CSA&#xff09;为组织制定了网络安全认证计划&#xff0c;旨在表彰具有良好网络安全实践的组织。Cyber Essentials 标志表彰已实施网络卫生措施的组织&#xff0c;而 Cyber Trust 标志则是表彰具有全面网络安全措施和实践的组织的卓越标志。这些标…

【递归、回溯专题(三)】记忆化搜索题集

文章目录 1. 斐波那契数2. 不同路径2. 不同路径3. 最长递增子序列4. 猜数字大小II 1. 斐波那契数 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#x…

逻辑器件输出高阻态时,输出端口的电平是什么状态呢?

高阻态是逻辑器件输出端口的一种状态&#xff0c;当端口处于高阻态时&#xff0c;输入端口的电平变化不会引起输出端口变化&#xff0c;不会对与之相连的后级输入端口或总线产生影响&#xff0c;对于总线架构的电路极为重要。   输出端口处于高阻态时&#xff0c;输出端口处于…

什么是分段和分页?

内存管理的必要性 很早之前计算机只能运行单个进程&#xff0c;就算运行批处理程序&#xff0c;也是棑好对&#xff0c;一个一个的进行处理&#xff0c;不存在多个进程并发运行&#xff0c;这时候内核对于内存管理相对比较简单&#xff0c;直接把物理内存地址拿过来是使用即可。…

网络编程TCP和UDP

将TCP的CS模型再敲一遍 TCP服务器 1->创建原始的套接字描述符 2->将原始套接字与主机ip绑定 3->将原始套接字设置监听状态 4->接收客户端连接&#xff0c;获取客户端信息&#xff0c;因为原始套接字被用了&#xff0c;所以创建新的套接字描述符用于客户端通信…

2区SCI仅52天直录!9月甄选SCI/SSCI合集(含各领域)

【SciencePub学术】我处SciencePub学术2024年9月SCI/SSCI/EI/CNKI刊源表已更新&#xff01;内含多本中科院TOP、CCF推荐以及进展超顺的优质期刊&#xff0c;最快1-2个月录用&#xff01; 计算机领域重点SCI 环境地质化学领域重点SCI 生物医学领域重点SCI 数学材料物理领域重点S…

拥有这些AI绘画网站,让你轻松告别手绘时代!

在这个充满无限可能的数字世界里&#xff0c;AI 绘画动漫网站已经成为了许多艺术家和设计师的新宠。从手绘时代的岁月如歌&#xff0c;到今天科技的飞速发展&#xff0c;我们已经可以用AI技术创作出令人惊叹的艺术作品&#xff0c;打开了全新的创作空间。接下来&#xff0c;就让…

图形化编程011

项目描述&#xff1a; 点击绿旗&#xff0c;点击空格键&#xff0c;角色向上游动&#xff0c;松开空格键&#xff0c;角色向下飘落。 浮游生物碰到角色会发出声音并隐藏&#xff0c;碰到舞台边缘会重新出现。 30秒后程序结束 。 拆解步骤&#xff1a; 1、添加背景和角色以及…

如何打造一个智能化的远程在线考试系统?

远程教育与在线考试已成为提升知识传播效率和学习灵活性的重要手段。 土著刷题在线考试系统&#xff0c;凭借其完善的多功能考试模块&#xff0c;为教育机构、学校乃至企业提供了一个智能化的远程在线考试解决方案。 接下来将介绍土著刷题在线考试系统如何助力用户构建一个高效…

第L3周:机器学习-逻辑回归

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标&#xff1a; 逻辑回归适用于分类问题&#xff0c;主要用于解决二分类或多分类的问题。比如&#xff1a;用户购买某商品的可能性&#xff0c;某病人患有某…

单端输入与差分输入

单端输入&#xff1a; 单端输入测量的是一根导线与地之间的电压差&#xff0c;然后将这个差值放大以提供输出。 然而&#xff0c;单端输入容易受到噪声的影响&#xff0c;因为承载信号的导线会吸收电背景噪声。此外&#xff0c;单端输入上的信号还可能受到地环路的影响。 例…

鸿蒙(API 12 Beta6版)图形【NativeDisplaySoloist开发指导】方舟2D图形服务

如果开发者想在独立线程中进行帧率控制的Native侧业务&#xff0c;可以通过DisplaySoloist来实现&#xff0c;如游戏、自绘制UI框架对接等场景。 开发者可以选择多个DisplaySoloist实例共享一个线程&#xff0c;也可以选择每个DisplaySoloist实例独占一个线程。 接口说明 函…

【MySQL00】【 杂七杂八】

文章目录 一、前言二、MySQL 文件1. 参数文件2. 日志文件3. 套接字文件4. pid 文件5. 表结构定义文件6. InnoDB 存储引擎文件 二、BTree 索引排序三、InnoDB 关键特性1. 插入缓冲1.1 Insert Buffer 和 Change Buffer1.1 缓冲合并 2. 两次写2. 自适应哈希索引3. 异步IO4. 刷新邻…

宝藏!《联盟现代控制特训班题库》(麒麟篇) 讲义部分:甄选内容

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;初试《现代控制特性班题库》(麒麟篇)&#xff0c;分为讲义和习题两个部分&#xff0c;本文为讲义部分的甄选内容&#xff0c;一本书帮你学透现控。 目录 Part1&#xff1a;资料封面&目录 讲义部分目录 Part2&…

为什么很多人都还用着Win10 而不投向Win11的怀抱?

前言 自从Windows 11发布&#xff08;2021年6月&#xff09;不知不觉已经过去了3年了。在这三年期间&#xff0c;Windows 11经历了几个大版本的更新。 Windows 10从正式发布开始&#xff08;2015年7月&#xff09;至现在已经有9年的历史。而Windows 10的最后一个版本22H2即将在…

2024年河南省成人高考报名指南

2024年河南省成人高考报名指南 河南省成人高考预计9月初g网报名&#xff0c;一般一周时间结束&#xff0c;预计到9月中旬报名截止‼不清楚报名流程同学看过来&#xff0c;今天老师给大家详细介绍一下&#xff01; 想参加河南成人高考需要什么条件&#xff0c;具体的报名流程是什…

AD19基础应用技巧:捕捉对象功能的讲解鼠标”绿色十字”大光标、小光标切换

AD PCB 中心点捕捉功能&#xff1a; 线段、圆、边框中心点捕捉。 有时候不想要鼠标自动捕捉中心点怎么办&#xff1f; 关于Altium Designer 20 的捕抓功能的讲解&#xff08;https://blog.csdn.net/weixin_44599693/article/details/126177841&#xff09; ——- AD PCB画板…

基于VsCode和Git的代码版本管理

基础回退 在项目文件夹右键打开git bash&#xff0c;输入命令git log 查看提交的历史 commit&#xff0c;git log --prettyoneline将版本信息压缩到一行 使用git log可能会显示不全&#xff0c;按enter逐行查看&#xff0c;按end跳至末尾查看完成后&#xff0c;按q即可退出 …