使用用于栅格时间序列数据的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,需要执行两个步骤:
创建一个新目录,在其中存储所有栅格文件(马赛克颗粒)和三个配置文件。此目录表示 MOSAIC_DIR .
安装并设置一个DBMS实例,这个数据库就是存储马赛克索引的数据库。
Mosaic_dir和配置文件¶
用户可以命名和放置 MOSAIC_DIR 在他们想要的地方。
这个 MOSAIC_DIR 包含所有马赛克颗粒文件和3个必要的配置文件。文件在 .properties
格式。
备注
每个tif文件必须遵循相同的命名约定。本教程将使用coveragename timestamp.tif
在属性文件中,以键值方式指定属性:例如。 myproperty=myvalue
所需的配置文件包括:
datastore.properties :包含所有相关信息,这些信息负责连接到存储马赛克空间索引的数据库
indexer.properties :指定时间变量属性的名称、高程属性和属性类型。
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。

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

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

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

请记住,为了正确显示所提供数据集中包含的图像,需要自定义样式。
设置为默认样式 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

完成此步骤后,新图层将在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目录中的颗粒,并更新相应的数据库条目。
生成的表:¶

备注
用户必须手动创建表的索引,以便加快按属性搜索。
步骤5:时间戳上的查询层:¶
为了在特定时刻显示地图的快照,您必须在请求中传递一个附加的时间参数,该参数带有特定的符号 &time= < 模式 >在文件存储中传递与它们对应的值。唯一的问题是时间值的模式略有不同。
例如,如果用户希望获取来自月份的积雪覆盖率图像 2009年10月、11月、12月 ,传入每个请求 &time=2009-10-01 , &time=2009-11-01 和 &time=2009-12-01 .您可以在这三张图像中识别雪覆盖范围的变化。这里的蓝色意味着很多雪。

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

并指定连接参数

步骤2:添加数据库层:¶
从创建的数据存储中选择要作为层发布的表。

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

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