Sharpmap自定义工具,工具管理类

sharpmap的核心是地图、图层、数据源、绘制。当这些具备的时候,Map类根据给定的缩放比例返回一张图片,sharpmap的其它操作都是建立在这个基础之上的。

一个GIS应用系统,地图显示出来仅仅只完成了第一步。针对地图需要一些gis工具和业务工具,如gis基础工具地图的漫游,面积距离量算,业务工具有兴趣点查询,添加兴趣点,路径分析等。这工具都需要在地图上进行相应的操作,才能完成,如鼠标按下、移动、抬起。sharpmap.ui类库中的MapBox地图控件采用的是if判断来完成这样的操作。参看其中的一个代码片段:

 bool isStartDrag = _image != null && e.Location != _dragStartPoint && !_dragging &&
                                   (e.Button == MouseButtons.Left || e.Button == MouseButtons.Middle) &&
                                   //Left of middle button can start drag
                                   !(_setActiveToolNoneDuringRedraw &&
                                     (_activeTool == Tools.DrawLine || _activeTool == Tools.DrawPoint ||
                                      _activeTool == Tools.DrawPolygon)); //It should not be any of these tools

  //Pan can be if we have ActiveTool Pan and not doing a ShiftButtonZoom-Operation
                    bool isPanOperation = _activeTool == Tools.Pan &&
                                          !(_shiftButtonDragRectangleZoom &&
                                            (Control.ModifierKeys & Keys.Shift) != Keys.None);

按上面的代码组织方式,每加一个功能,都要写一系列的if判断,且扩展麻烦。

下面采用工具以及工具集来处理这个问题。

首先根据工具与地图的操作,定义基本交互接口

    /// <summary>
    /// 工具接口
    /// </summary>
    public interface ITool
    {
        /// <summary>
        /// 工具名称
        /// </summary>
        string Name { get; }
        /
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值