MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.1 A map with single layer

MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.1 A map with single layer

一、前言

  开始MapServer用例实践之旅,做项目算是可以比喻为考试,但是考试之前,还是以做练习题模拟考为主。下面实践一下官网的第一个例子:Example1.1 A map with single layer(官网地址:https://www.mapserver.org/tutorial/example1-1.html#example1-1

二、简介

  1.打开案例相关介绍

    1.1.MapServer能够创建图像并投影到本地目录或者直接的投影到你所使用请求的浏览器上面。本用例你可以通过浏览器直接打开:http://localhost/cgi-bin/mapserv?map=/ms4w/apps/tutorial/htdocs/example1-1.map&layer=states&mode=map查看。

      注意:这个位置的地址是按照官网上面翻译的地址,如果是根据自己的个人安装环境以及建站配置等设置的,需要修改。

    1.2.当前URL分为两个部分

      第一部分:"http://localhost/cgi-bin/mapserv?"部分,调用MapServer CGI进程。如果你在浏览器中打开http://localhost/cgi-bin/mapserv?,会出现“No query information to decode. QUERY_STRING is set, but empty”。

      第二部分:URL中的三个参数 map、layer、mode

        map=/ms4w/apps/tutorial/htdocs/example1-1.map:此处表示告诉MapServer的CGI进程去解析哪一个map文件。可以是绝对路径,也可以是相对路径(相对路径是针对mapserv.exe而言的)。

        layer=states:此处告诉MapServer“打开”layer状态,回调时,我们命名layer对象为“states”

        mode=map:告诉MapServer对mapfile文件的输出格式,这里是告诉MapServer直接将图像投影到浏览器,无需先在服务器端创建零时的图像。

      注意:mapserver模式cgi变量采用的值不是map。例如,如果使用mode=browse,mapserver将把映像转储到服务器上的临时目录。浏览模式现在不起作用,但稍后我们将再次实践。

  2.mapfile的文件结构

    官网用例“Example1.1 A map with single layer”的mapfile文件结构请查看此链接:https://www.mapserver.org/tutorial/example1-1-map.html#example1-1-map

    

    MapFile文件介绍请查看此链接:https://www.mapserver.org/mapfile/index.html#mapfile

      后续再添加一篇文章,对MapFile做详细介绍。

    Mapefile是MapServer的基础配置机制(个人理解就是告诉MapServer的站点是如何运行的)。它有对象组成,如:LAYERT。每个对象有自己的关键之,并可以包含其他对象。它包含的对象有一定的层次结构,如:LAYER对象中包含CLASS,CLASS是属于LAYER的。

    当前是一个非常简单的文件结构,当学习完其他用例时,你会了解更复杂的mapfile层次结构。

    我们定义mapfile中的内容时,以对象名称开头,END结尾;#表示注释。

    目前的层次结构为:

      MAP

        |----LAYER

          |----CLASS

            |----STYLE

  3.Mapfile中的对象解释

    3.1Map对象

      MAP:每个mapfile均以MAP开头,END结尾。只有这样格式的文件才会被识别为mapfile文件。

      IMAGETYPE:图片类型,imagetype为mapserver的CGI定义输出图片格式。当前样例使用PNG作为输出格式(老版本用GIF)。如果需要使用GIF,在编译源码时,需要开启GIF,WBMP或 JPEG 支持(在cmd里面输入mapserv -v可以查看输出的格式支持)。

               当然也能够指定输出其他格式,如:PDF、SWF、GeoTIFF等。只要编译的时候在OUTPUTFORMAT加上相关的支持即可。输出支持详见:https://mapserver.org/documentation.html#output

      EXTENT:此参数指定地图的输出范围-初始地图的边界框。范围值的格式如:<Lower Left X> <Lower Left Y> <Upper Right X> <Upper Right Y>

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

             在这个例子中,我们的数据是地理投影的,所以单位是十进制的。

             你可以使用ogrinfo(官网:http://gdal.org/ogrinfo.html)提供的工具,其作为GDAL/OGR二级制包的一部分,作为shapefile数据集的一部分(或者其他支持向量格式数据集)。

           使用cmd命令定位到.shp文件所在目录,输入:ogrinfo -al -so states_ugl.shp 查看 states_ugl.shp 文件信息(红色部分根据实际查看文件信息填写)

           运行此命令的先决条件是,你安装了MapServer,同时环境变量中添加了GDAL

           

             当然,你也可以使用ArcView或者其他开元GIS软件查看,比如QGISThuban 等。请随意更改范围的值,以便更好地了解范围如何更改地图。

      SIZE:表示MapServer生成map图片的大小,但是为像素。当前例子是宽400像素,高300像素。在mapfile中修改这个值,可以查看在地图中的变化。

      SHAPEPATH:图层数据的路径。可以是绝对路径,也可以是mapfile的相对路径(如:../data 或 E:\SvnWorkspace\LY_WEB_GIS\branches\Documents\ms4w-mapserver-for-wimdows\release-1911-x64-gdal-2-3-3-mapserver-7-2-1\apps\Example1.1\data)。

             此路径不需要通过web访问,通常根本不需要对其访问,除非你愿意提供给别人下载你的原始数据。在web浏览器上面,它没有任何作用,所以不要考虑提供下载此源文件的URL。

                只需要保证你的应用程序池可以访问到此shape文件(在Unix上面,是“nobdy”或“Apache”用户组),并对其读取权限。

      IMAGECOLOR:地图的背景颜色。使用RGB值组成。

    3.2 LAYER对象

      LAYER:map对象图层的开始标签,详见:https://www.mapserver.org/mapfile/layer.html#layer。你可以指定多个layer对象。

      NAME:NAME是LAYER对象的唯一标识符。MapServer通过NAME控制LAYER的开关。这个案例中LAYER的STATUS为默认值,所以NAME是无法控制工作的。后续案例中再做详细介绍。

      DATA:数据的名称(当前案例中是shape文件的数据名称)。MapServer通过OGR(GDAL库的一部分)库支持ESRI的shapefile格式以及以外的矢量数据解析。你可以通过访问GDAL数据支持学习MapServer所支持的不同的矢量数据格式(http://gdal.org/ogr_formats.html)。

           然后官网上面也有相关的数据支持文档guide to using vector data for MapServer.

      TYPE:数据是什么类型的?如果是矢量数据,你可以指定为POLYGON(多边形),LINE(线)(即使是POLYLINE在技术上也可以使用LINE),或者POINT(点)。你也可以指定为RASTER(栅格)或ANNOTATION(标注)数据。当前案例是POLYGON(多边形)。

      STATUS:层级(layers)是通过他们的STATUS来设置开关的。DEFAULT 状态默认是打开的。层级(layers)的开关控制是通过URL中LAYER的名称参数控制的。

    3.3 CLASS 对象

      CLASS:在LAYER对象中,以CLASS标签开始,END结尾。你可以在一个layer中指定多个CLASS。

      NAME:CLASS对象的唯一标识符。一个layer对象可以有多个class对象,就像一个MAP对象可以有多个layer对象一样。MapServer通过CLASS对象的NAME标记命名CLASS等对象,所以最好给每个CLASS对象有一个适当的名称描述。

    3.4 STYLE 对象

      STYLE:一个CLASS对象中可以定义多个style对象。可以通过一个style覆盖或重载其他style。

      CLOLR:多边形的填充颜色。如果是线形(TYPE值为LINE),则表示线的颜色。COLOR是一个RGB格式颜色值。

      OUTLINECOLOR:多边形的边线颜色。RGB颜色值格式。默认情况下,MapServer不会绘制多边形(TYPE值为POLYGON)的边线。如果你想查看多边形的边界,你需要在mapfile中定义OUTLINECOLOR参数。

  最后,你可以在mapfile中修改相关参数值,以便让你更加轻松的学习相关关键之的用法。

三、根据用例创建自己实际运行的站点应用

  1. 观察URL根据自己的实际情况加以调整

    1.1 新建一个自己的 Example1.1 A map with single layer 站点

      根据map参数的相对路径是基于mapserv.exe的相对路径所决定的。我建议将站点建立在E:\SvnWorkspace\LY_WEB_GIS\branches\Documents\ms4w-mapserver-for-wimdows\release-1911-x64-gdal-2-3-3-mapserver-7-2-1\apps目录下。

      这样发布站点时,URL中的map参数可以为相对路径。mapfile中SHAPEPATH也使用相对路径比较方便。

      

      后续所有的案例均放在apps文件夹下面,每个案例的命名规则为Example + section + 编号 + . + 案例编号。所以第一节第一个案例的目录名称为:Example1.1

      在cmd中输入:cd /d E:\SvnWorkspace\LY_WEB_GIS\branches\Documents\ms4w-mapserver-for-wimdows\release-1911-x64-gdal-2-3-3-mapserver-7-2-1\apps

      在cmd中输入:md Example1.1

      在cmd中输入:cd  Example1.1

      在cmd中输入:cd.>web.config

      以上操作是创建相关文件夹以及web.config文件。

      在web.config文件呢中天下如下内容,配置FastCGI指向。(详情请参考《MapServer Configuring with IIS》)      

1 <?xml version="1.0" encoding="UTF-8"?>
2 <configuration>
3     <system.webServer>
4         <handlers>
5             <add name="MapServerFastCgi" path="*" verb="*" type="" modules="FastCgiModule" scriptProcessor="E:\SvnWorkspace\LY_WEB_GIS\branches\Documents\ms4w-mapserver-for-wimdows\release-1911-x64-gdal-2-3-3-mapserver-7-2-1\bin\mapserv.exe" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition=""  />
6         </handlers>
7         <caching enabled="true" enableKernelCache="true" />
8     </system.webServer>
9 </configuration>

      其中“scriptProcessor”的实际路径根据你安装的MapServer填写。

      站点的物理文件路径为:E:\SvnWorkspace\LY_WEB_GIS\branches\Documents\ms4w-mapserver-for-wimdows\release-1911-x64-gdal-2-3-3-mapserver-7-2-1\apps\Example1.1

      端口为:8011

      应用程序池名称为:Example1.1

    1.2 配置当前 Example1.1 站点

      其中,当前站点需要运行,涉及到:mapfile文件、shape文件等存放。

      在cmd中输入:cd /d E:\SvnWorkspace\LY_WEB_GIS\branches\Documents\ms4w-mapserver-for-wimdows\release-1911-x64-gdal-2-3-3-mapserver-7-2-1\apps\Example1.1

      在cmd中输入:md data

      在cmd中输入:md logs

      在cmd中输入:cd.>example1_1.map

      创建相关文件夹和数据存放文件夹,日志记录文件夹,以及Example1.1站点运行时调用MapServer的mapfile文件。

      将tutorial\data文件夹里面的states_ugl.dbf、states_ugl.shp、states_ugl.shx拷贝到“E:\SvnWorkspace\LY_WEB_GIS\branches\Documents\ms4w-mapserver-for-wimdows\release-1911-x64-gdal-2-3-3-mapserver-7-2-1\apps\Example1.1\data”文件夹下面。

      输入文件详见:https://www.mapserver.org/input/vector/format_types.html。这里解释了上个文件的类型。

      修改example1_1.map文件,内容如下:

 1 MAP
 2   IMAGETYPE      PNG
 3   EXTENT         -97.238976 41.619778 -82.122902 49.385620
 4   SIZE           400 300
 5   SHAPEPATH      "./data" #可以使exmaple1_1.map的相对路径,也可以是绝对路径 E:\SvnWorkspace\LY_WEB_GIS\branches\Documents\ms4w-mapserver-for-wimdows\release-1911-x64-gdal-2-3-3-mapserver-7-2-1\apps\Example1.1\data
 6   IMAGECOLOR     255 255 255
 7
 8   LAYER
 9     NAME         states
10     DATA         states_ugl
11     STATUS       OFF
12     TYPE         POLYGON
13
14     CLASS
15       NAME       "The Upper Great Lakes States"
16
17       STYLE
18         COLOR        232 232 232
19         OUTLINECOLOR 32 32 32
20       END
21     END
22   END
23   DEBUG 5
24   CONFIG "MS_ERRORFILE" "logs\ms.log"
25 END 

    配置web站点程序池对日志文件读写权限

     在cmd中输入:icacls "E:\SvnWorkspace\LY_WEB_GIS\branches\Documents\ms4w-mapserver-for-wimdows\release-1911-x64-gdal-2-3-3-mapserver-7-2-1\apps\Example1.1\logs" /grant "IIS AppPool\Example1.1":(OI)(CI)RW

    

    测试站点能否访问,在浏览器中输入:http://localhost:8011/mapserv?map=../apps/Example1.1/example1_1.map&layer=states&mode=map

    

     map=../apps/Example1.1/example1_1.map  表示 MapServer 与 mapfile (example1_1.map)的相对路径

    mapfile (example1_1.map)中 SHAPEPATH      "./data" 也是使用的相对路径。

    两处均使用了相对路径。这样URL显得比较安全,毕竟没有路径盘符信息了。

后记

  在写此案例的过程中,遇到了一些相对路径的问题。修修改改,总算完成,其中也有很多不懂的知识,但是就像做题一样,做错了,就能马上知道自己错了。然后找答案,查询知识点。就能一一解决。

  下一篇按照大纲接续写。

原文地址:https://www.cnblogs.com/eshinex/p/10276449.html

时间: 2024-08-12 15:36:44

MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.1 A map with single layer的相关文章

MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.2 Static Map with Two Layers

MapServer Tutorial--MapServer7.2.1教程学习--第一节用例实践:Example1.2 Static Map with Two Layers 一.前言 上一篇博客<MapServer Tutorial--MapServer7.2.1教程学习--第一节用例实践:Example1.1 A map with single layer>中介绍了单图层的地图加载显示.下面根据官网的例子介绍两个图层的加载显示.官网地址:https://www.mapserver.org/tu

MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.3 Displaying Classes in a Layer

MapServer Tutorial--MapServer7.2.1教程学习--第一节用例实践:Example1.3 Displaying Classes in a Layer 一.前言 关于第一节的案例,分别介绍了一个基本的地图站点应用程序创建和多图层地图站点 应用程序创建.这个案例 主要来介绍一下mapfile文件中 LAYER 对象里面,CLASS对象的应用. 同时还有如何根据CLASSITEM.EXPRESSION等配置去修改地图的显示方式. 最后还有一个很酷炫的方法一次性读取shp文件

MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example 1.4 Labeling the Map

MapServer Tutorial--MapServer7.2.1教程学习--第一节用例实践:Example 1.4 Labeling the Map 一.前言 MapServer拥有非常灵活的标签标记系统.它支持bitmap以及truetype字体等.使用truetype字体同时还支持其缩放.标签的角度和位置是可以自定义的. 通过把标签的位置和角度以及其他参数的设置使用,你可以把你的地图装饰得更加美观,信息体现的更加丰富. 二.搭建Example1.4站点 所有的学习都要通过实践,还是从搭建

MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.5 Adding a raster layer

MapServer Tutorial--MapServer7.2.1教程学习--第一节用例实践:Example1.5 Adding a  raster layer 一.前言 MapServer不仅支持矢量数据(point, lines, polygons, and annotations),同时也支持栅格数据.通过GDAL库,MapServer可以输入输出多种类型的栅格数据. 在4.x版本前,MapServer输出栅格数据仅限于单个图层.灰度图像或伪彩色图像. 当前版本支持RGB图像和多光谱图像

MapServer Tutorial——MapServer7.2.1教程学习(大纲)

MapServer Tutorial--MapServer7.2.1教程学习(大纲) 前言 最近在学习Gis方面的知识,因为电脑硬件配置偏低,顾选择MapServer入手.网上搜索MapServer系列教程较少,对于入门级开发人员而言,还是有一定的难度,所以在自己通过官网学习之余,也将官网的案例加以实践和记录,方便自己学习实践和后续查阅.也为其他入门新手略尽绵薄之力.官网地址:https://www.mapserver.org/tutorial/index.html. 其实我自己下载的是编译好的

MapServer Tutorial——MapServer7.2.1教程学习——教程背景

MapServer Tutorial--MapServer7.2.1教程学习--教程背景 一.前言 目前处于MapServer学习入门阶段,所以每一步都需要打下扎实基础.尽自己最大的努力,去学习知识的细节.一步一步按照官网上的教程操作.争取掌握MapServer. 二.教程时间表 高手可能在一天内就完成了所有的操作,新手可能需要一个星期.(希望给每个公司都能入职的新人拟定相关的学习计划和给定适当的时间周期去学习,不是每个人生来就是天才,但是给他们学习和挖掘的机会.) 三.教程数据资源 教程的数据

.Net程序员之Python基础教程学习----列表和元组 [First Day]

一. 通用序列操作: 其实对于列表,元组 都属于序列化数据,可以通过下表来访问的.下面就来看看序列的基本操作吧. 1.1 索引: 序列中的所有元素的下标是从0开始递增的. 如果索引的长度的是N,那么所以的范围是-N~N-1之间,超过这个范围就会提示 IndexError:  index out of range >>> greeting ='Hello world' >>> print greeting Hello world >>> print gr

ReactiveCocoa入门教程:第一部分

本文翻译自RayWenderlich,原文:ReactiveCocoa Tutorial--The Definitive Introduction: Part 1/2 作为一个iOS开发者,你写的每一行代码几乎都是在相应某个事件,例如按钮的点击,收到网络消息,属性的变化(通过KVO)或者用户位置的变化(通过CoreLocation).但是这些事件都用不同的方式来处理,比如action.delegate.KVO.callback等.ReactiveCocoa为事件定义了一个标准接口,从而可以使用一

ArcGIS for Desktop入门教程_第一章_引言 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第一章_引言 - ArcGIS知乎-新一代ArcGIS问答社区 1 引言 1.1 读者定位 我们假设用户在阅读本指南前应已具备以下知识: · 熟悉Windows的基本操作 · 接触过地理信息系统的概念 · 理解地理数据的特点 1.2 预期效果 我们期望用户在阅读完本指南后对以下知识有一定的了解: · 了解ArcGIS for Desktop的组成与功能 · 熟悉使用ArcGIS for Desktop进行数据编辑.整饰和输出的流程 · 如何使用