例1.1

单层地图

https://demo.mapserver.org/cgi-bin/mapserv?map=/mapserver/apps/tutorial/htdocs/example1-1.map&layer=states&mode=map

mapserver可以创建一个映像并将其转储到本地目录,或者直接发送到请求的Web浏览器,如本例所示。您可以在不需要HTML页面的情况下查看它,只需输入以下URL: http://localhost/cgi-bin/mapserv?map=/ms4w/apps/tutorial/htdocs/example1-1.map&layer=states&mode=map . 如果您在Web服务器上(如果不是,则必须将“localhost”替换为Web服务器的名称(例如“demo.mapserver.or g”)或IP地址(例如“140.211.15.84”),则此URL可以工作。

这个URL可以分为三部分:第一部分,http://localhost/cgi-bin/mapserv?,调用mapserver cgi程序。如果您按原样调用它,您将得到这个熟悉的消息:

No query information to decode. QUERY_STRING is set, but empty.

接下来的三个部分组成了查询字符串。查询字符串包含CGI参数(变量及其值),每个参数由一个与号(“&”)分隔。因此,查看查询字符串:

  • 第一个参数“map”的值为/ms4w/apps/tutorial/htdocs/example1-1.map”。这将告诉mapserver cgi程序(**mapserv**或 MPEServ.EXE) 要处理/分析的映射文件。

  • 下一个参数(layer=states)表示 mapserv 打开状态层。回想一下,我们将层对象命名为“状态”。

  • 最后一个参数(mode=map)表示 mapserv 如何处理映射文件的输出。在这种情况下,它告诉我们 mapserv 将图像直接转储到Web浏览器(客户端),而不首先在服务器上创建临时图像。

地图服务器 mode CGI变量采用除 map. 例如,如果您使用 模式=浏览, mapserver将把映像转储到服务器上的临时目录中。浏览模式现在不起作用,但稍后我们将再次使用。

映射文件结构

这就是映射文件的外观: Example1-1.map .

这个 MAPFILE 是MapServer的基本配置机制。它由“对象”组成,每个对象可以有关键字或其他对象。它有一个层次结构,一些对象落在其他对象之下…在这个层次结构的顶部是映射对象,所有其他对象都属于它。这个例子显示了一个非常简单的对象层次结构。当您通过每个示例时,这些层次树的复杂性将增加。

关于mapfiles的一些简短说明:我们用对象名定义mapfile中的每个对象,并用“end”关闭它,在注释前面加上一个磅()符号。

让我们按对象分解“example1-1.map”。其结构如下:

MAP
 |-LAYER
    |-CLASS
       |-STYLE

地图对象

让我们看看地图对象中的关键字(参数):

MAP

每个映射文件必须以 MAP 对象——整个映射文件就是映射对象。

IMAGETYPE

关键字imagetype用于定义mapserver cgi程序应用于输出的图像格式。在本例中,我们使用索引颜色png(类似于gif)。如果我们使用gif支持、wbmp或jpeg编译gd库,这可能是gif。我们还可以指定其他输出选项(pdf、swf、geotiff),前提是我们编译了对它们的支持并使用outputformat对象指定它们。输出格式超出了本教程的范围,但您可以通过阅读MapServer网站中的文档了解更多信息。

EXTENT

此参数指定地图的输出范围——初始地图的边界框。范围值的格式如下:

<Lower Left X> <Lower Left Y> <Upper Right X> <Upper Right Y>

用空格分隔每个值。这需要与数据使用相同的单位,或者,如果指定了不同的输出投影,则需要与输出投影使用相同的单位。

在这个例子中,我们的数据是地理投影的,所以单位是十进制的。你可以使用这个工具 ogrinfo 是GDAL/OGR库包的一部分,用于获取特定形状文件数据集(或其他支持的矢量格式)的范围。下面是我用于获取此示例范围的命令:

ogrinfo -al -so states_ugl.shp

这将返回以下输出:

INFO: Open of `states_ugl.shp'
 using driver `ESRI Shapefile' successful.

Layer name: states_ugl
Metadata:
  DBF_DATE_LAST_UPDATE=2002-03-07
Geometry: Polygon
Feature Count: 204
Extent: (-97.238976, 41.619778) - (-82.122902, 49.385620)
Layer SRS WKT:
  (unknown)
AREA: Real (12.3)
PERIMETER: Real (12.3)
STATESP020: Integer64 (11.0)
STATE: String (20.0)
STATE_FIPS: String (2.0)
CLASS: String (5.0)

您也可以使用 QGIS 或其他桌面软件来获取范围值。

请随意更改范围的值,以便更好地了解范围如何更改地图。

SIZE

这是MapServer将生成的图像(地图)的大小(像素)。所以我们的地图是400像素宽,300像素高。再次,把它改为你的心脏内容,看看它是如何影响你的地图的。

SHAPEPATH

这是到数据层的路径。您可以提供绝对路径(即“/ms4w/apps/tutorial/data”或“c:/ms4w/apps/tutorial/data”)或相对于映射文件位置的路径(在本例中,您将使用“../data”)。此路径不必是可访问Web的,除非您希望任何人下载您的原始数据,否则可能不应该是。它与Web没有直接关系,因此在这里甚至不要考虑URL。只要确保运行Web服务器的用户(通常是*nix世界中的“nobody”或“apache”)可以读取shapepath中的数据。

IMAGECOLOR

这是地图的背景色。这些值是RGB值,因此255红色、255绿色和255蓝色会产生白色背景。继续玩这个价值观。

层对象

现在让我们看看图层对象参数:

LAYER

标记a的开始 LAYER 在贴图对象中。您可以根据需要指定任意多个层(在MapServer版本<5时,有一个限制可以通过编辑map.h头文件并重新编译MapServer来更改;不再有这样的限制)。

NAME

这是层标识符。MapServer使用此名称打开和关闭层。在本例中,它不起作用,因为我们将图层状态设置为默认。在后面的例子中我们将回到这个问题。

DATA

数据的名称(本例中为shapefile数据集)。mapserver通过使用ogr库(gdal软件包的一部分)支持向量数据格式,而不是esri的shapefile格式。请访问GDAL项目网站: https://gdal.org/https://gdal.org/drivers/vector/index.html 了解MapServer支持的不同矢量格式的更多信息。此外,杰夫·麦肯纳和泰勒·米切尔还写了一篇详细的 guide to using vector data for MapServer .

TYPE

它是什么类型的数据?如果是矢量数据,可以指定它是多边形、直线(即使数据在技术上是多段线,也可以使用直线)还是点。您还可以指定栅格、图表或圆(从MapServer 6.2开始,注释层就已被弃用)。这里我们要显示多边形。

STATUS

层根据其状态打开或关闭。默认值始终为“开”。当层名称作为查询字符串的一部分传递时,打开或关闭工作。

类对象

让我们看看类对象参数:

CLASS

标记a的开始 CLASS 对象在层对象中。您可以根据需要在一个层中指定任意数量的类(在MapServer版本<5的版本中,可以通过编辑map.h头文件并重新编译MapServer来更改限制;不再有这样的限制)。

NAME

此类的描述性标识符。图层对象可以有多个类,就像地图对象可以有多个图层一样。MapServer将类名用作图例的标签,因此在命名类时请确保使用适当的描述性名称。我们稍后将在本教程中讨论图例。

样式对象

最后,让我们看看样式对象参数:

STYLE

标记 STYLE 对象。可以在一个类中定义多个样式。当您想在另一个样式上覆盖样式时,这很有用。

COLOR

这是多边形的填充颜色。如果类型是line,这是line颜色。这些值采用RGB格式。

OUTLINECOLOR

这是多边形的轮廓颜色。这些值采用RGB格式。默认情况下,MapServer不绘制多边形轮廓,因此如果要查看多边形边界,则需要定义一个大纲颜色。

这结束了本教程中的第一个示例。建议您更改映射文件中关键字的值。它将帮助您理解这些关键字的作用。


Back to Section 1 index | Proceed to Example 1.2