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顯得比較安全,畢竟沒有路徑盤符信息了。

後記

  在寫此案例的過程當中,遇到了一些相對路徑的問題。修修改改,總算完成,其中也有不少不懂的知識,可是就像作題同樣,作錯了,就能立刻知道本身錯了。而後找答案,查詢知識點。就能一一解決。

  下一篇按照大綱接續寫。

相關文章
相關標籤/搜索