今天我们讲一下使用 mapserver 发布 OGC 的三大网络地图服务的最后一个 - WCS,wcs 主要是规定了通过网络提供访问 coverage 数据的标准,那么什么是 coverage 数据呢? 狭义的说,可以认为 mapserver wcs 中发布的 coverage 数据就是卫星影像 或者 dem。

广义上说,coverage 数据主要是指时空现象的数字表示,可以是多维的,例如一维的传感器时间序列信号,二维的卫星影像,三维的 x/y/t 格式的“图像时间序列”,或者 x/y/z 格式的三维地理断层数据,四维的 x/y/z/t 格式的数据,数据中既包含 x、y、z坐标信息,还包含时刻信息。常见的 coverage 数据有:航拍图、土地覆盖数据、DEM 等,常用的数据格式有:GeoTIFF(扩展名为 .tif)、NetCDF、HDF-EOS 或者 NITF。


文中名词: openlayers3 === ol3


本文尝试发布北京地区的 pm10 分布情况,数据下载于“地理空间信息云”,本文的数据经过在软件中重新渲染,并且重新投影到 epsg:3857 坐标系下。发布后的结果如下:

mapserver 发布 WCS 配置

与配置 wms 和 wfs 一样,mapserver 发布 wcs 同样需要修改对应的 mapfile 文件,增加全局的 WEB 对象的 METADATA 子对象的键值对,但是 wms 和 wfs 都是针对矢量数据,如 ESRI 的 shapefile 格式,而 wcs 主要是针对栅格格式,所以 mapfile 中图层 type 需要设置栅格,数据源也要使用栅格格式。所以,mapfile 文件需要满足如下条件,对应的图层服务才会拥有 wcs 的能力:

  1. 图层的数据源是栅格(raster)数据(如 GeoTIFF 或者 Erdas Imagine 格式)
  2. 图层名(layer name)必须设置,图层类型(layer type)值必须是 RASTER
  3. metadata
    • WEB metadata 或者 LAYER metadata 的 “wcs_enable_request” 参数必须设置
    • WEB metadata 的 “wcs_label” 参数必须设置
    • LAYER 对象的 metadata 中,”wcs_label” 、”wcs_rangeset_name” 、”wcs_rangeset_label” 必须设置
  4. MAP对象、 LAYER对象的 PROJECTION 对象都必须设置,这里LAYER的 PROJECTION 并不会继承 MAP,所以 LAYER 的 PROJECTION 也必须设置
  5. LAYER 设置为接受 wcs 的相关请求,这个有点抽象,一般是通过 “wcs_enable_request” 参数设置的

以上就是 mapfile 需要满足的要求,下面我们通过一个例子来实现针对特定图层发布 wcs。

wcs mapfile 例子

以下的例子是发布 wcs,mapfile 需要的最小配置,有这些配置,wcs 就可以发布成功。当然,mapfile 中还规定了很多参数,wcs 的规范中也规定了很多参数,这些参数可以通过查看 mapserver 的 mapfile 文档: http://mapserver.org/mapfile/index.html,和 wcs 规范: http://www.opengeospatial.org/standards/wcs。

# 发布 WCS 的 mapfile 最小配置文件
# 原文地址: http://blog.csdn.net/qingyafan/article/details/50434132
# @author QINGYAFAN
# @date 2016-2-28MAPNAME wcs_sampleEXTENT 12847916.7660075146704912 4785268.8040398322045803 13079930.6709103845059872 5021045.0965897748246789WEBMETADATA"wcs_enable_request"    "*""wcs_label" "tiff wcs"ENDENDLAYERNAME "wcs_layer"TYPE RASTERDATA "geodata/pm10-color-3857.tif"METADATA"wcs_label" "pm10""wcs_rangeset_name" "pm""wcs_rangeset_label"    "pm10"ENDPROJECTION"init=epsg:3857"ENDEND
END

其实,配置文件中的 EXTENT 参数实际上也可以省略,如果省略, mapserver 会计算出其范围,反之,指定这个参数,那么就会省去每次计算的时间。

调用服务(ol3)

我们使用 openlayers3 来测试调用,我们使用切片图层类型来进行调用,原因是这样的加载速度会快一点。代码如下:

/** * 请求 WCS 的 ol3 调用代码* 原文地址: http://blog.csdn.net/qingyafan/article/details/50434132* @author QINGYAFAN* @date 2016-2-28* /var wcs_layer = new ol.layer.Tile({title: 'mapserver-geotiff',extent: [12847916.7660075146704912,4785268.8040398322045803,13079930.6709103845059872,5021045.0965897748246789],source : new ol.source.TileWMS({url: "http://127.0.0.1:8081/cgi-bin/mapserv.exe?",params: {'map':'C:/xxx/mapfile/wcs_sample.map','SERVICE':'WCS','VERSION':'1.0.0','REQUEST':'GetCoverage','coverage': 'wcs_layer','BBOX':'4785268.8040398322045803,12847916.7660075146704912,5021045.0965897748246789,13079930.6709103845059872','CRS':'EPSG:3857','FORMAT':'image/png'},serverType: 'mapserver'})
});
map.addLayer( wcs_layer );

看完代码,有些朋友可能会注意到,我们的 layer source 使用了 TileWMS,为什么不用 wcs,反而用了 wms 相关呢?其实,第一,是因为 ol3 并没有直接关于 wcs 的类;其次,wcs 的请求方式和 wms 请求方式是一致的,一般是通过 http get 方式,而 ol.source.TileWMS 主要是根据指定的参数构造一个 http get 请求 url,使用异步通信的方式发出请求并接收返回的结果,外层的 ol.layer.Tile 进行结果的展示。

需要注意,请求中的 ‘url’ 参数是指定 mapserv.exe 的位置,一般是放置在 httpd 的 cgi-bin 目录; ‘map’ 参数必须要指定绝对地址,因为 mapserver 只接受绝对位置的 mapfile 文件解析。

调用后的结果就是文章开始时的样子。

延伸

wcs 包含三个操作,以上的调用只是利用了 getCoverage,其余两个操作是: GetCapabilities 和 DescribeCoverage,主要是获取 wcs 的元数据, coverage 的描述性数据。而且 wcs 有三个历史版本,这里使用的 1.0.0,也就是最早的版本,其余的两个版本是 1.1.0 和 2.0,这里不再延伸其区别,有兴趣的可以去看看相关规范和文章。

总结

这篇文章里,我主要介绍了使用 mapserver 发布卫星影像(或者说栅格图片-地图,又或者说 coverage data),发布这些数据的网络服务需要 OGC 的 wcs 规范,这个规范就是针对于发布 coverage data 网络服务。因此,需要进一步的配置和调用说明,可以参考 mapserver 和 ogc wcs 规范。

文中的例子,我会更新到我的 GitHub : https://github.com/QingyaFan。

好的,就写到这里,有什么问题,可以在文章下面留言或者给我发邮件。

MapServer 之 发布网络覆盖数据服务(WCS-Web Coverage Service)相关推荐

  1. WCS(Web Coverage Service):Geoserver

  2. MapServer 之 发布网络地图服务(WMS-Web Map Service)

    一.环境搭建 操作系统:Windows 7 x64: 地图服务器:MapServer 6.40: Web服务器:Apache httpd 2.2: 空间数据库:PostgreSQL/PostGIS 9 ...

  3. ArcGIS10.6 通过ArcMap发布二维数据服务。

    ArcGIS版本基本每年都会更新,原来一直用10.2,在ArcMap中发布服务: 最近安装10.6整套系统,发现在ArcMap中输入http:id:6080/arcgis  输入用户名,密码 无法登录 ...

  4. OGC 网络数据服务的类型与操作+实现GeoServer软件在Apache+Tomcat的部署+OGC数据服务WMS、WFS和WCS的发布

    目录 一.OGC网络数据服务的类型与操作 二.GeoServer在Apache Tomcat上的部署 三.OGC数据服务WMS.WFS和WCS的发布 一.OGC网络数据服务的类型与操作 1.OGC是什 ...

  5. Geoserver 图层数据服务发布(.shp)

    Geoserver 图层数据服务发布(.shp) Geoserver是一个功能齐全,遵循OGC开放标准的开源WFS-T和WMS服务器.利用Geoserver可以把数据作为maps/images来发布( ...

  6. (WPS) 网络地理信息处理服务

    WPS 标准为网络地理信息处理服务提供了标准化的输入和输出. OGC® Web Processing Service (WPS) 标准描述了如何通过远程的任何算法和模型处理获得地理空间的栅格或矢量信息 ...

  7. 区块链数据服务 - BDS

    区块链数据服务(Blockchain Data Service,BDS)是京东云区块链产品部发推出的,其将区块链的链式.非结构化数据通过技术手段进行结构化存储,实时同步到高性能数据仓库中. 用户可以通 ...

  8. 业内首发 | 区块链数据服务 - BDS

    区块链数据服务(Blockchain Data Service,BDS)是京东云区块链产品部发推出的,其将区块链的链式.非结构化数据通过技术手段进行结构化存储,实时同步到高性能数据仓库中. 用户可以通 ...

  9. 在ASP.NET Core中使用Apworks开发数据服务:对HAL的支持

    HAL,全称为Hypertext Application Language,它是一种简单的数据格式,它能以一种简单.统一的形式,在API中引入超链接特性,使得API的可发现性(discoverable ...

最新文章

  1. golang ide 简介
  2. golang中的byte与rune
  3. (chap1 网络基础知识)网络的构成要素:(4-6)集线器和3层交换机
  4. nyoj68三点顺序
  5. VMware下Windows Server 2012添加新磁盘
  6. oracle 11g segment,11g视图dba_segments中增加了一个有用的segment_subtype字段!
  7. OJ1028: I love 闰年!
  8. paip. c++ 调用.net dll 最好方式powershell 使用总结.
  9. cmake 指定平台编译arm64_Arm V7 V8处理器编译Target小提示
  10. 推箱子视频教学Java,推箱子游戏教学视频
  11. NFC Reader Tool 蓝牙NFC读写器使用教学
  12. 简单的C语言房贷计算器
  13. VAX 过期重新安装办法。
  14. 工程制图与计算机绘图试卷A,工程制图与计算机绘图第4章
  15. bzoj4568-幸运数字
  16. IP地址冲突解决方案,局域网IP地址冲突如何解决?
  17. oracle中imp命令详解
  18. Git 分支操作、Git 团队协作机制、GitHub 操作
  19. Tunnel端口配置
  20. 洛谷 P1862 输油管道问题

热门文章

  1. win10系统使用clover时程序崩溃的解决
  2. STM32F10x程序移植到GD32E10x
  3. 王道计算机考研408计算机组成原理汇总(上)
  4. promise简单理解
  5. c语言随机数加减乘除在100以内,随机实现100以内的的加减乘除运算
  6. 以跨链技术引领区块链3.0时代,aelf主网正式上线!
  7. 西门子s7 200smart与台达VFD M变频器通讯 触摸屏与plc以太网通讯,PLC与变频器通讯485口相连
  8. 利用pyecharts绘制微博粉丝地区分布图
  9. UX用户体验设计十大重要原则 上
  10. 对于天天酷跑项目的思路基于java