网站首页 > 开源技术 正文
前言
Geotools作为一款开源的GIS业务处理库,其内置了多种开源数据的解析算法,包括常见的TIFF、IMG、Shape、CSV、Geojson以及集成了Gdal工具库,可解析Gdal支持的所有数据格式。今天主要来介绍下Geotools自身支持的数据解析类以及其中的代码设计模式。
环境搭建
在开始今天的讲解以及后续所有的代码级别的知识之前,请大家先在开发环境(Eclipse或Idea),搭建一个Maven工程,具体搭建过程网上教程很多,这里不介绍maven的搭建过程,请自行完成。本系列内容是以Geotools25.2版本为基础讲解的。引入我们今天依赖包,具体如下:
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.opengis</groupId>
<artifactId>giser</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>giser</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-shapefile</artifactId>
<version>25.2</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-geotiff</artifactId>
<version>25.2</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-epsg-hsql</artifactId>
<version>25.2</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-swing</artifactId>
<version>25.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11-beta-1</version>
<scope>compile</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>osgeo</id>
<name>OSGeo Release Repository</name>
<url>https://repo.osgeo.org/repository/release/</url>
<snapshots><enabled>false</enabled></snapshots>
<releases><enabled>true</enabled></releases>
</repository>
<repository>
<id>osgeo-snapshot</id>
<name>OSGeo Snapshot Repository</name>
<url>https://repo.osgeo.org/repository/snapshot/</url>
<snapshots><enabled>true</enabled></snapshots>
<releases><enabled>false</enabled></releases>
</repository>
</repositories>
</project>
栅格数据解析
今天主要来看tiff数据的解析,tiff数据是GIS行业栅格数据的主要存储格式,包括卫片影像,栅格影像,以及地形数据,geotools中对于tiff数据的读取直接使用GeoTiffReader即可,该类可以直接传递一个tiff文件,也可以传递对应的输入流,以及文件网络路径。
而对于实际tiff的读取,主要由三方库TIFFImageReader完成的,这个类是我们之前介绍的三方库ImageIO-ext的核心类,由这个类解析tiff数据的所有格式以及存储的信息,当然如你有自己的解析算法,系统也支持传递自定义的解析类。
TIFFImageReader按照tiff数据的标准格式去解析,getools将解析后的tiff元数据分装到GeoTiffIIOMetadataDecoder,可以从这个类中获取到tiff的元数据信息,包括数据的bbox、投影信息、图像网格信息以及是否含有nodata数据等。下面来简单看下代码的实现,其实代码实现很简单,具体如下:
其核心读取内容主要在GeoTiffReader的geHRInfo()中
在构造函数中最主要的就是getHRInfo()这个方法,用来获取tiff中的元数据,最主要的是通过spi技术,通过TIFFImageReader的getImageMetadata()方法进一步解析tiff数据,关于tiff数据格式的解析,可以参考TIFFImageReader中的seekToImage(int imageIndex, boolean optimized),其中第一个参数imageIndex是tiff页索引,因为tiff数据有时候数据是由多页构成的,这也是tiff相比较其它图像格式的优势,关于该类中的详细代码大家感兴趣可以自行阅读源码,因为它就是按照tiff标准格式挨个解析的。
矢量数据解析
Geotools对于矢量数据解析也是比较全面的,下面就以shape数据的解析为为例,来说明geotools对矢量数据的解析,目前geotools提供了通用接口,通过DataStoreFinder解析获取一个DataStore的类对象,然后通过DataStore获取SimpleFeatureSource,SimpleFeatureSource是geotools对opengis定义的SimpleFeatureType和SimpleFeature的实现,通过这个类我们就可以获取到Shape中定义的gis相关信息,具体代码如下:
自定义扩展
由于Geotools采用的是模块化开发的方式,所有的实现都是基于SPI技术,当然这个技术在Java领域有很多可扩展架构都是基于它实现的。
因此,如果我们希望自定义一个矢量类型,然后按照geotools这种模式无缝的衔接进来,比如矢量数据我们只需要实现geotools的DataStoreFactorySpi接口即可,如果我们是以三方库的形式集成到系统中,那么需要再jar包的META-INF目录下,新建一个services文件下,并在该目录下创建一个文件,文件名称是DataStoreFactorySpi的全名(就是从包名开始),里面的内容就是我们自定义的实现类的全名。
比如,下面是geotools的shape解析库的services的文件信息:
这样配置好后,我们重启系统,就可以使用我们自定义的解析类了。而栅格的解析也是一样,只需要实现ImageReaderSpi即可。
好了,今天关于geotools数据解析的内容就说到这里,基本都是基础的接口调用,如果大家对哪方面感兴趣或者遇到什么问题,欢迎咨询交流,下一期针对这一期解析的数据,将做一个简单的应用,就是如何实现矢量和栅格的wms协议,欢迎持续关注!
猜你喜欢
- 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入门介绍(geotools wkt)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)