../_images/logo_mapserver.png ../_images/OSGeo_project.png

MapServer Quickstart

MAPServer是一个 Open Source 基于服务器的应用程序,允许您使用 OGC StandardsWeb Map Service (WMS)Web Feature Service (WFS)Web Coverage Service (WCS) .

使用Mapfile配置文件配置MapServer

注解

我要学什么? 在本节中,您将了解什么是映射文件,以及如何配置它,以允许MapServer使用WMS请求将shapefile作为图像提供。

什么是映射文件?

这个 Mapfile 是MapServer用于将地理空间数据呈现为图像或矢量数据的配置文件。它的主要目的是定义它可以绘制的层,如何读取必要的数据,以及如何渲染它(例如颜色、符号、标签等)。

创建我的第一个映射文件

  1. 打开任何文本编辑器(例如 Applications ‣ Accessories ‣ FeatherPad

  2. 在主目录中创建文件“mapserver_quickstart.map”: /home/user/mapserver_quickstart.map

    将以下内容放入其中:

    MAP
      NAME "MAPSERVER_QUICKSTART"
      EXTENT -137 29 -53 88
      UNITS DD
      SHAPEPATH "/home/user/data/natural_earth2/"
      SIZE 800 600
    
      IMAGETYPE PNG24
    
      PROJECTION
        "init=epsg:4326"
      END
    
      WEB
        METADATA
          ows_title "MapServer Quickstart"
          ows_enable_request "*"
          ows_srs "EPSG:4326 EPSG:25832 EPSG:25833"
        END
      END
    
      LAYER
        NAME "Countries"
        STATUS ON
        TYPE POLYGON
        DATA "ne_10m_admin_0_countries"
        CLASS
          STYLE
            COLOR 246 241 223
            OUTLINECOLOR 0 0 0
          END
        END
      END
    
    END
    

    注解

    该示例使用了自然地球数据集,该数据集已位于osgeolove上 ~/data/natural_earth2 (抄近路 /usr/local/share/data/natural_earth2

映射文件中的每个对象都以其名称开头(例如 MAP )以一个 END . 映射文件总是以 MAP 对象并应包含 LAYER 映射文件可以读取和绘制的对象。在我们的映射文件中,我们目前只定义了一个图层。

让我们看看在映射文件中定义的一些对象(和属性):

  • 范围:设置此配置的默认地理空间边界框。
  • 层:定义空间数据集的访问和显示属性。稍后我们将添加另一层。
  • shapepath:为基于文件的数据(如shapefiles或tiff images)设置基本路径。

如果我们仔细观察 LAYER 在我们的Mapfile中,我们将看到它也包含一组属性和对象。其中包括:

  • 状态:定义是否可以绘制层(on)、不能绘制层(off)或始终绘制层(default)。
  • 类型:将数据渲染为图像时,MapServer应使用的几何体类型。在我们的映射文件中,数据将绘制为 多边形 .
  • 数据:此层使用的空间数据文件的名称,在本例中是形状文件。
  • 类:确定如何绘制层(样式)。稍后我们将更详细地介绍这个对象。

注解

可以在中找到映射文件的可用对象和特性的完整列表 MapServer documentation page .

使用WMS使用MapServer呈现地图图像 GetMap 请求

注解

我要学什么? 您将学习如何使用OGC WMS请求使用MapServer从Mapfile中渲染具有图层的图像。

打开Web浏览器并输入以下URL::

http://localhost/cgi-bin/mapserv?map=/home/user/mapserver_quickstart.map&SERVICE=WMS&REQUEST=Getmap&VERSION=1.1.1&LAYERS=Countries&SRS=EPSG:4326&BBOX=-137,29,-53,88&FORMAT=PNG&WIDTH=800&HEIGHT=600

What does the above mean? If we put it in simple words, it's a Web Map Service (WMS) GetMap request that tells MapServer to "use the following Mapfile to render the specified layers as a png image based on some user-supplied parameters such as image size, geographical extent, projection, etc.". All layers specified in the "&LAYERS=..." property having STATUS ON in the Mapfile will be rendered in addition to all layers with STATUS DEFAULT. The result looks like the following:

../_images/mapserver_map.png

注解

请求的所有参数都是特定于WMS的,除了“ ?map=/home/user/mapserver_quickstart.map “,这是特定于MapServer的。

使用命令行使用mapserver呈现地图图像

尽管MapServer面向Web应用程序,但它也可以在命令行上生成图像。如果您正在寻找重复映射,或者在调试期间,这可能很有用。

打开终端 (Applications ‣ System Tools ‣ Terminal Emulator )和类型:

shp2img -m mapserver_quickstart.map -o mymap.png

如果此命令成功运行,则可以在文件:///home/user/mymap.png中查看渲染的地图。

将新图层添加到映射文件以服务于本地形状文件

注解

我要学什么? 您将学习如何将新的图层对象定义添加到 Mapfile 中。

现在我们将向映射文件中添加一个新图层。最后一次之前 END 语句,添加以下层配置:

LAYER
  NAME "Lakes"
  STATUS ON
  TYPE POLYGON
  DATA "ne_10m_lakes"
  CLASS
    STYLE
      COLOR 153 179 204
    END
  END
END

现在我们在 Mapfile 中有两个图层定义。请注意,我们刚刚添加的新特性将“STATUS”属性设置为“ON”。这意味着除非我们明确要求,否则不会呈现它。

让我们来看看以前的WMS GetMap 请求并将新的“湖泊”层添加到渲染的图像中。我们只需将新图层名称添加到“图层”属性列表:

http://localhost/cgi-bin/mapserv?map=/home/user/mapserver_quickstart.map&SERVICE=WMS&REQUEST=Getmap&VERSION=1.1.1&LAYERS=Countries,Lakes&SRS=EPSG:4326&BBOX=-137,29,-53,88&FORMAT=PNG&WIDTH=800&HEIGHT=600

MapServer渲染的图像与以前的地图类似,但在新图层中添加了湖泊:

../_images/mapserver_lakes.png

使用地图样式配置的图层

注解

**我将学到什么?**您将看到一个层内样式元素的示例,这取决于它的一些数据属性。

在 Mapfile 中,图层对象可以包含无限多个类对象。它们用于设置空间数据文件(data)中包含的元素的样式。例如,如果我们使用诸如 ogrinfo ,我们将看到它包含的几何体和属性定义。这些属性值可以用作使用多个类对象在数据集中以不同方式绘制元素的方法。

在我们的“东北10米湖”数据集中,我们有一个 ScaleRank 属性,这似乎与湖泊的大小有关。我们可以用这个方法来改变湖泊的面貌。在层对象中,我们将在当前类对象之前添加另一个类对象:

LAYER
  NAME "Lakes"
  STATUS ON
  TYPE POLYGON
  DATA "ne_10m_lakes"
  CLASSITEM "ScaleRank"
  CLASS
    EXPRESSION /0|1/
    STYLE
      COLOR 153 179 204
      OUTLINECOLOR 0 0 0
    END
  END
  CLASS
    STYLE
      COLOR 153 179 204
    END
  END
END

我们的新类对象做什么?它基本上告诉mapserver绘制“scalerank”属性等于“0”或“1”且轮廓为黑色的元素。对于要绘制的每个特征,类对象始终从上到下读取。当某个功能与类中指定的“表达式”匹配时,该类将呈现该功能。如果功能与类不匹配,则检查下一个类。如果某个功能与任何类都不匹配,则根本不呈现该功能,但如果层中的最后一个类不包含表达式,则该类将作为默认类。层“classitem”属性告诉MapServer在计算类对象中定义的表达式时要使用哪个属性。

这一新添加的结果将使我们的地图图像中的大湖呈现黑色轮廓:

../_images/mapserver_lakes_scalerank.png

注解

进一步了解 EXPRESSIONS 在MapServer。

将数据发布为OGC WMS(Web地图服务)

MapServer支持不同的OGC标准,如OGC WMS、WFS或WCS。使用OGC WMS,您可以将数据发布为地图服务,并将该服务集成到桌面地理信息系统(如QGIS)或Web客户机(如Openlayers或MapBender)中。

使用QGIS桌面加载OGC WMS

  1. 通过启动QGIS Geospatial ‣ Desktop GIS ‣ QGIS Desktop .去 Layer ‣ Add Layer ‣ Add WMS/WMTS Layer .

  2. 单击按钮 New 并添加名称和服务URL

  3. 保存设置:

    http://localhost/cgi-bin/mapserv?map=/home/user/mapserver_quickstart.map&SERVICE=WMS&REQUEST=GetCapabilities&VERSION=1.3.0

然后您可以连接到您的服务,并将一个或多个服务层添加到您的QGIS项目中。如果选择ID为0的层,则可以同时加载所有层的整个服务。

../_images/mapserver_load_wms_to_qgis.png

接下来呢?

这是一个简单的例子,但是你可以做很多,更多。MapServer项目网站包含许多帮助您入门的资源。下面是一些要查看的资源: