MapServer教程

家住魔仙堡 提交于 2020-11-19 07:35:38

https://mapserver.org/

MapServer是一个开放源代码平台,用于将空间数据和交互式地图应用程序发布到Web。由OSGEO批准的MapServer项目指导委员会(PSC)负责管理和管理由世界各地的开发人员和用户维护、改进和支持的项目。有关邮件列表等,请参阅社区活动页。

About:

MapServer是一个用C语言编写的开源地理数据呈现引擎。除了浏览地理信息系统数据之外,MapServer还允许您创建“地理图像地图”,即可以引导用户访问内容的地图。例如,明尼苏达州的dnr娱乐指南针通过一个应用程序为用户提供超过10000个网页、报告和地图。同一个应用程序充当站点其他部分的“地图引擎”,在需要时提供空间上下文。有关更多实时示例,请参阅MapServer网站库

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

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

  • Advanced cartographic output高级制图输出

    • Scale dependent feature drawing and application execution 与比例相关的特征绘制和应用程序执行

    • Feature labeling including label collision mediation 功能标签,包括标签冲突中介

    • Fully customizable, template driven output 完全可定制的模板驱动输出

    • TrueType fonts TrueType字体

    • Map element automation (scalebar, reference map, and legend)  地图元素自动化(比例尺、参考地图和图例)

    • Thematic mapping using logical- or regular expression-based classes 使用基于逻辑或正则表达式类的主题地图

  • Support for popular scripting and development environments 支持流行的脚本和开发环境

    • PHP, Python, Perl, Ruby, Java, and .NET

  • Cross-platform support 跨平台支持

    • Linux, Windows, Mac OS X, Solaris, and more

  • Support of numerous Open Geospatial Consortium (OGC) standards 支持大量的开源空间地理协会标准

    • WMS (client/server), non-transactional WFS (client/server), WMC, WCS, Filter Encoding, SLD, GML, SOS, OM

  • A multitude of raster and vector data formats多种栅格和矢量数据格式

  • Map projection support地图投影支持

    • On-the-fly map projection with 1000s of projections through the PROJ library

https://www.cnblogs.com/eshinex/p/10275700.html

 

配置数据:https://www.osgeo.cn/post/i0a19

发布数据:

应用开发:

源码下载:它是如何将tomcat给嵌入进来的 https://mapserver.org/download.html

https://www.osgeo.cn/webgis/

 git:https://github.com/mapserver/mapserver

已经有168个版本的release了

Development:https://mapserver.org/development/index.html#development

 

MapServer教程1 第一章

 第一章 Introduction 简介

An Introduction to MapServer MapServer简介

  • MapServer Overview 概括
  • Anatomy of a MapServer Application MapServer应用程序剖析
  • Installation and Requirements 安装和要求
  • Introduction to the Mapfile Mapfile简介
  • Making the Site Your Own 制作个人站点
  • Enhancing your site 增强你的站点
  • How do I get Help? 从哪寻求帮助

 

第一章 Introduction 简介

1.1.1 MapServer Overview 概括

MapServer是一个流行的开源项目,其目的是通过Internet显示动态空间地图。. Some of its major features include:

•支持显示和查询数百种光栅、矢量和数据库格式
•能够在各种操作系统(Windows、Linux、Mac OS X等)上运行
支持流行的脚本语言和开发环境(PHP、Python、Perl、Ruby、Java、.NET)
•飞行中的预测
•高质量渲染
•完全可定制的应用程序输出
•许多现成的开源应用程序环境

在其最基本的形式中,mapserver是一个CGI程序,它在Web服务器上处于非活动状态。当请求发送到MapServer时,它使用请求URL和映射文件中传递的信息来创建请求映射的图像。请求还可以返回图例、比例尺、参考地图和作为CGI变量传递的值的图像。

另外查看:术语表概述了本文档中的许多行话术语。

可以通过mapscript或模板化来扩展和定制mapserver。它可以支持许多不同的矢量和光栅输入数据格式,并且可以生成多种输出格式。大多数预编译的mapserver发行版都包含其大部分功能。

另外查看:在Unix上编译和在Win32上编译

注意:mapscript为mapserver提供了一个脚本接口,用于构建Web和独立应用程序。mapscript可以独立于cgi mapserver使用,它是一个可加载模块,可以将mapserver功能添加到您最喜欢的脚本语言中。MpScript目前存在于PHP、Perl、Python、Ruby、Tcl、Java和.NET调味品中。

本指南不会明确讨论mapscript,有关详细信息,请参阅mapscript参考(第5章会讲)。

1.1.2 MapServer应用程序剖析
一个简易的MapServer应用程序包括:

• Map File - 用于MapServer应用程序的结构化文本配置文件。它定义了地图的区域,告诉MapServer程序:你的数据在哪里,以及输出图像的位置。它还定义了地图层,包括它们的数据源、投影和符号。它必须具有.map扩展名,否则MapServer将无法识别它。

另行查看: MapServer Mapfile Reference(第4章)

• 地理数据 - MapServer可以使用许多地理数据源类型。默认格式为ESRI形状格式。可以支持许多其他数据格式,下面将在向站点添加数据时进一步讨论这一点。

See also:
Vector Input Reference and Raster Input Reference 

• HTML页面 - 用户和MapServer之间的接口。它们通常位于web根目录中。在最简单的形式中,可以调用mapserver在HTML页面上放置静态映射图像。为了使地图具有交互性,图像被放置在页面的HTML表单中。

CGI程序是无状态的,他们得到的每一个请求都是新的,他们不记得上一次被你的应用程序击中的事情。因此,每次应用程序向MapServer发送请求时,都需要在隐藏的表单变量或URL变量中传递上下文信息(什么层上,您在地图上的位置,应用程序模式等)。

一个简易的MapServer CGI应用程序可能包括两个HTML页面: 

– 初始化文件-使用带有隐藏变量的表单向Web服务器和MapServer发送初始查询。此表单可以放在另一个页面上,也可以通过将初始化信息作为URL中的变量传递来替换。

– 模板文件-控制MapServer输出的地图和图例在浏览器中的显示方式。通过引用模板html中的mapserver cgi变量,您允许mapserver使用与应用程序当前状态相关的值(例如,映射图像名称、引用图像名称、映射范围等)填充这些变量,因为它创建了供浏览器读取的html页面。该模板还确定用户如何与MapServer应用程序交互(浏览、缩放、平移、查询)。

See also:Templating 

https://blog.csdn.net/qq_38237806/article/details/80361683

https://blog.csdn.net/u010924834/article/details/53434322

• mapserver cgi—接收请求并返回图像、数据等的二进制或可执行文件,位于Web服务器的cgi bin或scripts目录中。Web服务器用户必须对其所在的目录具有执行权限,并且出于安全原因,它不应位于Web根目录中。默认情况下,此程序称为mapserv

• Web/HTTP服务器-当用户_a_zs浏览器点击时提供HTML页面。在安装MAPServer的计算机上,您需要一个工作的Web(HTTP)服务器,如Apache或Microsoft Internet Information Server。

1.1.3 安装及要求

硬件要求
mapserver在Linux、Windows、Mac OS X、Solaris等系统上运行。要编译或安装某些必需的程序,您可能需要计算机的管理权限。人们通常会问一些关于MapServer应用程序最低硬件规格的问题,但答案实际上是特定于单个应用程序的。为了开发和学习的目的,一个非常小的机器可以很好地工作。对于部署,您需要研究从数据到服务器配置的所有优化。

软件要求
您需要在安装MAPServer的计算机上安装一个工作正常且配置正确的Web(HTTP)服务器,如Apache或Microsoft Internet Information Server。
如果您在Windows计算机上,并且没有安装Web服务器,建议您使用“ms4w”,它将安装预配置的Web服务器、mapserver、mapcache、php、tinyows和许多其他实用程序。Windows用户也可以选择签出OSGEO4W安装程序。
本介绍将假设您正在使用MS4W安装进行后续操作。在Linux或Mac OS X上获取mapserver应该很简单。访问下载以安装Mac OS X和Linux上的预编译MapServer版本。

注意:osgeo live虚拟机也包含可供使用的mapserver

您还需要一个Web浏览器和一个文本编辑器(vi、emacs、notepad++、textpad、homesite)来修改HTML和映射文件。

技能要求
除了学习MapServer应用程序的不同组件如何协同工作以及学习映射文件语法之外,构建基本应用程序还需要对几个技能领域有一些概念上的理解和熟练掌握。
您需要能够创建或至少修改HTML页面,并了解HTML表单的工作方式。由于MapServer应用程序的主要目的是创建地图,因此您还需要了解地理数据的基础知识,以及地图投影。随着应用程序变得越来越复杂,SQL、DHTML/JavaScript、Java、数据库、表达式、编译和脚本编写的技巧可能非常有用。

Windows安装
注意:可以从各种来源获得针对MapServer的预编译二进制文件,请参阅的Windows部分
下载页面

MS4W(MapServer for Windows)是包含Apache Web服务器、MapServer及其所有依赖项和工具的长时间安装程序;MS4W还包含多个附加包,其中包含60多个预配置的MapServer配置文件(MapFile)和数据。以下步骤说明如何安装MS4W:

4)选择要安装的软件包。请务必选择_aij_mapserver itasca演示应用程序_a_i,因为我们稍后将使用此演示。
5)点击_aijnext_a_i按钮
6)单击_aijbrowse_a_e_a_i按钮,选择安装路径。您可以安全地保留默认值(c/),安装程序将创建c:/ms4w。

7)点击_aijnext_a_i按钮
8)输入用于Apache服务的端口号。在大多数情况下,您可以将端口保留为80,除非有什么东西正在使用该端口,如IIS服务。
10)点击_aijinstall_a_i按钮

1.1.4 MapFile文件简介
.map文件是用于MapServer数据访问和样式设置的基本配置文件。该文件是一个ASCII文本文件,由不同的对象组成。每个对象都有各种可用的参数。所有.map文件(或map file)参数都记录在mapfile引用中。下面是一个仅显示一个图层的简单地图文件示例,以及地图图像输出:

注:
•地图文件中的注释使用_a__a_z字符´指定。
•MapServer从上到下解析映射文件,因此将最后绘制映射文件末尾的层。
(意味着它们将显示在其他层的顶部)
•始终建议使用相对路径
•路径应引用起来(接受单引号或双引号)
•上述示例建立于以下目录结构:
  –只要Web服务器可以访问映射文件,它就可以放在任何地方。通常,一个尽量避免把它放在一个可以在网上访问的地方。让我们说它已经就位了在/home/msuser/mapfiles中/
  –字体文件的位置是相对于地图文件给出的,在这种情况下:/home/msuser/etc/fonts.txt

  –数据集(blue大理石.gif)的位置相对于地图文件给出,在这种情况下:/主页/用户/数据/
  –符号文件的位置相对于地图文件给出,在这种情况下:/home/msuser/etc/symbols.txt
  –mapserver生成的文件将放在/ms4w/tmp/ms_tmp/目录中。网络服务器必须能够在此目录中放置文件。Web服务器必须将此目录作为/ms_tmp提供(如果Web服务器位于www.ms.org上,则目录的网址必须为:http://www.ms.org/ms_tmp/。

MAP Object 

•范围是以输出图的单位表示的输出范围
•大小是地图图像的宽度和高度(像素)
•ImageColor是默认的图像背景色

提示:MapServer接受以RGB值或十六进制字符串表示的颜色。

注意:MapServer当前使用的是基于像素中心的扩展模型,这与GDAL或WMS使用的模型稍有不同。

LAYER Object

•从MapServer 5.0开始,对mapfile中的层数没有限制
•DATA参数相对于MAP对象的SHAPEPATH参数。
•如果文件名中没有提供DATA扩展名,MapServer将假定其为ESRI形状格式(.shp)

Raster Layers 栅格图层

See also:
  Raster Data

Vector Layers矢量图层 
可以显示点、线或多边形类型的向量层。以下示例显示如何使用outlinecolor参数仅显示类型多边形图层中的线:

提示:MapServer接受以RGB值或十六进制字符串表示的颜色。

See also:
  Vector Data 
CLASS and STYLE Objects类和样式对象

•典型的样式信息存储在图层LAYER的类CLASS和样式STYLE对象中。
•从MapServer 5.0开始,对映射文件中的类或样式数量没有限制
•下面的示例显示了如何使用重叠样式STYLE对象显示具有两种颜色的路线。

 

 提示:MapServer接受以RGB值或十六进制字符串表示的颜色。

SYMBOLs 符号

•可以直接在映射文件中定义,也可以在单独的文件中定义
•单独的文件方法必须使用MAP对象中的SYMBOLSET参数:

其中symbols.txt可能包含:

地图文件将包含:

另请参见:
Cartographical Symbol Construction with MapServer, Symbology Examples, and SYMBOL

LABEL 标签
• 在一个Class对象内定义

• 在Layer对象中的Labelitem参数可以用来指定为数据的标签的属性。标签以FONT显示,在FONTSET文件(设置在Map对象里)中声明。FONTSET文件包含对可用字体名的引用。ENCODING描述了文件中使用的哪个编码(请参见MapServer中的国际字符显示)。

引用上述字体之一的示例label对象可能如下所示:

See also:
LABELFONTSET 
CLASS Expressions 
MapServer支持在一个Layer中三种类型的CLASS表达式(Layer中的ClassItem决定了前两种类型表达式要使用的属性):

1)字符串比较

2)正则表达式

3)逻辑表达式

注意:尽可能避免使用逻辑表达式,因为它们在绘制时间方面非常昂贵。

See also:
Expressions 
INCLUDE 
当添加到MapServer 4.10之后,mapfile的任何部分现在都可以存储在单独的文件中,并使用include参数添加到主mapfile中。要包含的文件名可以有任何扩展名,并且它总是相对于主.map文件。以下是一些潜在的用途:

•层Layers可以存储在文件中,并包含在任意数量的应用程序中
•样式Styles也可以存储并包含在多个应用程序中

以下是使用mapfile includes在单独文件中包含层定义的示例:
如果_a_shadedrelief.lay_a_z包含:

因此,主mapfile将包含:

以下是一个映射文件的示例,其中所有层都在单独的.lay文件中,所有其他对象(web、reference、scalebar等)都存储在一个aij.ref a i文件中:

警告:映射文件必须具有.map扩展名,否则MapServer将无法识别它们。但是,include文件可以有任何扩展名。

See also:
INCLUDE

Get MapServer Running 让MapServer运行

您可以通过在命令行上运行带有-v参数的mapserver可执行文件(mapserv)来测试mapserver是否工作。

通过-setup.exe安装程序安装的ms4w用户可以使用桌面上的ms4w shell快捷方式,然后在命令行运行mapserv-v。未使用-setup.exe安装程序的ms4w用户可以在测试mapserv-v命令之前打开命令提示窗口cd到其安装文件夹,然后执行setenv.bat。

您还可以直接向mapserver cgi程序发送HTTP请求,而无需传递任何配置变量(例如http://127.0.0.1/cgi-bin/mapserv.exe)。如果您收到消息,_a_no query information to decode.未设置查询字符串。_a_z,您的安装正在工作。

Get Demo Running 运行Demo
警告:MS4W用户不必执行此步骤,因为上面的说明已经安装了演示。您应该在页面底部看到一个aij mapserver itasca demo application a i部分(单击ms4w localhost快捷方式后)。

1.1.5 使demo成为您自己的网站

现在您有了一个正在运行的MapServer演示,您可以使用该demo来显示您自己的数据。将新图层添加到地图文件中,以引用您自己的地理数据图层(您可能希望删除现有图层或将其状态设置为“关闭”)。

除非添加的图层与演示的地理区域相同,否则请修改地图范围以匹配数据的范围。要确定数据的范围,可以使用ogrinfo。如果你可以使用地理信息系统,你也可以使用它。地图范围需要以输出投影的单位表示。

如果添加具有不同地理参考系统的地理数据层,则需要修改地图文件以向地图(定义输出投影/地理参考系统)和每个层(定义图层数据集的地理参考系统)添加投影块。

向你的网站添加数据

MapServer支持多种数据输入格式,本地支持,如果使用开放源代码库gdal和ogr编译,则支持更多格式。

矢量数据

矢量数据包括由点、线和多边形组成的特征。MapServer默认支持ESRI形状格式,但它可以编译为支持空间启用的数据库(如PostgreSQL Postgis)和文件格式(如地理标记语言(GML)、MapInfo、带分隔符的文本文件)以及其他格式(包括OGR)。

有关如何将不同地理数据源添加到MapServer项目的示例,请参见矢量数据参考。

栅格数据

光栅数据是图像或网格数据。通过gdal,mapserver支持大多数光栅格式-请参阅gdal格式列表。在光栅数据参考中可以找到更具体的信息。

注:由于版本6.2 MapServer依赖GDAL进行所有光栅访问

投影

因为地球是圆的,你的显示器(或纸质地图)是平的,当你在二维图像中显示地理数据时,就会发生失真。投影允许您在平面上表示地理数据。这样做时,数据的某些原始属性(例如面积、方向、距离、比例或一致性)将被扭曲。不同的投影在准确地描绘不同的属性方面表现出色。科罗拉多大学有一本很好的地图投影入门书。

使用MapServer,如果您将所有空间数据集保持在同一投影(或未投影的经纬度),则不需要在地图文件中包含任何投影信息。在构建第一个MapServer应用程序时,建议进行这种简化

在使用proj.4支持编译mapserver时,可以实现动态投影。有关如何在Windows上启用proj.4支持的说明,可以在wiki上找到。

1.1.6增强网站功能

添加查询功能

查询空间数据有两种主要方法。两种方法都通过使用模板和CGI变量替换来返回数据。QUERYMAP可用于map查询结果。

为了便于查询,每个mapfile层必须定义一个模板,或者层中的每个类必须定义一个模板。有关用于定义查询的CGI变量的更多信息,可以在MapServer CGI引用中找到。

属性查询

用户根据与该功能关联的数据选择功能。_a_向我展示深度大于100英尺_a_z的所有湖泊,其中_a_depth_a_z是形状数据集或空间数据库中的字段。属性查询是通过在URL(或表单发布)中将查询定义信息传递给MapServer来完成的。mode=itemquery返回单个结果,mode=itemnquery返回多个结果集。

请求还必须包括一个Qlayer(标识要查询的层)和一个包含查询字符串的qstring。也可以将qitem与qstring结合使用,以定义要查询的字段。属性查询仅适用于map文件中设置的extent范围内。

空间查询

用户根据单击地图或用户定义的选择框选择features。请求再次通过URL或表单投递传递。通过设置模式mode=QUERY查询,用户将返回一个离单击点最近的feature。在模式mode=Query查询中,将返回通过单击地图或用户定义的选择框找到的所有features特征。其他查询选项可以在CGI文档中找到。

界面

See: OpenLayers http://openlayers.org, GeoMOOSE http://geomoose.org

注意:MS4W用户可以安装Openlayers和Geomoose作为现成的软件包。

数据优化

在优化MapServer应用程序的性能方面,数据组织至少和硬件配置一样重要。MapServer在它所做的事情上非常有效,但是通过减少它在用户请求时需要做的处理量,您可以极大地提高性能。以下是一些规则:

•索引数据-通过使用shptree为Shape数据集创建空间索引。还应为空间感知数据库(如Postgis和Oracle Spatial)创建空间索引。还应为空间感知数据库(如Postgis和Oracle Spatial)创建空间索引。

•切片您的数据-理想情况下,您的数据将被a_a_z分割成与显示数据的大小相同的片段。在搜索一个大的形状数据集或图像时,您只需要显示一个小区域,这是不必要的开销。通过将数据分解成图块并创建图块索引,mapserver只需要打开和搜索感兴趣的数据文件。可以将形状数据集拆分为较小的图块,然后使用tile4ms实用程序创建tileindex形状数据集。也可以为光栅文件创建TileIndex形状数据集。

•对数据进行预分类-MapServer允许使用非常复杂的表达式对数据进行分类。但是,使用逻辑表达式和正则表达式比使用字符串比较更耗费资源。为了提高效率,您可以提前将数据划分为类,创建一个用作类项的字段,并用一个标识类的简单值填充它,例如用于四类数据集的1、2、3或4。然后可以对类表达式进行简单的字符串比较。

•预处理您的图像-预先进行资源密集型处理。有关详细信息,请参见光栅数据参考。

•概述概述-创建一个更简单、更通用的数据层,以小比例显示,然后使用与比例相关的层,利用层Minscale和层Maxscale,在用户放大时显示更详细的数据层。同样的概念也适用于图像。

See also:
Optimization 
1.1.7如何获得帮助?

文档
•官方的MapServer文档位于此网站上。
•用户提供的文档存在于MapServer wiki上。

用户邮件列表
注册并将问题发布到MapServer用户邮件列表。列表中的问题通常会很快得到回答。
通常是由开发人员自己完成的。需要记住的几点:
1。首先在档案中搜索你的答案,人们会厌倦一遍又一遍地回答同样的问题。
2。提供MapServer安装的版本和配置信息,以及
地图和模板文件。
3。总是把你的回答发回整个列表,而不仅仅是回复你问题的人。

IRC
可以在Internet中继聊天中找到MapServer用户和开发人员。频道是irc.freenode.net上的mapserver。

报告Bug
在MapServer问题跟踪器上报告软件错误。在MapServer上报告文档错误
文档问题跟踪程序。

Tutorial

这里是一个新用户的快速教程。

测试套件
下载MapServer测试套件以演示某些MapServer功能。


泰勒·米切尔的一本书《网络地图图解》,描述得很好,并为使用提供了现实世界的例子。Web映射概念、开源GIS软件、MapServer、Web服务和PostGIS。
由Schuyler Erle、Rich Gibson和Jo Walsh设计的《地图黑客》,创造性地演示了数字地图工具和概念。MapServer只出现在100个黑客中的一小部分,但更多的对概念和灵感有用。
《开始MapServer:OpenSourceGIS开发》,由BillKropla编写。据发布者介绍,它涵盖了安装和配置、基本的MapServer主题和功能、动态数据的合并、高级主题,以及实际应用程序的创建。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!