例1.1¶
单层地图¶
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) 要处理/分析的 Mapfile 。
下一个参数(layer=states)表示 mapserv 打开状态层。回想一下,我们将层对象命名为“状态”。
最后一个参数(mode=map)表示 mapserv 如何处理 Mapfile 的输出。在这种情况下,它告诉我们 mapserv 将图像直接转储到Web浏览器(客户端),而不首先在服务器上创建临时图像。
地图服务器 mode CGI变量采用除 map. 例如,如果您使用 模式=浏览, mapserver将把映像转储到服务器上的临时目录中。浏览模式现在不起作用,但稍后我们将再次使用。
Mapfile 结构¶
这就是 Mapfile 的外观: Example1-1.map .
这个 MAPFILE 是MapServer的基本配置机制。它由“对象”组成,每个对象可以有关键字或其他对象。它有一个层次结构,一些对象落在其他对象之下…在这个层次结构的顶部是映射对象,所有其他对象都属于它。这个例子显示了一个非常简单的对象层次结构。当您通过每个示例时,这些层次树的复杂性将增加。
关于mapfiles的一些简短说明:我们用对象名定义mapfile中的每个对象,并用“end”关闭它,在注释前面加上一个磅()符号。
让我们按对象分解“example1-1.map”。其结构如下:
MAP
|-LAYER
|-CLASS
|-STYLE
地图对象¶
让我们看看地图对象中的关键字(参数):
- MAP
每个 Mapfile 必须以 MAP 对象——整个 Mapfile 就是映射对象。
- 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 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: Real (11.0)STATE: String (20.0) STATE_FIPS: String (2.0) CLASS: String (5.0)
您还可以使用ArcView或开源的GIS包——QGIS、Thuban等。
请随意更改范围的值,以便更好地了解范围如何更改地图。
- SIZE
这是MapServer将生成的图像(地图)的大小(像素)。所以我们的地图是400像素宽,300像素高。再次,把它改为你的心脏内容,看看它是如何影响你的地图的。
- SHAPEPATH
这是到数据层的路径。您可以提供绝对路径(即“/ms4w/apps/tutorial/data”或“c:/ms4w/apps/tutorial/data”)或相对于 Mapfile 位置的路径(在本例中,您将使用“../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项目网站: http://gdal.org/ 读 https://gdal.org/drivers/vector/index.html 了解MapServer支持的不同矢量格式的更多信息。此外,杰夫·麦肯纳和泰勒·米切尔还写了一篇详细的 guide to using vector data for MapServer .
- TYPE
它是什么类型的数据?如果是矢量数据,则可以指定它是多边形、直线(即使数据在技术上是多段线,也可以使用直线)还是点。也可以指定栅格或注释数据。这里我们要显示多边形。
- STATUS
层根据其状态打开或关闭。默认值始终为“开”。当层名称作为查询字符串的一部分传递时,打开或关闭工作。
类对象¶
让我们看看类对象参数:
- CLASS
标记a的开始 CLASS 层对象中的对象。您可以在一个层中指定任意多个类(在MapServer版本<5的情况下,通过编辑map.h头文件和重新编译mapServer可以更改限制)。
- NAME
此类的描述性标识符。图层对象可以有多个类,就像地图对象可以有多个图层一样。MapServer将类名用作图例的标签,因此在命名类时请确保使用适当的描述性名称。我们稍后将在本教程中讨论图例。