快速业务通道

使用.net Remoting和SuperMap Object设计WebGIS系统

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
了空间数据,等待提供服务。这样,我们一方面对程序进行了分层,另一 方面通过分层,意外的获得了可以通过在GIS服务器端控制Map Service的方式更新、修改地图数据,而不 影响Web服务的好处。

图 2即为一个基于.net设计的WebGIS的架构示意,不同颜色表示可以部署于不同的机器。其中GIS应用 服务器上运行Map Service,为前端的Web程序提供地图数据。

图 2 基于.net Remoting和ASP.net的WebGIS设计架构

4. 详细设计与系统实现

4.1. GIS服务器(基于.net Remoting)

在运行于不同进程中的对象之间建立通信(无论是在同一台计算机上,还是在相距数千公里的计算机 上)是常见的开发目标。通过 .NET 远程处理,客户端应用程序可以使用同一台计算机(或其网络中其他 任何可用的计算机)上的其他进程中的对象。可以从 Web 应用程序、控制台应用程序、Windows 服务进 行通信。因此我们将基于.net Remoting技术实现GIS服务器。

MapRender接口 

我们首先设计如下的一个MapRender接口(图 3),在服务器端实现之,客户端则通过Remoting远程调 用,使用Server端的服务。

图 3 MapRender接口

MapService类

图 4 MapService类

MapService实现了MapRender接口,提供Map服务,返回生成的Map的文件名(图 4)。其实现是通过委 托模式,调用 _mapEngine (MapEngine的实例)来完成具体的操作。

MapEngine(具体的地图引擎)

MapEngine是地图引擎的实现的基类,然后在此基础上继承不同的引擎(图 5)。对于使用MO和 SuperMap的引擎,可以使用Adapter模式来实现。Simple引擎只是返回一个已有的图片地址,用作测试。

图 5 地图引擎设计

地图引擎首先实现了一个基类,然后在此基础上继承不同的引擎。对于使用MO和SuperMap的引擎,可 以使用Adapter模式来实现。Simple引擎只是返回一个已有的图片地址,用作测试。

实际的程序可以从配置文件里读入需要的数据,然后通过工厂方法初始化MapEngine。

Private Shared Function MapEngineFactory() As MapEngine
    Dim strMapEngine As String

    Dim mapEngine As MapEngine
    strMapEngine = "Supermap"
    Select Case strMapEngine

        Case "Simple"

            mapEngine = New SimpleMapEngine

        Case "Mo"

            mapEngine = New MoMapEngine

        Case "Supermap"

            mapEngine = New SupermapMapEngine

        Case Else
            mapEngine = New SimpleMapEngine

    End Select
    Return mapEngine
End Function

MapServer类和启动Map Service服务

Main函数设计在MapServer类中,其中的MapEngine被设计为Singleton(单件)对象,已保证只有一个 具体的MapEngine引擎,通过MapEngineFactory的工厂方法返回具体的对象,然后在Main函数内启动 MapService服务:

Dim chan1 As TcpChannel

chan1 = New TcpChannel(8085)
ChannelServices.RegisterChannel(chan1)

RemotingConfiguration.RegisterWellKnownServiceType(GetType(MapService), "MapService", 

WellKnownObjectMode.Singleton)
MapEngine = MapEngineFactory()

MapEngine.run("")
System.Console.WriteLine("Hit <enter> to exit...")

System.Console.ReadLine()

Application.Exit()

将MapService定义为可远程调用,而在MapService中调用实际的MapEngine,来完成请求。

例子中将所有实现写在了代码中,实际的实现,可以使用类似代码和配置文件,启动多个Map Service 服务,供不同的地图程序调

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号