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 shapfiles、postgis、spaceialite、esri arcsde、oracle spatial、mysql以及许多其他通过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 %%~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相关的输入输出以及支持项功能。
三、配置对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应用。
四、设置一个应用
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
注意:红色部分根据实际路径填写
五、添加日志记录
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门外汉,欢迎拍砖。
MapServer Configuring with IIS的更多相关文章
- MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.3 Displaying Classes in a Layer
MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.3 Displaying Classes in a Layer 一.前言 关于第一节的 ...
- 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用 ...
- MapServer Tutorial——MapServer7.2.1教程学习——第一节:MapServer的基本配置管理,静态地图应用以及MapFile文件
MapServer Tutorial——MapServer7.2.1教程学习——第一节:MapServer的基本配置管理,静态地图应用以及MapFile文件 前言 万事开头难,有了<MapSer ...
- MapServer Tutorial——MapServer7.2.1教程学习——教程背景
MapServer Tutorial——MapServer7.2.1教程学习——教程背景 一.前言 目前处于MapServer学习入门阶段,所以每一步都需要打下扎实基础.尽自己最大的努力,去学习知识的 ...
- MapServer Tutorial——MapServer7.2.1教程学习(大纲)
MapServer Tutorial——MapServer7.2.1教程学习(大纲) 前言 最近在学习Gis方面的知识,因为电脑硬件配置偏低,顾选择MapServer入手.网上搜索MapServer系 ...
- GDAL——命令使用专题——gdallocationinfo命令
GDAL——命令使用专题——gdallocationinfo命令 前言 GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数 ...
- GDAL——命令使用专题——gdalsrsinfo命令
GDAL——命令使用专题——gdalsrsinfo命令 前言 GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库. ...
- GDAL——命令使用专题——gdalinfo命令
GDAL——命令使用专题——gdalinfo命令 前言 GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库.它利用 ...
- GDAL——命令使用专题——ogrinfo命令
GDAL——命令使用专题——ogrinfo命令 前言 GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库.它利用抽象 ...
随机推荐
- 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业
2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...
- 高并发架构系列:MQ消息队列的12点核心原理总结
消息队列已经逐渐成为分布式应用场景.内部通信.以及秒杀等高并发业务场景的核心手段,它具有低耦合.可靠投递.广播.流量控制.最终一致性 等一系列功能. 无论是 RabbitMQ.RocketMQ.Act ...
- python使用grpc调用rpc接口
proto文件: syntax = "proto3"; package coupon; // //message UnsetUseC2URequest { // int64 bid ...
- 说一说javascript的异步编程
众所周知javascript是单线程的,它的设计之初是为浏览器设计的GUI编程语言,GUI编程的特性之一是保证UI线程一定不能阻塞,否则体验不佳,甚至界面卡死. 所谓的单线程就是一次只能完成一个任务, ...
- C# 获取 mp3文件信息【包括:文件大小、歌曲长度、歌手、专辑】
C# 获取 mp3文件信息[包括:文件大小.歌曲长度.歌手.专辑] 第一种方式:[代码已验证] // http://bbs.csdn.net/topics/390392612 string fil ...
- Android -- 贝塞尔曲线公式的推导和简单使用
1,最近看了几个不错的自定义view,发现里面都会涉及到贝塞尔曲线知识,深刻的了解到贝塞尔曲线是进阶自定义view的一座大山,so,今天先和大家来了解了解. 2,贝塞尔曲线作用十分广泛,简单举几个的栗 ...
- [ Build Tools ] Repositories
仓库介绍 http://hao.jobbole.com/central-repository/ https://my.oschina.net/pingjiangyetan/blog/423380 ht ...
- PTA第一个编程题总结
7-1 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数 ...
- Linux上不了网的几个排查点
下面是所有系统通用排查流程: 1.先ping网关: 例ping 192.168.12.1: 如果能通说明本地IP配置和本地到路由器的链路未发生问题. 如果不通需要检查本地设置和本地到路由的网线连接状态 ...
- 【 记忆网络 1 】 Memory Network
2015年,Facebook首次提出Memory Network. 应用领域:NLP中的对话系统. 1. 研究背景 大多数机器学习模型缺乏一种简单的方法来读写长期记忆. 例如,考虑这样一个任务:被告知 ...