可选的MapServer支持

使用WPS服务处理地理空间数据非常有用。将结果直接发布为wms、wfs或wcs资源更加方便。这是可能的,因为 ZOO-Project 1.3 使用 可选的MapServer支持 .因此,后者允许使用 动物园内核 本节详细介绍的具体内部机制。

注解

MapServer logo MapServer 是一个开源的wms/wfs/wcs服务器。通过阅读 documentation .

它是如何工作的?

如果请求 mimeType=image/png 发送到 动物园内核 ,后者将检测到 使用映射服务器 选项设置为“真”,它将自动:

  • 使用执行服务 <Default> 块定义(这些值必须由 GDAL

  • 将结果输出存储在磁盘上(在 [main] > dataPath 目录)

  • 写一篇 mapfile (在 [main] > dataPath directory) using the MapServer C-API(这将设置WMS和WFS服务)。

一旦激活了MapServer支持,就不需要修改现有的WPS服务源代码。只需编辑它们各自的 Zoo服务配置文件 相应地归档。

注解

在矢量数据源输出的情况下,默认情况下,WMS和WFS配置都包含在生成的映射文件中。

注解

在栅格数据源输出的情况下,默认情况下,WMS和WCS配置都包含在生成的映射文件中。

根据请求,Zoo内核能够返回位置头和不同的请求类型:

在这种情况下,zoo内核将以kvp的形式返回getmap/getfeature/getcoverage请求。 href 结果。

在本例中,zoo kernel将返回getmap/getfeature/getcoverage请求的结果,作为上一个案例中使用的href的kvp。

在这种情况下,Zoo内核将在特定的位置头中将getmap/getfeature/getcoverage请求作为kvp返回,这意味着浏览器应该直接请求mapserver。

不管默认输出是什么 mimetype类型 由WPS服务返回,如果 使用映射服务器 在运行时找到选项。例如,如果 <Default><Supported> 块在zoo服务配置文件中找到,如下所示,这意味着服务默认返回GML3.1.0功能。

<Default>
 mimeType = text/xml
 encoding = UTF-8
 schema = http://schemas.opengis.net/gml/3.1.0/base/feature.xsd
</Default>
<Supported>
 mimeType = image/png
 useMapserver = true
</Supported>

安装和配置

按照下面描述的步骤激活Zoo项目可选的MapServer支持。

先决条件

首先通过查看SVN下载最新的动物园内核。使用下面的命令执行您以前签出的目录(在本例中,我们将使用 $PREV_SVN_CO 以设计此目录)。

svn checkout http://svn.zoo-project.org/svn/trunk/ $PREV_SVN_CO
cd $PREV_SVN_CO

然后解压缩MapServer存档(即 mapserver-6.0.1.tar.bz2 )进入 /tmp/zoo-ms-src ,并使用以下命令编译它:

cd /tmp/zoo-ms-src/mapserver-6.0.1
./configure --with-ogr=/usr/bin/gdal-config --with-gdal=/usr/bin/gdal-config \
               --with-proj --with-curl --with-sos --with-wfsclient --with-wmsclient \
               --with-wcs --with-wfs --with-postgis --with-kml=yes --with-geos \
               --with-xml --with-xslt --with-threads --with-cairo
make
cp mapserv /usr/lib/cgi-bin

完成后,使用来自 $PREV_SVN_CO 目录,使用以下命令:

cd zoo-kernel
autoconf
./configure --with-python --with-mapserver=/tmp/zoo-ms-src/mapserver-6.0.1
make
sudo make install

主配置文件

打开并编辑 /usr/lib/cgi-bin/main.cfg 文件中添加以下内容 [main] 章节:

dataPath = /var/www/temp/
mapserverAddress=http://localhost/cgi-bin/mapserv

您还可以将以下行添加到 [main] 如果要对多边形、直线和点向量层使用默认样式,请选择“剖面”。

msStylePoly=STYLE COLOR 202 109 19 OUTLINECOLOR 105 105 105 WIDTH 3 END
msStyleLine=STYLE OUTLINECOLOR 202 109 19 WIDTH 3 END
msStylePoint=STYLE COLOR 202 109 19 OUTLINECOLOR 105 105 105 SYMBOL 0 SIZE 14 END

这个 dataPath 目录是必需的,必须属于Apache用户。

mkdir /var/www/temp/
chown -r apache:apache /var/www/temp/

A symbols.sym 此目录中需要文件。创建并在其中添加以下内容:

SYMBOLSET
SYMBOL
  NAME "circle"
  TYPE ellipse
  FILLED true
  POINTS
    1 1
  END
END
END

注解

WMS服务输出只需要一个符号定义(具有任何名称)。

此时将激活Zoo项目可选的MapServer支持。别忘了加上 mapserverAddressmsOgcVersion 参数到 main.cfg 文件以指定到MapServer的路径和服务使用的OGC WebService版本。

警告

动物园内核将发生故障(检查 NULL 值应更正此行为)如果 mapserverAddress 找不到参数

服务配置文件

使用映射服务器

为了激活特定服务的mapserver wms/wfs/wcs输出,请 useMapserver 参数必须添加到 <Default><Supported> 服务区 services-zcfg .如果 useMapserver=true ,这意味着该服务的输出结果是与gdal兼容的数据源,并且您希望它由MapServer自动发布为wms、wfs或wcs。

当在 <Default><Supported> 块,然后您必须知道对应的mimetype是什么:

  • text/xml:表示将通过WFS GetFeature请求(默认协议版本1.1.0)访问输出数据。

  • image/tiff:表示将通过WCS getcoverge请求访问输出数据(默认协议版本2.0.0)

  • 与usemapserver选项耦合的任何其他mimetype:意味着输出数据将通过WMS getmap请求(默认协议版本1.3.0)进行访问。您可以通过向MapServer发送getCapabilities请求来检查支持的输出mimetype。

您得到相同的可选参数 msOgcVersion 至于 main.cfg .这将指定这是服务要使用的特定协议版本(因此也可以将本地设置为服务,而不是全局设置)。

造型

您有不同的选项来定义使用服务返回的数据创建的层的样式。

MS样式

可选的 msStyle 参数还可用于定义自定义MapServer样式块(仅用于矢量数据源),如下所示:

msStyle = STYLE COLOR 125 0 105 OUTLINECOLOR 0 0 0 WIDTH 3 END
理科硕士

如果WPS服务输出单波段栅格文件,则可以添加 msClassify 参数并将其设置为 true 在输出完成数据中 <Default><Supported> 其zcfg文件的节点。这允许Zoo内核使用自己的默认样式定义,以便使用等效间隔对栅格进行分类。

msClassify = true
M包括

如果您想使用另一个使用服务结果的层,例如 heatmap ,然后您可以使用 msIncludemsLayer 输出中的选项 ComplexData <Default><Supported> 其zcfg文件的节点。下面是将这两个选项用于关联映射文件的示例。

msInclude = /var/data/template.map
msLayer = heatmap

您可以在下面找到一个示例 /var/data/template.map

MAP
  SIZE 1000 500
  EXTENT -180 -90 180 90
  NAME "test heat"
  IMAGETYPE "png"

  WEB
    METADATA
      "ows_srs" "epsg:4326  epsg:3857 epsg:900913"
      "ows_enable_request" "*"
    END # METADATA
  END # WEB

  PROJECTION
    "+init=epsg:4326"
  END # PROJECTION

  LAYER
    NAME "heatmap" # Corresponding to the msLayer defined
    TYPE raster
    CONNECTIONTYPE kerneldensity
    CONNECTION "Result"
    STATUS on
    PROCESSING "RANGE_COLORSPACE=HSL"
    PROCESSING "KERNELDENSITY_RADIUS=20"
    PROCESSING "KERNELDENSITY_COMPUTE_BORDERS=ON"
    PROCESSING "KERNELDENSITY_NORMALIZATION=AUTO"
    OFFSITE 0 0 0
    CLASS
      STYLE
        COLORRANGE  "#0000ff00"  "#0000ffff"
        DATARANGE 0 32
      END # STYLE
      STYLE
        COLORRANGE  "#0000ffff"  "#ff0000ff"
        DATARANGE 32 255
      END # STYLE
    END # CLASS
  END # LAYER

  LAYER
    NAME "points"
    STATUS on
    TYPE POINT
    #DATA "/Library/WebServer/cache//ef76ee6642c1ea704e847e28120ba1ca.zca"
  END # LAYER
END # MAPFILE

例子

一个例子 Zoo服务配置文件 为可选的MapServer支持配置的文件如下所示:

<Default>
 mimeType = text/xml
 encoding = UTF-8
 schema = http://schemas.opengis.net/gml/3.1.0/base/feature.xsd
 useMapserver = true
</Default>
<Supported>
 mimeType = image/png
 useMapserver = true
 asReference = true
 msStyle = STYLE COLOR 125 0 105 OUTLINECOLOR 0 0 0 WIDTH 3 END
</Supported>
<Supported>
 mimeType = application/vnd.google-earth.kmz
 useMapserver = true
 asReference = true
 msStyle = STYLE COLOR 125 0 105 OUTLINECOLOR 0 0 0 WIDTH 3 END
</Supported>
<Supported>
 mimeType = image/tif
 useMapserver = true
 asReference = true
 msClassify = true
</Supported>

在本例中,默认输出 mimeTypeimage/png ,因此将返回wms getmap请求,或者 image/tiff 将作为wcs getcoverge请求返回。

测试请求

可以使用任何服务测试可选的MapServer支持。简单 HelloPy 服务用于以下示例请求。

注解

以下示例需要包含shapefile(http://localhost/data/data.zip)和tif文件(http://localhost/data/demo.tif)的zip文件

按WFS GetFeatures请求访问远程压缩形状文件:

http://localhost/cgi-bin/zoo_loader.cgi?request=Execute&service=WPS&version=1.0.0&Identifier=HelloPy&DataInputs=a=Reference@xlink:href=http://localhost/data/data.zip&ResponseDocument=Result@asReference=true@mimetype=text/xml

以wms getmap请求的形式访问远程压缩形状文件:

http://localhost/cgi-bin/zoo_loader.cgi?request=Execute&service=WPS&version=1.0.0&Identifier=HelloPy&DataInputs=a=Reference@xlink:href=http://localhost/data/data.zip&ResponseDocument=Result@asReference=true@mimetype=image/png

访问远程TIFF作为WMS GETMAP请求:

http://localhost/cgi-bin/zoo_loader.cgi?request=Execute&service=WPS&version=1.0.0&Identifier=HelloPy&DataInputs=a=Reference@xlink:href=http://localhost/data/data.tiff&ResponseDocument=Result@asReference=true@mimetype=image/png

访问远程TIFF作为wcs getmap请求:

http://localhost/cgi-bin/zoo_loader.cgi?request=Execute&service=WPS&version=1.0.0&Identifier=HelloPy&DataInputs=a=Reference@xlink:href=http://localhost/data/data.tiff&ResponseDocument=Result@asReference=true@mimetype=image/tiff