C#打造一个开源webgis(三)地图服务系统

地图服务系统,就是客户端发送数据请求时,服务器端实时处理空间数据,并把生成的数据,以服务形式发送给客户端,然后客户端就能看到地图或获取到数据。

商用中最有名的就是ArcServer,而在开源界就是MapServer和GeoServer,下面将分别介绍一下。

MapServer

1、安装

可以上官网下载自行编译。对于window用户,可下载已编译安装包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,(如果本地地址给IIS或其它占用了,可加上端口号,同时ms4w里面的apache也配下端口号)MapServer返回如下提示信息
No query information to decode. QUERY_STRING is set, but empty. 

2、发布地图数据 

类似于Arcgis Server和GeoServer,MapServer采用零代码编写的配置文件方式管理地图发布,配置文件被称为Mapfile,后缀名为map。它有三种编写方式: 

1)参考官方文档Mapfile章节,手工编写。这种方式要求开发人员对Mapfile的编写规则非常熟悉,否则很容易出错。

2)类似Arcgis Server和GeoServer提供的Web图形化配置界面,MapServer有一个对应的开源项目MapLab,提供基于Web的图形化配置界面。 不过个人感觉,MapLab的易用性远逊于Arcgis Server和GeoServer。 

3)使用开源桌面平台QGIS,自动生成Mapfile文件。 对于新手,推荐使用第三种方式。 (个人觉得也不是很灵活)。

如果只是想看看效果的话,可以官网下载一个demo数据包,叫workshop,然后根据解压目录下的readme文件操作,当编辑"itasca.map"以适配网站配置时,要注意三个很恶心的内容:WMS_ONLINERESOURCE改成网站绝对路径,IMAGEPATH改为绝对文件路径,IMAGEURL 为网站相对路径。

3、二次开发

通过mapfile我们能获取数据,但是这是粗数据,还需要根据需求加工处理成我们想要的。MapServer提供两种工作方式,CGI方式(适用于CGI、AJAX、FLEX开发人员)和MapScript方式(适用于Php、Java、 C#、Python开发人员)。以原生CGI方式效率最高,配合TileCache,可以快速生成大范围的地图瓦片数据。在此我尝试了用C#开发MapScript的方式来实现,只是当我输入这段测试代码的时候编译成功运行都不成功。网上搜了说缺少依赖库,我通过FWTools下载了相应的dll添加到项目中,编译运行还是失败,最后我就不了了之了,如有解决方法,望告之。
 mapObj pMap = new mapObj ("" );

GeoServer

关于其介绍,可自行度娘一下。

1、安装

官网下载安装,要花一点时间。安装成功可看到开始菜单有如下内容:
C#打造一个开源webgis(三)地图服务系统_第1张图片

当我们选择【Start GeoServer】启动服务后,就可以打开【GeoServer Web Admin Page】页面进行管理了,用账号:admin,密码:geoserver登录进去,界面如下图所示:
C#打造一个开源webgis(三)地图服务系统_第2张图片


至此,我们可以配置自己的数据了,可以是本地文件数据,或者我们上章所用的PostgreSQL空间数据,无外乎就是new stores,new workspace,new layer,在此我就不详细介绍了,以免篇幅太长,有兴趣地可以参考此文:http://www.cnblogs.com/beniao/archive/2011/01/10/1930995.html,当然里面有些选项已经变了,自己摸索下调整就是了,而且该系列后面有提供用silverlight调用的方法,但是代码某个地方zoomLevel写错了,至于更正内容,以及分别用js、silverlight(deepearth和arcgis for silverlight api)的演示在后续章节给出(PS:夜深,困了,内容都一笔带过……),在Layer Preview中,以下就是我通过连接PostgreSQL生成三个图层:
C#打造一个开源webgis(三)地图服务系统_第3张图片

从上图看出,我们可以点击OpenLayers、KML、GML打开预览,或者下拉框里选择地图格式,下拉框可选项非常多,见下面:
C#打造一个开源webgis(三)地图服务系统_第4张图片       C#打造一个开源webgis(三)地图服务系统_第5张图片       C#打造一个开源webgis(三)地图服务系统_第6张图片


可以很兴奋地看到它支持CSV和GeoJSON方式,我们在分别是以OpenLayers、Jpeg和CSV格式打开的效果:
C#打造一个开源webgis(三)地图服务系统_第7张图片
C#打造一个开源webgis(三)地图服务系统_第8张图片
C#打造一个开源webgis(三)地图服务系统_第9张图片

注意,上面内容我们都是可以通过浏览器查看到的,因为遵循OGC规范,这样,只要给定正确的URL,无论地图、数据我们都可以请求到了,万事具备,只欠东风。

你可能感兴趣的:(C#打造一个开源webgis(三)地图服务系统)