您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>电子百科>通信技术>卫星通信>

GIS地图开发(二) - GIS地图开发

2018年01月15日 18:33 电子发烧友网 作者: 用户评论(0

五、 封装地图

有了坐标转换类、图层类、图层列表类,就可以利用它们做出一个具有缩放平移、图层管理等功能的地图了,但为了更方便地对地图进行操作,还需要对这些类进行组合封装。新建一个类WeatherMap,添加Coordinator和LayerList类的实例作为它的属性,为了更符合大家操作习惯,将Coordinator类的实例作为私有成员,将地图坐标转换等方法加入WeatherMap类,也就是说地图坐标转换中,不访问Coordinator,而要调用WeatherMap类的方法。类图如下:

 GIS地图开发

再回到抽象图层类CustomLayer,它有一个成员Map,即为WeatherMap对象,在将图层加入图层列表时会自动赋值。在编写CustomLayer的子类时,可调用它来进行坐标转换和地图操作。

为了使地图在绘制复杂图形过程中不至于假死,并在绘图过程中能随时中断绘图,如快速缩放平移地图中可终止前次绘图过程直接绘制最后一次,地图绘制使用了多线程,但多线程增加了代码编写难度,特别是多线程操作UI,对程序流程造成了一定混乱,程序结构受到影响,所幸并不会对图层代码造成困难。

六、 再次封装-增加UI

上面已完成了地图绘制的核心代码,为了使代码编写更加容易,需要对WeatherMap类再次进行封装(MapView类),加入UI部分,即给地图加一个具有界面的壳,并在上面实现地图的操作如缩放、拖动功能。

MapView从PictureBox类继承,内建了WeatherMap类的实例,在MapView的Refresh()方法中调用WeatherMap.Render()对地图进行绘制。

为了完成对地图的操作,FreeMicaps定义一个IMapTool接口,包含了鼠标和键盘操作方法,MapView类内建一个IMapTool接口成员,MapView的鼠标和键盘操作,将被IMapTool接口的实例接管,在实现IMapTool接口的类中,可对地图做各种操作,如平移、缩放等操作,这个对象可随时替换以实现不同方式的地图操作。在FreeMicaps中,已完成一个实现IMapTool接口的类ZoomTool,此类为默认的地图缩放和平移工具。IMapTool接口类图如下:

 GIS地图开发

另外,在MapView中,还引入了一个当前图层的概念CurrentLayer,用它来表示当前操作的图层,后面用它来实现图层元素拾取、图层工具条等功能。

MapView类图如下:

 GIS地图开发

七、 总览

地图部分类关系图如下:

 GIS地图开发

地图绘制部分活动图如下:

 GIS地图开发

以上已经介绍完FreeMicaps地图部分设计框架,相信大家的已对设计思路已有一定了解,此框架不仅适用于天气图分析软件,也适用于一般的GIS系统。本文仅对FreeMicaps的地图部分框架进行了介绍,未涉及到具体的地图数据读取及绘制,这些将在下一篇文章中介绍。

    本文导航

非常好我支持^.^

(0) 0%

不好我反对

(0) 0%

( 发表人:彭菁 )

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!