MapServer 之 mapfile 配置文件

来源:互联网 发布:linux samba 登录 编辑:程序博客网 时间:2024/04/29 19:46

      MapServer 是一个地图渲染程序,简单的说,就是在服务器端将空间数据渲染成地图的程序,遵循基本的 CGI 规范,接受输入,返回输出。它的输入参数并不是通过 url 传递,而是由 mapfile 指定,mapfile 是一个文本文件,后缀名为 .map,严格的说,这个 mapfile 是一个配置文件,告诉 MapServer 主程序(也就是渲染程序)输入的空间数据的位置、输出地图的格式,样式等等。如图可以看出其原理:

mapfile地位

图1 mapfile 的地位

      在使用 MapServer 中,最重要和最核心的就是根据数据本身与输出地图需求配置 mapfile 文件,没有之一,所以掌握 mapfile 的配置是使用 MapServer 的必备技能。通过配置 MapServer 的 mapfile 配置文件,就可以通过 MapServer 发布 WMS、WFS、WCS 和 SOS 等服务了,下图便是调用发布的 WMS 地图服务效果图:

全局图

图2 地图全局视图

局部图

图3 地图放大后细节

      看完效果图,是不是也有跃跃欲试的想法呢?但是,任何事情,想要做好,都要从基础做起,基础可能枯燥,但是是必经之路。这里的基础就是基本的地图和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,这样我们就不必自己从底层实现。

这个过程用一个示意图表示如下(以客户端为浏览器为例):

过程示意图

图4 过程示意图

      对 OpenLayers 不熟悉的,可以看看我写的 OpenLayers文章,或者你想知道什么,可以在博客下面进行评论。使用 OpenLayers 正确调用服务,就能实现本文开始的地图效果。

四、 总结

      这篇其实介绍的不只是 mapfile 的配置,还科普了一下 mapfile 对于 MapServer 的意义,mapfile 是什么,以及 配置的 WMS 例子。总之,配置 mapfile 是 MapServer 发布服务的途径,除了本文介绍的 mapfile 对象和参数以外,还有一些配置对象和参数,能对 MapServer 进行更细致的控制,要看详细的配置说明,看可以看看其 官网关于 mapfile 的介绍 。

好的,就写到这里,有什么问题,可以到文章下面评论。

1 0
原创粉丝点击