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

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

1、前言web

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

2、简介安全

  1.打开案例相关介绍服务器

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

      注意:这个位置的地址是按照官网上面翻译的地址,若是是根据本身的我的安装环境以及建站配置等设置的,须要修改。ide

    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中修改相关参数值,以便让你更加轻松的学习相关关键之的用法。

3、根据用例建立本身实际运行的站点应用

  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显得比较安全,毕竟没有路径盘符信息了。

后记

  在写此案例的过程当中,遇到了一些相对路径的问题。修修改改,总算完成,其中也有不少不懂的知识,可是就像作题同样,作错了,就能立刻知道本身错了。而后找答案,查询知识点。就能一一解决。

  下一篇按照大纲接续写。

相关文章
相关标签/搜索