说明、语法、变量

说明

MapFile 文件是 MapServer 的基本配置文件。这篇由 Jean-François Doyon and Jeff McKenna 编写的文档可以让你对 MapFile 文件有一个很好的认识,文档中有很多的例子,可以说这是一片“傻瓜式”的文档。

这篇文档~介绍的~MapFile 的语法~大部分参考自~MapServer4.4 版本的参考~,一~

部分参考自 MapServer5.4 版本的参考~。~

语法

  • MapFile 文件忽略字母大小写
  • 非字母字符串或者包含 MapServer关键字的字符串必须使用引号包含,推荐对所有的字符串都是有双引号包含。
  • MapFile 文件中最多可以包含 100 个 图层。可以修改源代码 map.h 文件中的 MS_MAXLAYERS 的值来定义你需要的值,修改完成后重新编译源代码即可。
  • MapFile 中的文件路径可以使用绝对路径,也可以使用相对路径,其中相对路径是相对于 SHAPEPATH 的路径。
  • MapFile 有特定的层次结构,Map Object 是 MapFile 的“根”,其他的对象都在其下。
  • MapFile 文件中的注释以 # 开始,从 # 开始到本行末尾为被注释的部分,程序执行时将忽略这部分的内容。书写注释是一个良好的习惯,推荐

对你写的 MapFile 加上适当的注释,这样可以方便其他人来理解你的文件。如:

# ================================================================
# MapFile for World Map
# Created by Bu Kun 
#  Created 2019-4-20
# ================================================================
# ----------------------------------------------------------------
# Revision History    
# ----------------------------------------------------------------
  • 属性名使用的语法为 [ATTRIBUTENAME] 。注意:属性名包含在方括号内,并且区分大小写。在 ESRI 的 ShapeFile 文件(.dbf)中所有的属性名都为大写,而 PostGIS 中的属性名全部为小写。

MapServer 中的正则表达式的使用依赖于你使用的操作系统使用的 C 语言库。了解相关的详细信息,请参考 C 语言库提供的参考文档。Linux 下这个库为 GlibC,在此系统下你可以使用 man 7 regex 。这些正则表达式的是与 POSIX 兼容,所以在 Windows下用户可以在互联网上搜索”man 7 regex”。

INCLUDE

从 MapServer 5.0 开始,可以使用 INCLUDE 命令是多个 MapFile 文件形成逻辑上的单个文件。

例子:在 mymap.map 文件中包含 mylayer.map mymap.map 的内容如下

# ===========================
#mymap.map
# Create By YanMing
#============================ MAP
 „„
    INCLUDE “mylayer.map”
 „„
END

mylayer.map 的内容如下

# ===========================
# mylayer.map
# Create By YanMing
#============================
LAYER
                 NAME mylayer
                 DATA mylayer
 TYPE POLYGON  STATUS ON
END

在这种情况下 mymap.map 逻辑上相当于:

# ===========================
#mymap.map
# Create By YanMing
#============================
MAP
    LAYER
        NAME mylayer
        DATA mylayer
        TYPE POLYGON   STATUS ON
        „„
    END
END

Variables

变量是可以在 MapFile 文件中被替代的参数(与编程语言中的变量类型,在程序中可以为其赋值等)。在这种情况下,支持 cookie 和 CGI parameter values,这就可以使 MapServer MapFiles 获得用户的 cookies(这样可以实现安全认证)或非 MapServer 的请求参数。

语法: “%” + ”变量名” + ”%”

例 1:安全连接空间数据库

你需要访问 PostGIS 数据库。用户名和密码在以前的操作中被保存在 cookie 中~, uidpasswd 。那么在~MapFile 中可以这样写:

CONNECTION "user=%uid% password=%passwd% dbname=postgis"

例 2:处理临时文件

一个程序要生成对应的 shapefile 并将生产的数据存放到服务器用户对应的目录中。username 可以从 cookie 中获得,filename 可以从请求参数数获取。

DATA "/home/%username%/tempshp/%filename%"

这样的参数只能在 CGI版本的MapServer中使用,如果你你使用 MapScript,你需要自己出来对应的逻辑来实现这样的功能 。