使用用于栅格时间序列数据的ImageMosaic插件

介绍

这个循序渐进的教程描述了如何使用ImageMosaic插件构建时间序列覆盖。ImageMosaic插件允许创建栅格数据集的时间序列层。单个图像保存在一个可查询的结构中,以允许使用时间过滤器访问特定的数据集。

本教程假设您了解 ImageMosaic 部分。

本教程包含四个部分:

  • 第一部分, 配置 ,介绍从GeoServer设置ImageMosaic存储所需的配置文件。

  • 第二部分, 配置示例 ,提供所需配置文件的示例。

  • 最后两部分, 基于文件存储的覆盖率基于数据库的覆盖率 在完成前面的配置步骤后,描述如何使用GeoServer GUI创建和配置ImageMosaic存储。

教程中使用的数据集可以下载 Here . 它包含3个图像文件和一个.sld文件,表示正确渲染图像所需的样式。

配置

为了支持时间序列层,需要在具有 时区配置正确 . 要将时区设置为协调世界时(UTC),请在启动java进程时添加此开关:

-Duser.timezone=GMT

如果使用SabeFiFLE作为镶嵌索引存储(见下一节),则需要另一个Java进程选项来支持SabeFielsSt店中的时间戳:

-Dorg.geotools.shapefile.datetime=true

备注

对时间戳的支持不是DBF标准的一部分(在shapefile中用于属性)。DBF标准只支持日期,只有少数应用程序能够理解它。只要shapefiles仅用于不存在问题的地理服务器输入,但如果启用了WFS,并且用户也将shapefiles作为getfeature输出下载,则上述设置将导致问题:如果提取的要素类型具有时间戳,则生成的shapefiles也将具有,making很难在桌面应用程序中使用生成的形状文件。根据经验,如果您还需要WFS支持,建议使用外部存储(postgis、oracle)而不是shapefile。当然,如果只需要一个日期,那么使用shapefile作为没有上述属性的索引也是可以的。

要从GeoServer GUI加载新的CoverageStore,需要执行两个步骤:

  1. 创建一个新目录,在其中存储所有栅格文件(马赛克颗粒)和三个配置文件。此目录表示 MOSAIC_DIR .

  2. 安装并设置一个DBMS实例,这个数据库就是存储马赛克索引的数据库。

Mosaic_dir和配置文件

用户可以命名和放置 MOSAIC_DIR 在他们想要的地方。

这个 MOSAIC_DIR 包含所有马赛克颗粒文件和3个必要的配置文件。文件在 .properties 格式。

备注

每个tif文件必须遵循相同的命名约定。本教程将使用coveragename timestamp.tif

在属性文件中,以键值方式指定属性:例如。 myproperty=myvalue

所需的配置文件包括:

  1. datastore.properties :包含所有相关信息,这些信息负责连接到存储马赛克空间索引的数据库

  2. indexer.properties :指定时间变量属性的名称、高程属性和属性类型。

  3. timeregex.properties :指定用于从文件名中提取时间信息的正则表达式。

所有配置文件都必须放在 MOSAIC_DIR . 颗粒图像也可以放在 MOSAIC_DIR 子文件夹。

请注意 datastore.properties 不是强制性的。该插件提供了两种访问时间序列数据的可能性:

  • 使用形状文件 以便存储颗粒指数。这是默认行为,而不提供 datastore.properties 文件。

  • 使用数据库管理系统 ,它将时间戳映射到相应的栅格源。前者使用 time 属性访问映射表中的颗粒。

对于生产安装,强烈建议使用DBMS代替shapefile以提高性能。

否则,在开发和测试环境中使用shapefile可能很有用,因为需要的配置较少。

datastore.properties

这里显示了一个适用于PostGIS的datastore.properties示例。

Parameter

Mandatory

Description

SPI

Y

用于数据存储的工厂类,例如org.geotools.data.postgis.postgisngdatastorefactory

host

Y

数据库的主机名。

port

Y

数据库的端口

数据库

Y

数据库的名称/实例。

图式

Y

数据库架构的名称。

user

Y

数据库用户。

通行证

Y

数据库密码。

松散的bbox

N 默认“false”

用于指定是否松开边界框的布尔值。

预计扩展

N 默认“true”

用于指定是否应估计数据范围的布尔值。

验证连接

N 默认“true”

用于指定是否应验证连接的布尔值。

连接超时

N 默认“20”

以分钟为单位指定超时。

编制报表

N 默认“false”

用于指定是否应使用为数据库查询准备的语句的布尔标志。这提高了性能,因为数据库查询解析器只需解析查询一次

备注

前8个参数对使用的每个DBMS有效,后4个参数可能因不同的DBMS而异。有关详细信息,请参见:geotools`geotools JDBC documentation<JDBC/索引.html>`.

indexer.properties

Parameter

Mandatory

Description

TimeAttribute

N

指定时间变量属性的名称

ElevationAttribute

N

指定高程属性的名称。

图式

Y

描述属性和数据类型之间的映射的逗号分隔序列。

PropertyCollectors

Y

指定提取器类。

警告

TimeAttribute 不是必需的参数,但出于本教程的目的是必需的。

timeregex.properties

Parameter

Mandatory

Description

正则表达式

Y

指定用于从文件中提取信息的模式

之后,您可以创建一个新的ImageMosaic数据存储。

安装和设置DBMS实例

首先,注意使用DBMS存储马赛克索引 不是强制性的 . 如果用户不创建 datastore.properties 文件在mosaic目录中,然后插件将使用 Shape文件 . 形状文件将在马赛克目录中创建。

不管怎样,尤其是对于大型数据集, 强烈建议使用DBMS .ImageMosaic插件支持所有最常用的DBMS。

需要的配置是基本的:用地理空间扩展创建一个新的空数据库,一个新的模式,并用w/r授权配置用户。

如果用户希望避免手动创建数据库,它将由ImageMosaic插件自动生成,并获取 datastore.properties 文件。

备注

如果使用PostgreSQL自动创建数据库,则用户必须检查PostgreSQL和PostGIS版本:如果第一个版本低于9.1,第二个版本低于2.0,则用户必须在 datastore.properties 文件:

create\ database\ params=WITH\ TEMPLATE\=template_postgis

(指定正确的PostGIS模板。。。在本例中: template_postgis

本教程展示了PostgreSQL 9.1和Postgis2.0的使用。

配置示例

例如,使用了一组数据,表示意大利北部蒂罗尔南部某个地区的水文数据。原始数据使用GDAL从asc格式转换为TIFF格式 gdal translate 实用工具。

对于这个运行示例,我们将创建一个名为snow的层。

如前所述,文件可以位于文件系统的任何部分。

在本教程中,选择的MOSAIC目录称为 hydroalp 并放在GEOSERVER_DATA_目录的根目录下。

配置马赛克目录:

这部分显示了一个完整的马赛克u dir配置。

数据存储。属性:

SPI=org.geotools.data.postgis.PostgisNGDataStoreFactory
host=localhost
port=5432
database=db
schema=public
user=dbuser
passwd=dbpasswd
Loose\ bbox=true
Estimated\ extends=false
validate\ connections=true
Connection\ timeout=10
preparedStatements=true

备注

如果缺少datastore.properties文件,将创建一个形状文件来保存索引。

颗粒命名约定

下面是满足前面所示规则的颗粒命名示例:

$ls hydroalp/snow/*.tif

snow/snow_20091001.tif
snow/snow_20091101.tif
snow/snow_20091201.tif
snow/snow_20100101.tif
snow/snow_20100201.tif
snow/snow_20100301.tif
snow/snow_20100401.tif
snow/snow_20100501.tif
snow/snow_20100601.tif
snow/snow_20100701.tif
snow/snow_20100801.tif
snow/snow_20100901.tif

TimeRegEx.属性:

在TimeRegex属性文件中,指定描述文件名的日期(时间)部分的模式。在本例中,它仅由以下指定的8位数字组成。

regex=[0-9]{8}

索引器.属性:

在这里,用户可以指定geoserver用于在数据库中创建索引表的信息。在本例中,时间值存储在列摄取中。

TimeAttribute=ingestion
ElevationAttribute=elevation
Schema=*the_geom:Polygon,location:String,ingestion:java.util.Date,elevation:Integer
PropertyCollectors=TimestampFileNameExtractorSPI[timeregex](ingestion)

创建并发布ImageMosaic存储:

步骤1:创建新的ImageMosaic数据存储

我们创建了一个新的栅格数据类型的数据存储,并选择了ImageMosaic。

../../_images/step_1_1.png

备注

请注意,Geoserver会创建一个与您的层名称相同的表。如果该表已经存在,则不会将其从数据库中删除,并且会显示以下错误消息。如果生成的属性文件已经存在于目录中,或者在datastore.properties文件中存在错误的连接参数,则会出现相同的消息。

../../_images/errormessage.png

步骤2:指定层

我们指定包含属性和TIFF文件的目录(路径必须以斜线结尾)并添加层。

../../_images/step_1_2.png

步骤3:设置覆盖范围参数

相关参数为allowmultiphreading并使用_jai_ImageRead。不要忘记根据TIF文件中的值指定背景值。如果要控制当多个图像与指定的时间段匹配时显示哪个颗粒,请将排序参数设置为要用于排序的变量名,后跟空格,以及降序或升序的d或a。降序值将意味着显示在请求的时间段内发生的序列中的最新图像。

../../_images/step_2_1.png

请记住,为了正确显示所提供数据集中包含的图像,需要自定义样式。

设置为默认样式 snow_style.sld 包含在数据集存档中。

有关栅格样式的详细信息,请参见第章 栅格

步骤4:设置时间属性

在“维度”选项卡中,可以指定时间属性的表示方式。

通过启用“时间”或“高程”复选框,可以指定这些尺寸的显示方式。在本例中,查询仅限于时间属性。

下面是每个演示案例的功能文档片段:

将演示文稿设置为 List ,所有马赛克时间如下:

<Dimension name="time" default="current" units="ISO8601">
        2009-10-01T00:00:00.000Z,2009-11-01T00:00:00.000Z,2009-12-01T00:00:00.000Z,2010-01-01T00:00:00.000Z,2010-02-01T00:00:00.000Z,2010-03-01T00:00:00.000Z,2010-04-01T00:00:00.000Z,2010-05-01T00:00:00.000Z,2010-06-01T00:00:00.000Z,2010-07-01T00:00:00.000Z,2010-08-01T00:00:00.000Z,2010-09-01T00:00:00.000Z,2010-10-01T00:00:00.000Z,2010-11-01T00:00:00.000Z,2010-12-01T00:00:00.000Z,2011-01-01T00:00:00.000Z,2011-02-01T00:00:00.000Z,2011-03-01T00:00:00.000Z,2011-04-01T00:00:00.000Z,2011-05-01T00:00:00.000Z,2011-06-01T00:00:00.000Z,2011-07-01T00:00:00.000Z,2011-08-01T00:00:00.000Z,2011-09-01T00:00:00.000Z
</Dimension>

将演示文稿设置为 连续间隔 仅列出开始、结束和间隔范围时间:

<Dimension name="time" default="current" units="ISO8601">
        2009-10-01T00:00:00.000Z/2011-09-01T00:00:00.000Z/P1Y11MT10H
</Dimension>

将演示文稿设置为 间隔和分辨率 允许用户指定间隔的分辨率:

<Dimension name="time" default="current" units="ISO8601">
        2009-10-01T00:00:00.000Z/2011-09-01T00:00:00.000Z/P1DT12H
</Dimension>

在这种情况下,分辨率设置为1.5天。

备注

要可视化GetCapabilities文档,请转到GeoServer主页,然后单击标记为 服务能力 .

对于本教程,Presentation属性设置为 List

../../_images/step_2_2.png

完成此步骤后,新图层将在GeoServer中可用。geoserver将在源目录中创建一个属性文件。geoserver将为mosaic索引创建一个shapefile,或者在数据库中为索引创建一个表(名称与层名称相同)。

生成的属性文件:

#-Automagically created from GeoTools-
#Sat Oct 13 10:47:08 CEST 2012
Levels=100.0,100.0
Heterogeneous=false
ElevationAttribute=elevation
TimeAttribute=ingestion
AbsolutePath=false
Name=snow
Caching=false
ExpandToRGB=false
LocationAttribute=location
SuggestedSPI=it.geosolutions.imageioimpl.plugins.tiff.TIFFImageReaderSpi
LevelsNum=1

备注

参数 Caching=false 允许用户手动更新Mosaic非常重要,方法是添加和删除Mosaic目录中的颗粒,并更新相应的数据库条目。

生成的表:

../../_images/step_2_3.png

备注

用户必须手动创建表的索引,以便加快按属性搜索。

步骤5:时间戳上的查询层:

为了在特定时刻显示地图的快照,您必须在请求中传递一个附加的时间参数,该参数带有特定的符号 &time= < 模式 >在文件存储中传递与它们对应的值。唯一的问题是时间值的模式略有不同。

例如,如果用户希望获取来自月份的积雪覆盖率图像 2009年10月、11月、12月 ,传入每个请求 &time=2009-10-01&time=2009-11-01&time=2009-12-01 .您可以在这三张图像中识别雪覆盖范围的变化。这里的蓝色意味着很多雪。

../../_images/step_3.png

从马赛克索引创建和发布图层:

在前面的步骤之后,还可以创建一个表示马赛克空间索引的层。这是处理具有高分辨率颗粒的大量镶嵌数据集时的一个有用功能,因为用户可以很容易地获得图像的足迹。在这种情况下,只呈现索引表中存储的几何图形。

步骤1:添加PostGIS数据存储:

../../_images/choose_datasource.png

并指定连接参数

../../_images/create_postgis_store.png

步骤2:添加数据库层:

从创建的数据存储中选择要作为层发布的表。

../../_images/step_4_1.png

步骤3:指定维度:

在选项卡维度中,指定时间变量属性和表示形式。

../../_images/step_4_2.png

就这样。现在也可以查询这个层。