MapServer 之 mapfile 配置文件
来源:互联网 发布:linux samba 登录 编辑:程序博客网 时间:2024/04/29 19:46
MapServer 是一个地图渲染程序,简单的说,就是在服务器端将空间数据渲染成地图的程序,遵循基本的 CGI 规范,接受输入,返回输出。它的输入参数并不是通过 url 传递,而是由 mapfile 指定,mapfile 是一个文本文件,后缀名为 .map,严格的说,这个 mapfile 是一个配置文件,告诉 MapServer 主程序(也就是渲染程序)输入的空间数据的位置、输出地图的格式,样式等等。如图可以看出其原理:
在使用 MapServer 中,最重要和最核心的就是根据数据本身与输出地图需求配置 mapfile 文件,没有之一,所以掌握 mapfile 的配置是使用 MapServer 的必备技能。通过配置 MapServer 的 mapfile 配置文件,就可以通过 MapServer 发布 WMS、WFS、WCS 和 SOS 等服务了,下图便是调用发布的 WMS 地图服务效果图:
看完效果图,是不是也有跃跃欲试的想法呢?但是,任何事情,想要做好,都要从基础做起,基础可能枯燥,但是是必经之路。这里的基础就是基本的地图和GIS知识,和 配置 mapfile 的知识,当然,可能有人不太了解地图和GIS的基础知识,不用着急,即使不太懂,你也可以看懂这篇文章涉及的内容,而配置 mapfile 的基础知识才是我们要学习的。
一、 mapfile 基础知识
mapfile 是一个类似 XML 格式的文本文件,又开始标签和闭合标签,标签不区分大小写,最好是写大写,这样容易区分标签和内容。一个 mapfile 文件最外边的标签是 MAP
,表示的是地图对象,一个地图对象对应着一个或多个图层对象 - LAYER
,一个图层包含数据和输出的样式。MapServer 是从上到下按顺序读取并执行 mapfile 文件的配置的,所以在有多个 LAYER
对象的时候,在前面的 LAYER
会先绘制,后面的 LAYER
后绘制,会叠加在先绘制的图层上面,所以一般把面状的有背景色的图层放于前面,包含点或者线状地物的图层放到后面。这样点、线图层就会在面上,这样绘制的地图才不会有遮挡。
每个对象,都有很多的配置参数,这些配置的参数就不必闭合了,闭合的都是对象。MAP
对象是必不可少的,LAYER
对象是可见的地图图层,也必须指定,同时 WEB
对象定义了 MapServer 生成的地图的存储位置和服务类型及其配置。
1.1 MAP
对象
MAP
对象是以 MAP 开头,以 END 结尾的,有很多配置选项,主要的有:
- NAME,地图的名字;
- PROJECTION,地图使用的投影坐标系;
- IMAGECOLOR,[r] [g] [b],设置地图的背景色;
- WEB,配置 MapServer 临时放置生成的地图图片的地址;
- LAYER,图层,是 MAP 对象的子对象;
- STATUS,控制地图是否处于激活状态;
1.2 PROJECTION
对象
定义地图所处的坐标系,这个也是必要的对象,否则地图将不能正常显示。
1.3 WEB
对象
- IAMGEPATH,存放生成的地图的图片和临时文件的路径;
- IMAGEURL,IMAGEPATH的基路径;
- METADATA,配置元数据,主要用来支持 OGC 的服务;
1.4 LAYER
对象
- NAME,字符串,图层名称;
- PROJECTION,字符串,图层数据所在的坐标系;
- METADATA,要配置的服务的配置对象;
- STATUS,图层是否是激活状态;
- CONNECTIONTYPE,连接的类型,默认是本地,也就是本地磁盘文件;
- CONNECTION,连接数据库的字符串,在图层数据在数据库中时候才会使用;
- DATA,数据存储位置路径或者 SQL 查询语句。
二、 mapfile 实例
我们看一个配置好的 MapServer WMS 服务的 mapfile 文件,用记事本打开就是如下的文本。该例子中主要的对象有 MAP、 PROJECTION、 WEB、 LAYER,所有的对象都是 MAP 的子对象,每个对象都有很多配置参数,这里只是最基本的配置。有了这几个基本的对象,就具备了发布一幅地图的基本要素了(当然还有更多更复杂的配置对象和参数)。如下我们来看一个配置 MapServer 提供 WMS(网络地图服务) 服务的例子:
MAP NAME "北京城区" PROJECTION "init=epsg:3857" END #PROJECTION END WEB METADATA "wms_title" "北京城区" "wms_version" "1.3.0" "wms_onlineresource" "http://127.0.0.1:8081/cgi-bin/mapserv.exe?" "wms_enable_request" "*" "wms_srs" "EPSG:3857" END # MAP METADATA END # WEB LAYER NAME "北京城区" TYPE POLYGON METADATA "wms_title" "北京城区" "wms_srs" "EPSG:3857" END # LAYER METADATA CONNECTIONTYPE postgis CONNECTION "host=127.0.0.1 port=xxxx dbname='xxxx' user=xxxx password=xxxx" DATA "geom from beijing_3857 using unique gid using srid=3857" CLASS NAME "polygon_style" STYLE COLOR "#e563ff" OUTLINECOLOR "#45ff57" WIDTH 2 END # STYLE END END # CLASS END END # LAYEREND # MAP
PROJECTION
对象定义了发布的地图坐标系是 EPSG:3857 坐标系,其实就是谷歌地图、必应地图使用的坐标系。
然后在 METADATA
中定义了发布 WMS 服务的一些配置,”wms_title” 规定了 使用 WMS 的 GetCapability 方法返回的内容中包含的名称;”wms_version”定义了 WMS 协议的版本是 1.3.0,”wms_onlineresource” 定义了MapServer CGI(地图渲染程序) 程序的位置,”wms_enable_request” 规定了关于 WMS 的功能全部启用,”wms_srs” 规定了 WMS 服务的坐标参考系(这里看不懂没关系)。
最后 LAYER
配置了显示的地图数据和样式,TYPE
参数规定了该图层的要素类型,这里是多边形(POLYGON);配置地图数据的参数是 CONNECTIONTYPE
,这里是 postgis
,也就是 PostgreSQL 数据库中的空间数据;CONNECTION
指定连接数据库的参数;DATA
规定了查询空间数据的 SQL 查询语句;CLASS
规定了图层中多边形要素的样式,COLOR 规定了多边形的填充颜色,OUTLINECOLOR 规定了多边形的边界颜色,WIDTH 规定了多边形的边界线条宽度。
通过以上的配置,我们就成功的配置了一个具有 WMS 服务能力的服务,相对于 MapServer 来说,一个 mapfile 就代表一个服务。
三、 地图调用显示
发布了服务,我们就能看到开篇时候的地图吗?当然不能,那是调用这个服务后,在浏览器端或其他客户端展示的效果。浏览器端或者其他客户端,要请求这个服务,然后解析其返回的结果,这里的 WMS 服务实际上是返回一幅由 MapServer 渲染好的图片,浏览器要根据用户的缩放、平移等操作正确显示地图,且需要处理很多其他事件,与 MapServer 通信,而这比较复杂的事情,可以交给一些前端库,比如 OpenLayers,这样我们就不必自己从底层实现。
这个过程用一个示意图表示如下(以客户端为浏览器为例):
对 OpenLayers 不熟悉的,可以看看我写的 OpenLayers文章,或者你想知道什么,可以在博客下面进行评论。使用 OpenLayers 正确调用服务,就能实现本文开始的地图效果。
四、 总结
这篇其实介绍的不只是 mapfile 的配置,还科普了一下 mapfile 对于 MapServer 的意义,mapfile 是什么,以及 配置的 WMS 例子。总之,配置 mapfile 是 MapServer 发布服务的途径,除了本文介绍的 mapfile 对象和参数以外,还有一些配置对象和参数,能对 MapServer 进行更细致的控制,要看详细的配置说明,看可以看看其 官网关于 mapfile 的介绍 。
好的,就写到这里,有什么问题,可以到文章下面评论。
- MapServer 之 mapfile 配置文件
- MapServer.mapfile
- MFEditor: MapServer mapfile文件可视化编辑工具下载
- HDFS之SequenceFile和MapFile
- HDFS之SequenceFile和MapFile
- HDFS之SequenceFile和MapFile
- HDFS之SequenceFile和MapFile
- HDFS之SequenceFile和MapFile
- HDFS之SequenceFile和MapFile
- HDFS之SequenceFile和MapFile
- HDFS之SequenceFile和MapFile
- MapServer 之 绘制地图图例
- MapServer 之 使用 MySQL 数据
- Hadoop HDFS之SequenceFile和MapFile
- Hadoop HDFS之SequenceFile和MapFile
- Hadoop HDFS之SequenceFile和MapFile
- Hadoop HDFS之SequenceFile和MapFile
- MapReuce笔记五之SequenceFile,MapFile
- 【官方搭建入门】JEECG 平台开发环境搭建必读
- java HashMap原理
- OC基础-内存管理(三)AutoreleasePool
- 排序之交换排序
- Drupal7 常用配置
- MapServer 之 mapfile 配置文件
- 以前没有注意到的地方
- C++Primer第五版 11.4节练习
- 导出数据库数据
- 大素数判断和素因子分解模板(miller-rabin,Pollard_rho算法)
- directx3d之.x文件
- 第一篇博客:
- [译]如何在Unity编辑器中添加你自己的工具
- oracle客户端及时版