zoukankan      html  css  js  c++  java
  • MapServer Configuring with IIS

    MapServer Configuring with IIS

    一、前言

      1.MapServer简介

      MapServer是一个用C语言编写的开源地理数据呈现引擎。除了浏览地理信息系统数据之外,MapServer还允许您创建“地理图像地图”,即可以引导用户访问内容的地图。

      MapServer最初是由明尼苏达大学(UMN)Fornet项目与美国宇航局和明尼苏达自然资源部(MNDNR)合作开发的。后来,它由Terrasip项目主办,这是一个由美国国家航空航天局赞助的UMN和一个土地管理利益联盟之间的项目。

      MAPServer是OsGeo基金会的创始项目之一,并由越来越多的开发者(从世界各地接近20)维护。它得到了各种组织的支持,这些组织为增强和维护提供资金,并且由由开发人员和其他贡献者组成的MapServer项目指导委员会在OSGEO内进行管理。所有源代码都可以通过Github公开使用。

      高级制图输出

        与比例相关的特征绘制和应用程序执行

        功能标签,包括标签冲突调解

        完全可定制的模板驱动输出

        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。

    二、准备工作

      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 %%~poci.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%bingdalplugins-optional" mkdir "%SDK_ROOT%bingdalplugins-optional"
          if exist "%SDK_ROOT%bingdalpluginsogr_OCI.dll" move "%SDK_ROOT%bingdalpluginsogr_OCI.dll" "%SDK_ROOT%bingdalplugins-optionalogr_OCI.dll"
          if exist "%SDK_ROOT%bingdalpluginsgdal_GEOR.dll" move "%SDK_ROOT%bingdalpluginsgdal_GEOR.dll" "%SDK_ROOT%bingdalplugins-optionalgdal_GEOR.dll"

          :setenv2
          SET "PATH=%SDK_ROOT%bin;%SDK_ROOT%bingdalpythonosgeo;%SDK_ROOT%binprojapps;%SDK_ROOT%bingdalapps;%SDK_ROOT%binmsapps;%SDK_ROOT%bingdalcsharp;%SDK_ROOT%binmscsharp;%SDK_ROOT%bincurl;%PATH%"
          SET "GDAL_DATA=%SDK_ROOT%bingdal-data"
          SET "GDAL_DRIVER_PATH=%SDK_ROOT%bingdalplugins"
          SET "PYTHONPATH=%SDK_ROOT%bingdalpython;%SDK_ROOT%binmspython"
          SET "PROJ_LIB=%SDK_ROOT%binprojSHARE"


          :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:SvnWorkspaceLY_WEB_GISranchesDocumentsms4w-mapserver-for-wimdows elease-1911-x64-gdal-2-3-3-mapserver-7-2-1

          PATH中添加:%SDK_ROOT%bin;%SDK_ROOT%bingdalpythonosgeo;%SDK_ROOT%binprojapps;%SDK_ROOT%bingdalapps;%SDK_ROOT%binmsapps;%SDK_ROOT%bingdalcsharp;%SDK_ROOT%binmscsharp;%SDK_ROOT%bincurl;

            注意,%SDK_ROOT%bin;表示:E:SvnWorkspaceLY_WEB_GISranchesDocumentsms4w-mapserver-for-wimdows elease-1911-x64-gdal-2-3-3-mapserver-7-2-1in;

          新建环境变量:

            GDAL_DATA=%SDK_ROOT%bingdal-data

            GDAL_DRIVER_PATH=%SDK_ROOT%bingdalplugins

            PYTHONPATH=%SDK_ROOT%bingdalpython;%SDK_ROOT%binmspython

            PROJ_LIB=%SDK_ROOT%binprojSHARE

          创建相关环境变量后(本机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相关的输入输出以及支持项功能。

    三、配置对IIS的支持

      1.基本要求和注意项

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

        1.2 MapServer使用的默认站点位置在C:Inetpubwwwroot

        1.3 所有的命令和操作请“以管理员方式运行”

      2.将安装目录下面binmsapps中的所有文件复制到bin文件夹中

        可通过cmd命令:xcopy E:SvnWorkspaceLY_WEB_GISranchesDocumentsms4w-mapserver-for-wimdows elease-1911-x64-gdal-2-3-3-mapserver-7-2-1binmsapps* E:SvnWorkspaceLY_WEB_GISranchesDocumentsms4w-mapserver-for-wimdows elease-1911-x64-gdal-2-3-3-mapserver-7-2-1bin

        红色标记部分路径,根据你解压的实际路径修改。

        

         

         

            

      3.创建C:Inetpubwwwrootmapserver

        

      4.在C:Inetpubwwwrootmapserver目录下面创建一个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:SvnWorkspaceLY_WEB_GISranchesDocumentsms4w-mapserver-for-wimdows elease-1911-x64-gdal-2-3-3-mapserver-7-2-1mapserv.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%system32inetsrvappcmd" add app /site.name:"Default Web Site" /path:/mapserver /physicalPath:"C:Inetpubwwwrootmapserver"

        或者你手动添加

        

      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%system32inetsrvappcmd" set config -section:system.webServer/fastCgi /+"[fullPath='E:SvnWorkspaceLY_WEB_GISranchesDocumentsms4w-mapserver-for-wimdows elease-1911-x64-gdal-2-3-3-mapserver-7-2-1inmapserv.exe']" /commit:apphost

        注意红色文字部分按照你的实际安装位置填写

        

        打开C:WindowsSystem32inetsrvConfigapplicationHost.config文件,你可以发现添加的改变

        

        命令2:"%systemroot%system32inetsrvappcmd" set config /section:isapiCgiRestriction /+"[path='E:SvnWorkspaceLY_WEB_GISranchesDocumentsms4w-mapserver-for-wimdows elease-1911-x64-gdal-2-3-3-mapserver-7-2-1inmapserv.exe',description='MapServer',allowed='True']"

        注意:红色标记部分按照实际路径填写

        

        节点修改的位置

        

      8.打开http://localhost/mapserver/可以查看站点

        

      显示:“No query information to decode. QUERY_STRING is set, but empty.”表示mapserver已经在iis里面成功配置为 FastCGI应用。

    四、设置一个应用

      1.    在安装目录下面创建文件夹apps est

        打开cmd输入:md E:SvnWorkspaceLY_WEB_GISranchesDocumentsms4w-mapserver-for-wimdows elease-1911-x64-gdal-2-3-3-mapserver-7-2-1apps est

        

        

        

        

      2.在test文件夹中创建test.map文件,并填写如下内容

        2.1创建test.map文件

          在cmd命令中输入:cd /d E:SvnWorkspaceLY_WEB_GISranchesDocumentsms4w-mapserver-for-wimdows elease-1911-x64-gdal-2-3-3-mapserver-7-2-1apps est

          主要:红色文字部分按照实际安装路径填写

          在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:SvnWorkspaceLY_WEB_GISranchesDocumentsms4w-mapserver-for-wimdows elease-1911-x64-gdal-2-3-3-mapserver-7-2-1inprojSHARE"
          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

        注意:红色部分根据实际路径填写

        

    五、添加日志记录

      1.在test.map文件下面添加如下内容    

        # DEBUG a value from 0 (OFF) to 5 (detailed)
        # DEBUG a ,0-5之间,0关闭日志,5最详细
        DEBUG 5
        CONFIG "MS_ERRORFILE" "logsms.log"

      

      2.创建文件夹logs

        cmd输入:cd /d E:SvnWorkspaceLY_WEB_GISranchesDocumentsms4w-mapserver-for-wimdows elease-1911-x64-gdal-2-3-3-mapserver-7-2-1apps est

        cmd输入:md logs

        注意:红色路径部分按照实际路径填写

        因为日志文件时根据map文件相对路径决定的,所以测试项目的这个logs文件夹建立在test.map通目录

      3.根据当前站点应用程序池设置IIS对logs文件夹的读写权限

        cmd输入:icacls "E:SvnWorkspaceLY_WEB_GISranchesDocumentsms4w-mapserver-for-wimdows elease-1911-x64-gdal-2-3-3-mapserver-7-2-1apps estlogs" /grant "IIS AppPoolDefaultAppPool":(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门外汉,欢迎拍砖。

        

  • 相关阅读:
    HTML5与jQuery实现渐变绚丽网页图片效果【html5】
    javascript中对象的理解
    不用租服务器就可以做各种应用
    javascript dom 编程艺术[笔记]
    CSS那些事笔记(一入门)
    jQuery替换table中的内容——显示进度条
    html5 meta标签属性整理
    JavaScript 你好!
    在HTML中使用JavaScript需要注意的问题
    定时关机软件
  • 原文地址:https://www.cnblogs.com/eshinex/p/10272104.html
Copyright © 2011-2022 走看看