使用ImageMosaic扩展

本教程将向您展示如何配置和发布ImageMosaic存储和覆盖,然后是一些配置示例。

在geoserver中配置覆盖范围

这是一个非常类似于创建FeatureType的过程。更具体地说,必须执行以下部分中突出显示的步骤:

新建商店

  1. Data Panel ‣ Stores 然后点击 Add new Store .

  2. 选择 ImageMosaic 在下面 Raster Data Source

    ../../../_images/imagemosaiccreate.png

    栅格数据存储列表中的ImageMosaic

  3. 为了创建新的马赛克,需要选择工作区并将名称存储在 Basic Store Info 节,以及 Connection Parameters 第节。有效的URL包括:

    • shapefile索引的绝对路径,或包含shapefile索引的目录。

    • 配置文件的绝对路径 (*.properties )或包含配置文件的目录。如果 ``datastore.properties`indexer.properties 存在,它们应该与此配置文件位于同一目录中。

    • 要镶嵌的文件所在目录的绝对路径。在这种情况下,geoserver通过检查给定目录和任何子目录中的数据,自动创建所需的mosaic文件(.dbf、.prj、.properties、.shp和.shx)。

  4. 点击 Save

    ../../../_images/imagemosaicconfigure.png

    配置ImageMosaic数据存储

创建新的覆盖范围

  1. 引导到 Data Panel ‣ Layers 然后点击 Add a new resource .

  2. 选择您刚创建的商店的名称:

    ../../../_images/vito_newlayerchoser.png

    图层选择器

  3. 单击要配置的层,将显示覆盖率编辑器:

    ../../../_images/vito_coverageeditor.png

    覆盖率编辑器

  4. 确保有一个值 Native SRS ,然后单击 Submit 按钮。如果 Native CRSUNKNOWN ,您必须在 Declared SRS 字段。

  5. 点击 Save .

  6. 使用 Layer Preview 去看马赛克。

警告

如果创建的层看起来都是黑色的,则可能是geoserver在提供的索引中没有找到任何可接受的颗粒。形状文件索引也可能是空的(在提供的目录中找不到颗粒),或者可能是形状文件索引中颗粒的路径不正确,如果将现有索引(使用绝对路径)移动到其他位置,则可能会发生这种情况。如果shapefile索引路径不正确,则可以使用编辑器打开和修复dbf文件。或者,您可以删除索引,并让geoserver从根目录重新创建索引。

配置示例

下面是一些马赛克配置的例子,演示如何利用图像马赛克参数。

DEM/水深测量

这样的马赛克可以用来提供大量的数据来表示高度或深度,因此不直接指定颜色(它需要一个SLD来生成图片)。在我们的例子中,我们有一个DEM数据集,它由一组原始的geotiff文件组成。

第一个操作是创建CoverageStore,例如,在 URL 字段。

在“覆盖率编辑器发布”选项卡中,可以指定 dem 默认样式,用于表示马赛克的可视化样式。以下是示例样式:

<?xml version="1.0" encoding="ISO-8859-1"?>
<StyledLayerDescriptor version="1.0.0"
  xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc"
  xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.opengis.net/sld      http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd">
  <NamedLayer>
    <Name>gtopo</Name>
    <UserStyle>
      <Name>dem</Name>
      <Title>Simple DEM style</Title>
      <Abstract>Classic elevation color progression</Abstract>
      <FeatureTypeStyle>
        <Rule>
          <RasterSymbolizer>
            <Opacity>1.0</Opacity>
            <ColorMap>
              <ColorMapEntry color="#000000" quantity="-9999" label="nodata" opacity="1.0" />
              <ColorMapEntry color="#AAFFAA" quantity="0" label="values" />
              <ColorMapEntry color="#00FF00" quantity="1000" label="values" />
              <ColorMapEntry color="#FFFF00" quantity="1200" label="values" />
              <ColorMapEntry color="#FF7F00" quantity="1400" label="values" />
              <ColorMapEntry color="#BF7F3F" quantity="1600" label="values" />
              <ColorMapEntry color="#000000" quantity="2000" label="values" />
            </ColorMap>
          </RasterSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

通过这种方式,您可以清楚地区分组成马赛克的数据集的不同间隔,如背景和“nodata”区域。

../../../_images/vito_config_1.png

备注

样品马赛克上的“nodata”是-9999。马赛克的默认背景值为0.0。

结果如下:

../../../_images/vito_1.png

基本配置

通过适当地设置其他配置参数,可以改善马赛克的外观和性能。例如,我们可以:

  • 使“nodata”区域透明,与真实数据一致。为了实现这一点,我们需要在 dem 样式设置为 0.0 并设置 BackgroundValues 参数到 -9999 这样,空白区域将填充此值。结果如下:

    ../../../_images/vito_2.png

    高级配置

  • 允许多线程颗粒加载。通过设置 AllowMultiThreading 参数到 true ,geoserver将使用多个线程并行加载颗粒,从而提高某些架构的性能。

配置参数如下:

参数

价值

MaxAllowedTiles

2147483647

BackgroundValues

-9999

OutputTransparentColor

“无颜色”

InputTransparentColor

“无颜色”

AllowMultiThreading

USE_JAI_IMAGEREAD

SUGGESTED_TILE_SIZE

512512个

航空影像

在这个例子中,我们将创建一个马赛克,它将提供航空图像,特别是RGB geotiff。因为这是可视数据,所以在覆盖率编辑器中可以使用 raster 样式,它只是一个存根SLD,用于指示GeoServer栅格渲染器不要在颜色管理方面执行任何特定操作:

<?xml version="1.0" encoding="ISO-8859-1"?>
<StyledLayerDescriptor version="1.0.0"
  xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc"
  xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.opengis.net/sld      http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd">
  <NamedLayer>
    <Name>raster</Name>
    <UserStyle>
      <Name>raster</Name>
      <Title>Raster</Title>
      <Abstract>A sample style for rasters, good for displaying imagery       </Abstract>
      <FeatureTypeStyle>
        <FeatureTypeName>Feature</FeatureTypeName>
        <Rule>
          <RasterSymbolizer>
            <Opacity>1.0</Opacity>
          </RasterSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

结果如下:

../../../_images/prato_1.png

基本配置

备注

这些难看的黑色区域是将默认马赛克参数应用于不完全覆盖其边界框的马赛克的结果。bbox中未包含数据的区域在每个波段上默认为0。因为这个马赛克是RGB,我们可以简单地设置 OutputTransparentColor0,0,0 以获得bbox的透明填充。

各种参数设置如下:

参数

价值

MaxAllowedTiles

2147483647

BackgroundValues

(默认)

OutputTransparentColor

#百万

InputTransparentColor

“无颜色”

AllowMultiThreading

USE_JAI_IMAGEREAD

SUGGESTED_TILE_SIZE

512512个

结果如下:

../../../_images/prato_2.png

高级配置

扫描的地图

在本例中,我们想展示如何通过地理服务器马赛克提供扫描地图(主要是黑白图像)。

在覆盖率编辑器中,您可以使用 raster 因为不需要使用任何高级的刺刀符号功能。

结果如下。

../../../_images/iacovella_1.png

基本配置

这幅由两个单一颗粒组成的镶嵌图显示了一个典型的例子,颗粒的“Nodata”领区域重叠,如上图所示。在这种情况下,我们可以使用 InputTransparentColor 在叠加过程中使领口区域消失的参数-在这种情况下,使用 InputTransparentColor 属于 #FFFFFF .

最终配置参数如下:

参数

价值

MaxAllowedTiles

2147483647

BackgroundValues

(默认)

OutputTransparentColor

“无颜色”

InputTransparentColor

#ffffff公司

AllowMultiThreading

USE_JAI_IMAGEREAD

SUGGESTED_TILE_SIZE

512512个

结果是:

../../../_images/iacovella_2.png

高级配置

动态图像

马赛克不需要是静态的。它可以包含改变、添加或删除的颗粒。在这个例子中,我们将创建一个随时间变化的马赛克。

  1. 以标准方式创建马赛克。(具体配置不重要。)

../../../_images/tutorial_dynamic1.png

这个马赛克包含5个颗粒。注意 InputTransparentColor 设置为 #FFFFFF 在这里。

要添加新的颗粒,最初创建马赛克时创建的索引需要重新生成。有两种方法可以做到这一点:

  • 通过文件系统手动

  • 通过 REST 界面

要通过文件系统更新ImageMosaic,请执行以下操作:

  1. 通过将新文件复制到适当的位置来更新马赛克的内容。(可以接受子目录。)

  2. 删除索引文件。这些文件包含在包含马赛克文件的顶级目录中,包括(但不限于)以下内容:

    • <mosaic_name>.dbf

    • <mosaic_name>.fix

    • <mosaic_name>.prj

    • <mosaic_name>.properties

    • <mosaic_name>.shp

    • <mosaic_name>.shx

  3. (可选,但推荐) 在geoserver中编辑层定义,确保更新边界框信息(如果更改)。

  4. 保存层。将重新创建索引。

../../../_images/tutorial_dynamic2.png

这个马赛克包含9个颗粒

备注

有关 上传新图像马赛克 .

重投影多分辨率图像

一般来说,我们希望有最高分辨率的颗粒显示在“顶部”,而较低分辨率的颗粒根据需要填充空隙。

在这个例子中,我们将提供具有不同分辨率的重叠颗粒。此外,我们将混合分辨率,这样高分辨率颗粒被重新注入以匹配低分辨率颗粒的分辨率。

  1. 在Coverage编辑器中,使用基本 raster 风格。

  2. 在geoserver中创建马赛克。

  3. 一个重要的配置设置是 SORTING 层的参数。为了在顶部看到最高分辨率的图像(典型情况),必须将其设置为 resolution A .(对于顶部分辨率最低的情况,使用 resolution D

  4. 进行任何其他配置更改。

  5. 此外,为了在一个马赛克中允许多个CRS,一个 indexer.properties 需要创建文件。使用以下内容:

    GranuleAcceptors=org.geotools.gce.imagemosaic.acceptors.HeterogeneousCRSAcceptorFactory
    GranuleHandler=org.geotools.gce.imagemosaic.granulehandler.ReprojectingGranuleHandlerFactory
    HeterogeneousCRS=true
    MosaicCRS=EPSG\:4326
    PropertyCollectors=CRSExtractorSPI(crs),ResolutionExtractorSPI(resolution)
    Schema=*the_geom:Polygon,location:String,crs:String,resolution:String
    

    mosaic crs属性不是强制性的,但最好设置一个可预测的目标crs,所有的颗粒足迹都可以重新投射到其中,否则马赛克机器将使用第一个索引颗粒的crs。

  6. 将此文件与索引文件一起保存在mosaic目录的根目录中。结果如下:

    ../../../_images/tutorial_reproj_artifact.png

    颗粒重叠特写(右侧高分辨率颗粒)

  7. 要删除重投影工件(上面显示为黑色区域),请编辑要设置的层配置 InputTransparentColor#000000 .

    ../../../_images/tutorial_reproj_noartifact.png

    颗粒重叠特写(右侧高分辨率颗粒)

引用在geoserver中配置的数据存储

可以使马赛克引用现有的数据存储。这个 ``datastore.properties`` 在这种情况下,文件将只包含一个或两个属性,引用要通过 StoreName 属性。对于简单的情况,例如PostGIS存储,以下内容就足够了:

StoreName=workspace:storename

对于Oracle或H2,最好也指定SPI,以便通知Mosaic它需要解决存储的特定限制(例如强制大写属性使用、属性名称长度限制等)::

StoreName=workspace:storename
SPI=org.geotools.data.oracle.OracleNGDataStoreFactory

如果图像马赛克可以创建索引表并使用目录名作为表名执行正常索引,上述内容就足够了。如果需要使用特定的表名,请添加 ``indexer.properties`` 指定 TypeName 属性,例如:

typename=我的马赛克类型名

如果索引“table”已经存在,那么 ``indexer.properties`` 需要文件,内容如下:

UseExistingSchema=true
TypeName=nameOfTheFeatureTypeContainingTheIndex
AbsolutePath=true

上述假设 location 属性提供到马赛克颗粒的绝对路径,而不是相对于马赛克配置文件目录的路径。