首先要搞懂大致流程和安装
此次工程(ET项目)采用MapServer + java + tomcat
底层用C/C++编写,用Swig转换为Java代码,在网页上用Jsp调用。
MapServer流程:(以下文字均摘自网上其他作者,仅作为参考,非原创)
客户端将参数及要求的cgi程序传送给MapServer。
MapServer接收到客户端传送的参数后,根据参数中指定的mapfile路径读取mapfile文件。
根据mapfile中指定的data路径读取相关数据。
将读入的数据进行文字资料转图工作。该项工作是呼叫FreeType Font Engine配合GD Graphics Library进行的。
图形制作完成后,保存至客户端参数中指定的目录。
MapServer根据mapfile中定义的信息,读取指定的模板(template file),进行html及画面显示的配置与相关资料,图形(如:比例尺寸,样本图,参考文字)的制做及嵌入工作,将动态生成的空间资讯图嵌入模板以生成能够供客户端使用的文件。完成后返回客户端。
如图:
//////////////////////////////////////////////////////////////////////////////////////////
本人初次接触MS,试图在Windows下重新编译MS源码来代替MS4W,用C#做Web例子并通过IIS来发布。捣腾了一个月,现把心得记录如下:
1、编译
编译过程是非常烦躁的体力劳动,刚开始是用vs.2005来编译的,结果在编译GDAL时始终编译不成功,又改为vs.2003,方可通过,本人通过编译的过程发现:
1) MS支持的关键第三方源码有:GDAL、GD、regex(下载PHP,包含支持在Windows下的regex);重要的有:(GEOS、PROJ)编译GDAL与MS时用到;(LPNG、ZLIB、JPEG、FREETYPE)编译GD时用到;(CURL[支持MWS]、ICONV)可有可无;
2)如果要编译成C#中间库,需要SWIG;
3)如果用nmake命令,可仔细察看makefile.vc/nmake.opt,确定路径等参数是否正确;如果构建VS工程来编译,注意PreprocessorDefinitions=""中需设置,列几个必要的如"PHP_NO_ALIASES;NEED_STRCASECMP;NEED_STRNCASECMP;NEED_STRLCAT;USE_GDAL;USE_OGR;USE_GD_PNG;USE_GD_JPEG;USE_GD_GIF;USE_GD_FT";该项设置来源于nmake.opt;
4)根据用户的需求可以灵活编译,如用ArcSDE来管理数据,则可运用"USE_SDE";如果用ORACLESPATIAL来管理数据,则可运用"USE_ORACLESPATIAL";
2、MS结构分析
对ArcIMS熟悉的开发人员不难发现,MS的实现方式类似于ArcIMS的Image Server的实现方式,对照ArcIMS的结构分析,MS关键的三部件为:GD、MS、GDAL。GD的功用在于地图渲染和地图输出;MS类似ArcIMS的Spatial Server,负责地图的组织,运算等;GDAL用于数据的获取(矢量和遥感影像),类似于ArcSDE的数据访问部分功能(GeoDatabase模型创建与数据访问是ArcSDE的核心)。
因此,MS整体构成为三层结构:GD(表现)-----MS(容器)-----GDAL(数据通道)。
运作过程描述如下:
1)MS通过读取mapfile元数据文件,获取元数据地址及样式设置参数;根据参数通过GDAL访问数据,并组织地图模式;
2)MS运算(查询、地图区域设置等);
3)MS通过GD绘制地图,并输出显示。
3、mapfile文件(类似ArcXML)
MS提供了mapfile的帮助文档,根据帮助文档可了解MS组织数据的大体方式,有助于深入研究。(本人曾花费2天时间手写了一个访问SDE图层及样式设置的元文件,结果发现在MS4W运行下的MapLab工具能够辅助完成),笔者建议开发者体验一下手工定制的方式。特别注意中文标注的设置技巧(可查阅本论坛的关于中文设置的帖子)。
4、MS的改造建议
1)MS没有专题地图的定制,这可能在功能上限制MS的推广,期待高手们提出解决方案;
2)建议MS通过Service方式读取mapfile文件,从而实现地图数据的一次读取,多用户通过Service方式访问。
5、对使用MS开发Webgis的建议
根据本人测试MS的体会,本人建议MS发布的数据不要用文件方式(SHP、mapinfo的tab,玩玩可以),最好是数据库存储方式的,这样会大大提高效率。