MapServer簡介
在開源WebGIS領域,MapServer的歷史和名氣都超過GeoServer(20世紀90年代中期,由明尼蘇達大學研制),很早就被列入OSGeo項目組。
與GeoServer不同,MapServer用C語言編寫,采用傳統的CGI架構,融合了Pro4j、GDAL等開源項目。對比J2EE架構的GeoServer,MapServer顯得非常精巧,5.6版本的核心部分只有33KB,源代碼只有2.2M,包括Apache、Php、Pro4j、GDAL、MapScript在內的完整安裝包也只有35M。
安裝過程
和Java一樣,C具有良好的跨平臺特性,MapServer支持Windows、Linux、Mac OS X等操作系統。
官方網站對Unix和Windows平臺下的源代碼安裝步驟給出了詳細說明。根據說明下載需要的第三方庫,然后在Shell命令行模式下編譯源代碼,對于缺少Unix Shell或DOS操作經驗的用戶,
這是一件比較頭疼的事情。好在MapServer已經考慮到不習慣命令行操作的Windows用戶,給出了Windows下的已編譯安裝包ms4w,目前最新版本是3.0beta11。
ms4w的安裝過程很簡單,下載ms4w,解壓縮到硬盤任意目錄(目錄名最好不要包含中文字符),打開命令提示符窗口,切換到ms4w所在目錄,鍵入apache-install即可。(提示:如果機器上安裝有Apache或IIS,運行apache-install之前,請將它們關閉。ms4w安裝后不會和原有的Apache沖突。)
看到如下信息,說明安裝成功。
Installing the Apache MS4W Web Server service
The Apache MS4W Web Server service is successfully installed.
Testing httpd.conf....
Errors reported here must be corrected before the service
can be started.
The Apache MS4W Web Server service is starting.
The Apache MS4W Web Server service was started successfully.
安裝完成后,使用瀏覽器訪問 http://127.0.0.1/cgi-bin/mapserv.exe,MapServer返回如下提示信息
No query information to decode. QUERY_STRING is set, but empty.
發布地圖數據
類似于Arcgis Server和GeoServer,MapServer采用零代碼編寫的配置文件方式管理地圖發布,配置文件被稱為Mapfile,后綴名為map。
Mapfile有三種編寫方式:
1、參考官方文檔Mapfile章節,手工編寫
這種方式要求開發人員對Mapfile的編寫規則非常熟悉,否則很容易出錯。
2、類似Arcgis Server和GeoServer提供的Web圖形化配置界面,MapServer有一個對應的開源項目MapLab,提供基于Web的圖形化配置界面
不過個人感覺,MapLab的易用性遠遜于Arcgis Server和GeoServer。
3、使用開源桌面平臺QGIS,自動生成Mapfile文件
對于新手,推薦使用第三種方式。
以下是測試用的Mapfile文件,MapServer對Mapfile文件的存放位置沒有特殊要求,可以存放在不同的計算機上。
# Mapfile文件必須以MAP開頭
MAP
# Map的名字 test
NAME test
STATUS ON
# 地圖大小
SIZE 800 600
# Projection definition
# Projections are not currenlty supported. If desired, add your own
# projection information based on Mapserver documentation.
# Map的坐標系
PROJECTION
"init=epsg:4326"
END
# Map的全圖范圍
EXTENT 75 15 140 55
# Map的坐標單位 DD表示經緯度
UNITS DD
# Map的背景顏色 白色
IMAGECOLOR 255 255 255
# 生成的圖片類型,常用gif或png
IMAGETYPE gif
# shp文件的路徑,請使用絕對路徑
SHAPEPATH "I://cn_data"
#
# Start of web interface definition. Only the TEMPLATE parameter
# must be specified to display a map. See Mapserver documentation
# MapServer內置了地圖客戶端功能,此處是Web客戶端相關設置。
# 由于我們使用Openlayers作為地圖客戶端,MapServer做為地圖服務器,此處不做設置
WEB
# HEADER
# TEMPLATE
# FOOTER
# 最小、最大比例尺等級
MINSCALE 1
MAXSCALE 13
# 設置IMAGEPATH,默認路徑如下,請使用絕對路徑
IMAGEPATH 'I:/ms4w/Apache/htdocs/tmp'
# 設置IMAGEURL,默認路徑如下
IMAGEURL '/tmp/'
END
# 設置圖層,一個Map下可以包含多個LAYER
LAYER
NAME polyline # 圖層名稱,MapServer使用該名稱
TYPE LINE # 幾何類型
STATUS ON
DATA "roa_4m" # shp文件名,不需要帶擴展名,路徑在前面的SHAPEPATH項中指定
CLASS
NAME "roa_4m" # 類名
# TEMPLATE
COLOR 112 0 0 # 顏色
END
END
END # Map File
客戶端測試
接下來測試剛才建立的Mapfile,在瀏覽器地址欄中輸入
http://127.0.0.1/cgi-bin/mapserv.exe?LAYERS=polyline&MAP=I:/ms4w/Apache/htdocs/my.map&FORMAT=gif&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=75,15,140,55&WIDTH=800&HEIGHT=600
大約0.5秒后(初次加載),瀏覽器顯示出中國1:400萬道路網,地圖發布成功!
熟悉OGC標準的朋友可能已經發現,上面的URL是WMS地圖請求。
直接通過CGI請求,得到的是一幅靜態地圖,為了實現地圖的縮放、漫游,我們選用Openlayers地圖客戶端。
通過OpenLayers.Layer.WMS可以直接調用MapServer地圖服務,測試代碼如下:
var ms_layer = new OpenLayers.Layer.WMS(
"polyline", //OpenLayers中的圖層名
"/cgi-bin/mapserv.exe", //MapServer地圖服務器的路徑
{
layers: 'polyline', //Mapfile中定義的圖層名
map: 'I:/cn_data/my.map', //Mapfile文件的絕對路徑,注意必須使用'/'而不是'\',使用相對路徑無法顯示地圖
format: 'gif'
},
{
reproject: false,
'numZoomLevels': 20,
gutter: 15,
buffer: 0
}
);
滾動鼠標滾輪,地圖的刷新速度保持在0.5秒以內。MapServer繼承了C語言的特點,地圖渲染效率很高。
寫在最后
MapServer提供兩種工作方式,CGI方式(適用于CGI、AJAX、FLEX開發人員)和MapScript方式(適用于Php、Java、C#、Python開發人員)。以原生CGI方式效率最高,配合TileCache,可以快速生成大范圍的地圖瓦片數據。比較基于.Net和J2EE的商業或開源平臺,MapServer更適合高負荷的大型互聯網地圖應用。
posted on 2010-11-24 17:39
天狼 閱讀(6706)
評論(5) 編輯 收藏