基于MapServer的WebGIS开发

摘要: WebGIS 是将 Web 技术和 GIS 技术相结合的新技术,有着广泛的应用。通过 WebGIS 技术,客户端仅需使用浏览器(不一定包含专门插件)就可以对分布在 Web 上的 GIS 数据进行查询、分析等交互操作。实现 WebGIS 技术之一是在服务器端使用 CGI 技术,由美国明尼苏达大学开发的 MapServer 就是采用这种技术。本文将详细介绍实现 WebGIS 的开源软件 MapServer4.4.2 的配置文件和它的两个独立模块,及应用它们开发 WebGIS 的方法。

关键词: MapServer WebGIS ,开源, CGI ,脚本语言

1 ,背景介绍

地理信息系统对地表信息建立数学模型,利用计算机技术对数据进行存储,处理,分析。 其中采用 Web 技术的地理信息系统即 WebGIS WebGIS 的关键特征是面向对象、分布式和互操作。它将 GIS 数据和功能封装成对象,并且这些对像支持分布式计算,可以存储在不同的服务器上;对象通过一致的通信协议,可以方便的进行交换和交互操作 [1]

WebGIS 的实现方法之一是利用 Common  Gateway Interface CGI )技术。在服务器端通过 CGI 应用程序连接 Web Server GIS 空间数据库,客户端仅须使用浏览器就可以对空间数据进行查询分析 [2] 。美国的明尼苏达大学( University of Minnesota ),提供的 WebGIS 解决方案: MapServer ,就是利用 CGI 技术。 MapServer 支持三层体系结构 [3] ,如下:

 

CGI

GIS 空间数据库

MapServer

CGI 模块

或者

脚本语言+ MapScript

 

 

Web 服务器

客户端浏览器

1 ,三层体系结构

(图 1 ,图中的脚本语言指服务端脚本语言; MapServer CGI 模块和 MapScript 模块将在后面介绍)

相比与由商业企业提供的众多 WebGIS 解决方案, MapServer 是开源项目。这就意味着你 可以免费使用 MapServer ,并具有自行修改、复制以及再分发的权利 [4] 。同时 MapServer 还有众多的优点 [5]

1)        支持的矢量格式: ESRI shapefiles, PostGIS, ESRI ArcSDE 等(通过 OGR 库实现)。支持的栅格格式: TIFF/GeoTIFF, EPPL7 等(通过 GDAL 库实现)。

2)        shapefile 文件,可以建立四元树空间索引。

3)        完全支持定制的 template 的输出。

4)        支持微软和 Apple 公司共同研制的字型标准 TrueType

5)        支持 分块的(tiled )矢量和栅格数据。

6)        地图元素(如比例尺、图例,参照图等) 自动控制 。

7)        图像比例自动调节。

8)        利用逻辑或正则表达式生成专题地图。

9)        特征标注(包含标注冲突解决)。

10)    可以通过URLs 动态的对MapServer 进行配置。

11)    支持动态的投影变换。

12)    Open Geospatial Consortium 若干网络规范的支持: WMS (client/server), non-transactional WFS (client/server), WCS (server only), WMC, SLD, GML Filter Encoding[6]

2 MapServer 的组成及开发方法

MapServer 是使用 C 语言编写的开源软件,它本身又 依赖一些开源的或免费的库,如 Shapelib, FreeType, Proj.4, GDAL/OGR[5]

(一)必须的库:

a)        GD Library MapServer 通过使用 GD graphics library 来表现 GIF, PNG JPEG 格式的图像。这些图像通过 MapServer CGI 在浏览器上浏览。

b)        Regex Regex 是一个正则表达式库。

(二)可选的库:

a)        JPEG library :由 GD 调用生成 JPEG 图像。

b)        PNG library :由 GD 调用生成 PNG 图像。

c)        Zlib :由 libpng 用来提供图形压缩功能。

d)        FreeType 2 :由 GD. 调用 提供 TrueType 支持。

e)        PROJ.4 Proj.4 用于动态的投影变换。 WMS, WFS WCS Services 也需要它的支持。

f)          GDAL/OGR MapServer 使用 GDAL/OGR 库来读入 raster (GDAL) and vector (OGR) 格式的数据

g)        ArcSDE ArcSDE ESRI 公司的空间数据库引擎(它不是免费的)用于支持 MapServer 进入 SDE 数据库。

h)        EPPL7 :用来读取 EPPL7 数据库和旧版本的 Erdas LAN/GIS 文件。它是作为 MapServer 的内置库。

MapServer 可以看作是两个独立模块的统称: MapServer CGI 模块和 MapScript 模块。在服务器端可以使用任一模块,编写 WebGIS 程序。不过它们使用相同的配置文件 MapFile 。本文的重点就是介绍 MapFile 文件,及使用两个模块开发 WebGIS 的方法。

2.1 MapFile 文件

MapFile 文件将各种地图要素组织成具有层次关系的对象系统 [5] 。数据来源,使用的数据格式,用户交互和对 OGC 协议的支持也在 MapFile 中定义。 MapFile 中包括的对象及其层次关系:

MapObject

Querymap

 

Symbol

Projection

WebObject

Reference Map

Outputformat

 

Scalebar

Lengend

Layer Object

Label Object

Label Object

Feature

Projection

Class Object

Join Object

Label Object

Style Object

Grid Object

2 MapFile 对象层次关系

(图 2 MapFile 中的对象及其层次关系;注意为绘图方便有些对象省略 Object

MapFile 的语法很简单。 MapFile 的关键字包括对象名(图 2 中的所有对象)、对象属性( keyword ),对象结束标记“ END ”。对象名和对象结束标记“ END ”大小写不敏感;属性名大小写敏感,配置 ESRI shapfile 文件要使用大写, PostGIS 的却总是小写。在 MapFile 文件中,符号“#”对单行注释。 MapFile 文件以“ .map ”为扩展名,可以使用各种文字编辑器编写。以下是 MapFile 的一个例子:

#

# Start of map file

#

NAME CHINA

STATUS ON

SIZE 400 300

SYMBOLSET ../etc/symbols.sym

FONTSET ../etc/fonts.txt

EXTENT 73 35 137 45

UNITS DD

SHAPEPATH "../data/china"

IMAGECOLOR 255 255 255

#

# Start of web interface definition

#

WEB

  TEMPLATE "/ms4w/apps/myapps/htdocs/temp.html"

  IMAGEPATH "/ms4w/tmp/ms_tmp/"

  IMAGEURL "/ms_tmp/"

END#END WEB

#

# Start of legend

#

LEGEND

  KEYSIZE 20 10

  KEYSPACING 10 20

  LABEL

    FONT heiti

    TYPE TRUETYPE

    SIZE MEDIUM

    COLOR 0 0 89

  END

  STATUS ON

END#END LENGEND

#

# Start of scalebar

#

SCALEBAR

  STATUS ON

  IMAGECOLOR 255 255 255

  STYLE 1

  LABEL

    FONT huawen

    COLOR 0 0 0

    SIZE SMALL

  END

  SIZE 250 5

  COLOR 0 0 255

  BACKGROUNDCOLOR 0 0 0

  OUTLINECOLOR 0 0 0

  UNITS KILOMETERS

  INTERVALS 5

END#END SCALEBAR

#

#start of querymap

#

QUERYMAP

  STYLE HILITE

  COLOR 255 0 0

END#END QUERYMAP

#

#start of projection

#

PROJECTION

  "init=epsg:20073"

END#PROJECTION

#

# Start of layer definitions

#

LAYER

  NAME bou1_4p

  TYPE POLYGON

  STATUS ON

  DATA bou1_4p

  CLASS

    NAME "bou1_4p"

    SYMBOL 0

    COLOR 255 255 0

  END

END # Layer

END # Map File

2.1.1 ,配置 MapFile 需要的资源

配置一个完整的 MapFile 文件需要: GIS 数据源,字体文件,符号文件。 GIS 数据源可以分布在不同的计算机上;字体文件用来定义输出地图中使用的字体类型。地图中使用的点,线,面符号可以在 MapFile 文件 Symbol 对象中定义;不过为了实现符号的重用——无须在不同的 MapFile 文件中定义相同的符号,通常在 MapFile 外部定义独立的符号文件。

2.1.2 MapFile 文件中对象及其属性解释

    MapFile 文件中大部分对象或与地图要素相对应,或是 GIS 中应用较普遍的概念;如 Lengend Scalebar Layer 等。这些对象的作用是较为明显,易懂的。在附录 1 中将对 MapFile 文件中的对象和属性的意义做详尽的解释。在这里解释四个特别对象的意义: Web Object Outputformat Object Query Object Reference Map Object

Web Object 定义如何处理 web 接口。如:属性 IMAGEPATH 定义存储临时文件和图像的路径, TEMPLATE 定义使用的交互界面文件 [5]

Outputformate Object 定义输出图像的格式。 MapServer GIS 数据格式文件(如 shapefile )转换成 MIME Multipurpose Internet Mail Extensions )协议支持的图像格式,如 gif png jpeg [5]

QueryMap Object 定义了查询结果的生成机制。如:属性 STYLE (不是对象)设置选中的特征如何显示 [5]

Reference Map Object 定义参照地图如何创立。 MapServer 支持三种参照地图类型。参照地图最普遍的用法是做为 map 的观察窗口。可以利用参照地图对查询结果进行观察。当点查询发生时,会在输出 Reference Map 中产生一个点符号,以指示被查询的位置。区域查询就在 Reference Map 中产生一个方框,以指示查询区域。特征查询就在 Reference Map 显示查询的特征。总之, Reference Map 可以视为查询的观察窗口 [5]

2.1.3 ,配置 MapFile 文件的步骤

在规划好 WebGIS 网站之后,配置 MapFile 文件步骤:

1 )准备 MapFile 文件需要的资源,包括 GIS 数据,字体文件,符号文件。

2 )按照 WebGIS 网站的需求,遵循 MapFile 的语法,使用文本编辑软件或 MapLab 等专门的 MapFile 编写软件编写 MapFile

3 )使用调试软件(如 MapLab )测试、查看 MapFile 配置是否正确、合适。

2.2 MapServer 环境下的 WebGIS 开发

配置好 MapFile 文件后,就可以使用 MapServer CGI 模块或 MapScript 模块开发 WebGIS 程序。它们的区别:

利用 MapServer CGI 模块需要做的工作:准备 MapFile 需要的资源,配置 MapFile ,设计用户交互界面(即 html 文件,可以使用脚本语言,如 JavaScript 增强交互性)。无法进行服务器端设计,因为 MapServer CGI 本身就是定制好的服务器端程序。当然可以通过修改源代码来使 Map Server CGI 具有需要的特性。

利用 MapScript 模块就需要其他服务器端解决方案(指脚本语言),如 PHP (以 CGI 模块安装在 Web Server 上)。 MapScript 模块作为 PHP 的扩展模块,放在 PHP 安装路径的 extensions 目录下。 MapScript 模块保留 MapFile 文件的层次对象结构,向 PHP 提供对象结构的 API 。那么,程序员在服务器端就可以使用 PHP 通过调用 MapScript API 灵活的选择,修改 MapFile 文件;而不像 MapServer CGI 模块那样死板。同时结合 PHP 对众多数据库——非空间数据库,如 Oracle, Sybase, MySQL 等的支持,在 WebGIS 中整合空间数据和非空间数据变的容易。

MapScript 支持的语言: PHP Perl Python Java Tcl C #等 [5]

2.2.1 ,利用 MapServer CGI 模块开发 WebGIS

CGI 是一组定义了 Web 服务器与在同一台机器上的其他软件相互通信的规则。遵循 CGI 通信规则的其他软件叫 CGI 程序或 CGI 脚本。 Web 服务器可利用 CGI 程序实现动态交互功能( Server-side )。通常 CGI 程序是运行在服务器端的小程序,被 Web 服务器调用,处理从 Web 服务器获得的数据(如对表单数据处理,查询数据库等),将处理结果返回给 Web 服务器:

Web 服务器—— CGI 程序——其他软件(如数据库)。

CGI 程序可以使用任何语言编写,只要遵循 CGI 通信规则。编译语言: C C ++等;脚本语言: Perl, Python,  Bourne shell Java [7]

MapServer CGI 模块是用 C 语言编写的 CGI 程序,非常小。 MapServer CGI 模块的核心 mapserv.exe 不过 36KB

当浏览器通过 URL 告知 Web Server 调用 MapServer CGI 模块时, Web Server 就为 CGI 模块创建一个进程; CGI 模块运行并加载 URL 指定的 MapFile 文件,读取 MapFile 文件中的 TEMPLATE 文件( HTML 文件),并将 TEMPLATE 文件中 CGI 变量的替换变量( template substitutions )替换成具体的值;处理完 TEMPLATE 文件后, CGI 模块将 TEMPLATE 文件处理结果( HTML 文件)返回给 Web Server Web Server 在将 HTML 文件输出到用户浏览器上。这时 TEMPLATE 文件( HTML 文件)就作为用户的交互界面。

使用 MapServer CGI 程序设计 WebGIS 的基本步骤:

1 )配置 MapFile

一般在 Web Object TEMPLATE 属性中指明使用的用户交互界面。用户也可以通过 URL 指明使用的用户交互界面。

2 )设计初始化界面。

考虑到访问 CGI 程序( mapserv.exe URL 很长,而且对于普通用户并不知道访问 CGI 程序( mapserv.exe )的 URL 格式;所以在初始交互界面中嵌入指向 CGI 程序( mapserv.exe )的链接( URL )。

3 )设计用户交互及交互界面:

这里需要引出 MapServer CGI 模块的关键概念: CGI 变量和 Templates MapServer CGI 变量可以看作是 CGI 模块 mapserv.exe 的接口。在 URL HTML 的表单中调用 CGI 变量就可以完成大多数动态交互,如图层选择,放大缩小等。

Templates HTML 文件或 URL 。在 Templates 中含有 CGI 变量和它的替换变量,这里替换变量( template substitutions )与 CGI 变量相一一对应。

设计用户 交互及交互界面,即在 URL HTML 文件中使用 CGI 变量和替换变量。那么,既然替换变量( template substitutions )与 CGI 变量相一一对应,又为何要引入替换变量( template substitutions )的概念了?确实在概念上有点多取一举。不过,使用替换变量可以用来指示 CGI 变量值为空的情况。

在附录 2 中将提供利用 MapServer CGI 模块开发 WebGIS 的例子。

2.2.2 ,利用 MapScript 模块开发 WebGIS

   从上面“ 2.2.1 ,利用 MapServer CGI 模块开发 WebGIS ”中可以看出使用 CGI 模块编程就是利用 CGI 变量和它的替换变量,而 CGI 模块是编译好的程序( mapserv.exe );使用 CGI 模块难以实现较为复杂的动态交互。利用其他服务端脚本语言和 MapScript 可以更容易实现复杂的 WebGIS 功能。

这里将以流行的服务器端脚本语言 PHP 为例介绍 MapScript 模块的使用方法。

PHP CGI 程序安装在 Web Server 中,把 MapScript 模块放置在 PHP 安装路径的 extensions 下,配置 php.int 文件支持使用 MapScript 模块,就完成 PHP/Mapscript 安装。

*.php 文件或 *.phtml 文件中使用函数: dl (“ MapScript 模块名称”)就可以加载 MapScript 模块了。

MapScript 模块提供的 API 是基于对象的,它将 MapFile 中对象组织成对象接口。在 *.php 文件或 *.phtml 文件中可以调用对象的属性和方法。

在附录 3 中将提供由作者使用 PHP/MapScript 编写的程序源代码。

3 ,结论

MapServer 作为 WebGIS 解决方案。它是面向对象的,基本配置文件 MapFile MapScript 模块的 API 组织都是基于对象的。 MapServer 通过支持 OGC 协会的若干标准,支持分布和互操作。不论是使用 MapServer CGI 模块或服务端脚本语言+ MapScript ,都可以实现服务端与客户浏览器的动态交互。配置 MapFile 文件的语法简单、易学;如果你有使用过桌面 GIS 软件(如 ArcMap )做过专题地图的经验,更是如此。

与商业软件相比, MapServer 是开源的,你可以免费使用,还可以根据需要修改源代码。

需要指出的是 MapServer 作为开源项目,在不断的发展中。本文介绍的内容是以 Mapserver 4.4.2 版本为基础的。

4 ,致谢

    感谢中国科学院,寒区旱区环境与工程研究所,遥感与地理信息科学实验室为作者提供的帮助。感谢王亮绪、吴立宗老师的指导。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CostarGIS Server是一个基于Web的企业级GIS解决方案。CostarGIS Server为创建和管理基于服务器的GIS应用提供了一个高效的框架平台。它充分利用了CostarGIS的核心组件库 的CostarObjects,并且基于工业标准提供WebGIS服务。 CostarGIS Server将两项功能强大的技术GIS和网络技术(Web)结合在一起,GIS擅长与空间相关的分析与处理,网络技术则 提供全球互联,促进信息共享。 CostarGIS Server基于.NET 技术开发,属于B/S 开发结构,软件分为服务器端和客户端两部分,服务器端指运行在网站上的服务程序及其相关的部分,常规地说软件的运行环境一 般指服务器端软件而言,这是系统部署中服务提供商(或者称网站运营者)可以控制的部分;客户端部分指最终用户访问互联网时使用的软件,通常情况下就是指通用浏览器。 CostarGIS Server为我们带来了许多可喜的变化。与过去的WebGIS产品相比,它不权具备发布地图服务的功能,而且还能提供灵活的编辑和强大的分析能力,这对于WebGIS发展可 以说具有里程碑意义的,由于CostarGIS Server基于强大的核心库组件CostarObjects搭建,并且以主流的网络技术作为其通信手段,所以它具有优势与特点。 一、空间信息服务的发布 基于CostarGIS Server构建Web应用程序,可视化地发布空间信息,这是CostarGIS Server一个重要的应用方式,同时CostarGIS Server可以发布基于位置信息的简单网络服务(REST), CostarGIS Server通过Internet发布基于空间信息的GIS功能,比如MapService,QueryService,SpatialAnalysisService。服务运营商可以直接在自己的网站上发布这些 网络服务,为大众提供通用GIS功能服务。网络服务的消费者可以充分利用这些服务实现其有关GIS方面的需求和功能,而不用管理空间数据,大大减少了系统建设和维护的费用。 。 二、空间信息的在线编辑 随着网络地理信息系统应用的深入以及互联网技术的发展,更多的用户提出了在线编辑和修改空间数据的需求,因此CosarGIS Server提供在线编辑功能,允许在线编辑 空间数据,实现远程数据的采集和维护。
本控件系统是用VC开发的高效快捷的WebGis电子地图系统。系统主要分为两部分,一部分是客户端ActiveX控件,另一部分是服务器端的Server。<br><br> 客户端ActiveX控件基于ATL模版技术,提供了简单、方便、灵活的二次开发接口,便于用户显示和操作地图;服务器端Server采用ISAPI服务提供地图服务和兴趣点模糊搜索服务以及可扩展的路径规划服务等基本地理信息服务,同时也可为其他地理信息服务,速度超快。<br><br>地图数据可由mapinfo数据格式转换成地图所用格式,转换简单方便。本系统部署较简单,只需您几分钟的时间就可以为您建立一个的WebGis网站,方便快速。<br><br>地图数据格式兼容并且可以升级,升级时只要服务器端稍作更新调整,则使用该控件浏览地图的用户将会及时进行与服务器端的同步更新,从而使您的网站始终保持耳目一新的优势。<br><br> 本控件系统除了支持网络版本电子地图,还支持本地端地图,实用方便。同时也支持目前流行语言对该控件的使用,可以快速进行二次开发。<br><br>该控件系统的主要功能特点有:<br><br>1、支持全国地图无缝隙浏览。<br><br>2、支持地图控件常用基本操作,如平移,缩放,旋转,测距,测面积等。<br><br>3、支持强大的地图图层管理控制(点、线、面层),支持自定义图层控制管理(点层、线层、面层、圆面层、图片层、动画层、提示框层、轨迹回放层)和图层风格样式的配置,使您的显示风格独具一格,别出心裁。<br><br>4、支持浮动图层,可以任意添加各种兴趣点、线、面、圆面、图片(调控缩放比例,透明度,旋转角度等)、提示框和GIF动画,图片等。<br><br>5、支持强大的地图数据搜索引擎,并支持多关键字搜索。<br><br>6、支持强大的自动更新功能,客户端只需发布一次,就可以和服务器 <br><br> 端指定的版本始终保持一致,使您的网页永远焕然一新。<br><br>7、支持搜索指定点附近的地理对象并快速返回对象信息。<br><br>8、支持所有风格样式设置的任意自定义字体选项,可以随意设置系统支持字体的类型、大小和颜色。<br><br>9、支持专题地图的随意建立和发布。<br><br>10、支持网络地图版本和本地地图版本两种模式。<br><br>11、支持最佳路径规划,同时可设置路径规划中路径的所选道路级别。<br><br>12、支持图层风格的多种风格设置和修改。<br><br>13、支持网络版本大量并发,效果极佳。<br><br>14、支持轨迹回放和轨迹回放的基本操作。<br><br> <br><br>作者:MapFlyBoy<br><br>联系方式:<br><br>QQ:386304412<br><br>E-Mail: [email protected]<br><br>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值