MapServer Configuring with IIS

MapServer Configuring with IIShtml

1、前言python

  1.MapServer簡介mysql

  MapServer是一個用C語言編寫的開源地理數據呈現引擎。除了瀏覽地理信息系統數據以外,MapServer還容許您建立「地理圖像地圖」,便可以引導用戶訪問內容的地圖。git

  MapServer最初是由明尼蘇達大學(UMN)Fornet項目與美國宇航局和明尼蘇達天然資源部(MNDNR)合做開發的。後來,它由Terrasip項目主辦,這是一個由美國國家航空航天局贊助的UMN和一個土地管理利益聯盟之間的項目。github

  MAPServer是OsGeo基金會的創始項目之一,並由愈來愈多的開發者(從世界各地接近20)維護。它獲得了各類組織的支持,這些組織爲加強和維護提供資金,而且由由開發人員和其餘貢獻者組成的MapServer項目指導委員會在OSGEO內進行管理。全部源代碼均可以經過Github公開使用。web

  高級製圖輸出正則表達式

    與比例相關的特徵繪製和應用程序執行sql

    功能標籤,包括標籤衝突調解數據庫

    徹底可定製的模板驅動輸出windows

    TrueType字體

    地圖元素自動化(比例尺、參考地圖和圖例)

    使用基於邏輯或正則表達式類的主題映射

  支持流行的腳本和開發環境

    PHP、Python、Perl、Ruby、Java和.NET

  跨平臺支撐

    Linux、Windows、Mac OS X、Solaris等

  支持衆多開放地理空間聯盟(OGC)標準

    WMS(客戶機/服務器)、非事務性WFS(客戶機/服務器)、WMC、WCS、過濾器編碼、SLD、GML、SOS、OM

  多種光柵和矢量數據格式

    tiff/geotiff、netcdf、mrsid、ecw和許多其餘經過gdal

    esri shapfilespostgisspaceialiteesri arcsdeoracle spatialmysql以及許多其餘經過ogr的軟件。

  地圖投影支持

    經過PROJ.4庫進行1000秒的動態地圖投影

  2.MapServer與MS4W的區別

    ms4w:mapserver for window,本質上就是windows下的MapServer集成,而且附帶如Geomoose、Openlayers等。

    ms4w的包含內容:      

    •   Apache version 2.4.37
    •   PHP version 5.6.40
    •   MapServer 7.0.7 CGI and MapScript
    •   GDAL 2.2.4 and bindings
    •   MapCache 1.6.1
    •   mapserver utilities
    •   gdal/ogr utilities
    •   proj.4 utilities
    •   shp2tile utility
    •   shapelib utilities
    •   shpdiff utility
    •   avce00 utilities
    •   spatialite utilities
    •   unixutils
    •   OWTChart 1.2.0
    •   H264 Streaming Module for Apache

    因爲是作.net開發,不須要Apache,顧單獨下載MapServer。

2、準備工做

  1.下載release-1911-x64-gdal-2-3-3-mapserver-7-2-1.zip

  2.解壓安裝

    

    2.1打開SDKShell.bat文件查看內容

      

      @echo off

      set SDK_ROOT=%~dp0
      set SDK_ROOT=%SDK_ROOT:\\=\%

      echo %SDK_ROOT%

      if "%1" == "setenv" goto setenv

      %comspec% /k "%SDK_ROOT%SDKShell.bat" setenv %1
      goto exit

      :setenv
      @echo Setting environment for using the GDAL and MapServer tools.

      if "%2"=="hideoci" goto hideoci

      set ocipath=0
      set _path="%PATH:;=" "%"
      for %%p in (%_path%) do if not "%%~p"=="" if exist %%~p\oci.dll set ocipath=1

      if "%ocipath%"=="0" goto hideoci
      @echo WARNING: If you encounter problems with missing oci libraries then type:
      @echo SDKShell hideoci
      goto setenv2

      :hideoci
      @echo Hiding the OCI plugin library.
      if not exist "%SDK_ROOT%bin\gdal\plugins-optional" mkdir "%SDK_ROOT%bin\gdal\plugins-optional"
      if exist "%SDK_ROOT%bin\gdal\plugins\ogr_OCI.dll" move "%SDK_ROOT%bin\gdal\plugins\ogr_OCI.dll" "%SDK_ROOT%bin\gdal\plugins-optional\ogr_OCI.dll"
      if exist "%SDK_ROOT%bin\gdal\plugins\gdal_GEOR.dll" move "%SDK_ROOT%bin\gdal\plugins\gdal_GEOR.dll" "%SDK_ROOT%bin\gdal\plugins-optional\gdal_GEOR.dll"

      :setenv2
      SET "PATH=%SDK_ROOT%bin;%SDK_ROOT%bin\gdal\python\osgeo;%SDK_ROOT%bin\proj\apps;%SDK_ROOT%bin\gdal\apps;%SDK_ROOT%bin\ms\apps;%SDK_ROOT%bin\gdal\csharp;%SDK_ROOT%bin\ms\csharp;%SDK_ROOT%bin\curl;%PATH%"
      SET "GDAL_DATA=%SDK_ROOT%bin\gdal-data"
      SET "GDAL_DRIVER_PATH=%SDK_ROOT%bin\gdal\plugins"
      SET "PYTHONPATH=%SDK_ROOT%bin\gdal\python;%SDK_ROOT%bin\ms\python"
      SET "PROJ_LIB=%SDK_ROOT%bin\proj\SHARE"


      :exit

 

    2.2這個批處理的命令含義爲:

      1.獲取當前SDKShell.bat文件所在路徑

      2.執行 SDKShell.bat 並傳參 setenv 

      3.若是參數1=="setenv",則跳轉到 :setenv

      4.若是參數2=="hideoci",則跳轉到:hideoci

      5.跳轉到:setenv後,判斷是否有參數2"hideoci",就是相關邏輯跳轉

      6.判斷環境變量中的路徑文件夾中是否有oci.dll(Oracle Call Interface),若是沒有,則跳轉到:hideoci執行隱藏OCI plugin library操做;若是有,則跳轉到:setenv2,添加相關環境變量。

      7.:hideoci,即移動相關文件到指定的文件夾(通常電腦上面安裝了oracle的均由oci.dll)

    2.3 執行SDKShell.bat文件

      添加的環境變量

      注意:%SDK_ROOT%表示的是你的SDKShell.bat文件目錄。個人是在 E:\SvnWorkspace\LY_WEB_GIS\branches\Documents\ms4w-mapserver-for-wimdows\release-1911-x64-gdal-2-3-3-mapserver-7-2-1

      PATH中添加:%SDK_ROOT%bin;%SDK_ROOT%bin\gdal\python\osgeo;%SDK_ROOT%bin\proj\apps;%SDK_ROOT%bin\gdal\apps;%SDK_ROOT%bin\ms\apps;%SDK_ROOT%bin\gdal\csharp;%SDK_ROOT%bin\ms\csharp;%SDK_ROOT%bin\curl;

        注意,%SDK_ROOT%bin;表示:E:\SvnWorkspace\LY_WEB_GIS\branches\Documents\ms4w-mapserver-for-wimdows\release-1911-x64-gdal-2-3-3-mapserver-7-2-1\bin;

      新建環境變量:

        GDAL_DATA=%SDK_ROOT%bin\gdal-data

        GDAL_DRIVER_PATH=%SDK_ROOT%bin\gdal\plugins

        PYTHONPATH=%SDK_ROOT%bin\gdal\python;%SDK_ROOT%bin\ms\python

        PROJ_LIB=%SDK_ROOT%bin\proj\SHARE

      建立相關環境變量後(本機win10_x64,我執行SDKShell.bat後並無添加相關環境變量,不知道是什麼問題,可能bat命令的版本不正確,重啓後也沒有,因而手動添加。),在cmd命令行裏面執行:mapserv -v,驗證是否安裝成功

      

        OUTPUT=PNG
        OUTPUT=JPEG
        OUTPUT=KML
        SUPPORTS=PROJ
        SUPPORTS=AGG
        SUPPORTS=FREETYPE
        SUPPORTS=CAIRO
        SUPPORTS=SVG_SYMBOLS
        SUPPORTS=SVGCAIRO
        SUPPORTS=ICONV
        SUPPORTS=FRIBIDI
        SUPPORTS=WMS_SERVER
        SUPPORTS=WMS_CLIENT
        SUPPORTS=WFS_SERVER
        SUPPORTS=WFS_CLIENT
        SUPPORTS=WCS_SERVER
        SUPPORTS=SOS_SERVER
        SUPPORTS=FASTCGI
        SUPPORTS=THREADS
        SUPPORTS=GEOS
        SUPPORTS=PBF
        INPUT=JPEG
        INPUT=POSTGIS
        INPUT=OGR
        INPUT=GDAL
        INPUT=SHAPEFILE

        這是安裝安裝成功,MapServer相關的輸入輸出以及支持項功能。

3、配置對IIS的支持

  1.基本要求和注意項

    1.1 你的IIs必須是ii7版本或更高

    1.2 MapServer使用的默認站點位置在C:\Inetpub\wwwroot

    1.3 全部的命令和操做請「以管理員方式運行」

  2.將安裝目錄下面bin\ms\apps\中的全部文件複製到bin文件夾中

    可經過cmd命令:xcopy E:\SvnWorkspace\LY_WEB_GIS\branches\Documents\ms4w-mapserver-for-wimdows\release-1911-x64-gdal-2-3-3-mapserver-7-2-1\bin\ms\apps\* E:\SvnWorkspace\LY_WEB_GIS\branches\Documents\ms4w-mapserver-for-wimdows\release-1911-x64-gdal-2-3-3-mapserver-7-2-1\bin

    紅色標記部分路徑,根據你解壓的實際路徑修改。

    

     

     

        

  3.建立C:\Inetpub\wwwroot\mapserver

    

  4.在C:\Inetpub\wwwroot\mapserver目錄下面建立一個web.congif文件

    web.config文件是站點控制文件,作.net開大的應該都知道,裏面的內容以下

 

      <?xml version="1.0" encoding="UTF-8"?>
      <configuration>
        <system.webServer>
          <handlers>
            <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\mapserv.exe" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="" />
          </handlers>
          <caching enabled="true" enableKernelCache="true" />
        </system.webServer>
      </configuration>

    注意:紅色路徑部分按照你安裝的mapserver實際路徑填寫

   5.在IIS網站名稱爲「Default Web Site」的默認80端口網站下面添加虛擬目錄,名稱爲mapserver 

 

    在cmd命令中執行:"%systemroot%\system32\inetsrv\appcmd" add app /site.name:"Default Web Site" /path:/mapserver /physicalPath:"C:\Inetpub\wwwroot\mapserver"

    或者你手動添加

    

 

  6.確保IIS安裝了 ISAPI 服務器擴展 以及 CGI 模塊

    ISAPI(Internet Server Application Programming Interface):能夠被 HTTP 服務器加載和調用的 DLL。Internet 服務器擴展也稱爲 Internet 服務器應用程序 (ISA),用於加強符合 Internet 服務器 API (ISAPI) 的服務器的功能。ISA 經過瀏覽器應用程序調用,而且將類似的功能提供給通用網關接口 (CGI) 應用程序。

    CGI(Common Gateway Interface):服務器運行時外部程序的規範,按CGI 編寫的程序能夠擴展服務器功能。CGI應用程序能與瀏覽器進行交互,還可經過數據庫API與數據庫服務器等外部數據源進行通訊,從數據庫服務器中獲取數據。格式化爲HTML文檔後,發送給瀏覽器,也能夠將從瀏覽器得到的數據放到數據庫中。

    

    

    在cmd中輸入:start /w pkgmgr /iu:IIS-CGI;IIS-ISAPIExtensions;IIS-ISAPIFilter;

    請重啓電腦。

  7.設置mapserver.exe爲FastCGI,並容許其在IIS下運行

    在cmd中執行如下兩個命令:

    命令1:"%systemroot%\system32\inetsrv\appcmd" set config -section:system.webServer/fastCgi /+"[fullPath='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']" /commit:apphost

    注意紅色文字部分按照你的實際安裝位置填寫

    

    打開C:\Windows\System32\inetsrv\Config\applicationHost.config文件,你能夠發現添加的改變

    

    命令2:"%systemroot%\system32\inetsrv\appcmd" set config /section:isapiCgiRestriction /+"[path='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',description='MapServer',allowed='True']"

    注意:紅色標記部分按照實際路徑填寫

    

    節點修改的位置

    

  8.打開http://localhost/mapserver/能夠查看站點

    

  顯示:「No query information to decode. QUERY_STRING is set, but empty.」表示mapserver已經在iis裏面成功配置爲 FastCGI應用。

4、設置一個應用

  1.    在安裝目錄下面建立文件夾apps\test\

    打開cmd輸入:md E:\SvnWorkspace\LY_WEB_GIS\branches\Documents\ms4w-mapserver-for-wimdows\release-1911-x64-gdal-2-3-3-mapserver-7-2-1\apps\test

    

    

    

    

  2.在test文件夾中建立test.map文件,並填寫以下內容

    2.1建立test.map文件

      在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\test

      主要:紅色文字部分按照實際安裝路徑填寫

      在cmd命令中輸入:cd.>test.map

      用來建立test.map

    

    

  2.填寫test.map文件內容    

    MAP
      EXTENT -180 -90 180 90
      # Set the path to where the map projections are stored
      # 設置地圖項目的存儲位置
      CONFIG "PROJ_LIB" "E:\SvnWorkspace\LY_WEB_GIS\branches\Documents\ms4w-mapserver-for-wimdows\release-1911-x64-gdal-2-3-3-mapserver-7-2-1\bin\proj\SHARE"
      NAME "TestMap"
      WEB
        METADATA
          "ows_enable_request" "*"
        END
      END
      PROJECTION
        "init=epsg:4326"
      END
      LAYER
        NAME "country_bounds"
        TYPE RASTER
        CONNECTION "http://demo.mapserver.org/cgi-bin/wms?"
        CONNECTIONTYPE WMS
        METADATA
          "wms_srs" "EPSG:4326"
          "wms_name" "country_bounds"
          "wms_server_version" "1.1.1"
          "wms_format" "image/png"
        END
      END
    END

  注意:紅色標記部分按照實際路徑填寫

    

  3.經過下面的路徑,打開你所建立的基於IIS的WMS服務應用

    路徑:http://localhost/mapserver/mapserv?map=E:/SvnWorkspace/LY_WEB_GIS/branches/Documents/ms4w-mapserver-for-wimdows/release-1911-x64-gdal-2-3-3-mapserver-7-2-1/apps/test/test.map&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&LAYERS=country_bounds&STYLES=&CRS=EPSG:4326&BBOX=-180,-90,180,90&WIDTH=400&HEIGHT=300&FORMAT=image/png

    注意:紅色部分根據實際路徑填寫

 

    

 

5、添加日誌記錄

  1.在test.map文件下面添加以下內容    

    # DEBUG a value from 0 (OFF) to 5 (detailed)
    # DEBUG a ,0-5之間,0關閉日誌,5最詳細
    DEBUG 5
    CONFIG "MS_ERRORFILE" "logs\ms.log"

  

  2.建立文件夾logs

    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\test

    cmd輸入:md logs

 

    注意:紅色路徑部分按照實際路徑填寫

    由於日誌文件時根據map文件相對路徑決定的,因此測試項目的這個logs文件夾創建在test.map通目錄

  3.根據當前站點應用程序池設置IIS對logs文件夾的讀寫權限

    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\test\logs" /grant "IIS AppPool\DefaultAppPool":(OI)(CI)RW

    注意:紅色部分根據實際路徑填寫

    

    

    或者你右鍵點擊log文件夾,在安全中添加IIS NETWORK對象有相關權限。

    刷新站點,自動建立ms.log文件。說明權限正確,已經開啓日誌記錄

     

總結

  其實我就是個搬磚的,按照官網說明文檔一步一步來。官網的文檔比較老了,因此在配置test.map文件時出現了點問題。

  其中,OUTPUT並不包含GIF,而官網的test.map內容中有"wms_format"          "image/gif",官網配置樣例版本的MapServer版本比較老,新版本已經不支持gif,或者說你能夠從新編譯源代碼,使其支持gif輸出。

  詳情可看源碼release-1911-x64-gdal-2-3-3-mapserver-7-2-1-src.zip中的nmake.opt文件,其中214行寫到「Historical defines to use GIF as a result of the old Unisys patent」

  如何添加其餘輸入輸出,請見官網文檔,如添加PDF格式輸出。https://www.mapserver.org/output/pdf.html

  

  Gis門外漢,歡迎拍磚。

相關文章
相關標籤/搜索