
前阵做一个项目过程中,需要结合MapInfo进行地方展示开发,积累一点点心得与大家共享
以下所有基于MapXtreme 6.6
MapInfo提供了足够强大的WinForm地图空间,可以很方便地在VS中拖拉摆放。
但如此强大的控件也带来了封闭性太强的问题。
现在我们都接触到了大量Web上的地图,比如Google Map,Live Map等,这些Web地图都具有非常高的交互能力,缩放由鼠标双击或鼠标中键滚动,或者使用缩放工具完成,但换到WinForm上,这些非常好的交互能力全都没有了,变成了一个个冰冷的控件(如下图),需要手动触发才能调用相应功能,这样的功能给用户多大的困扰啊!
需要改变一下了:
首先在需要使用MapControl的窗体构造一个MapControl对象,并声明如下事件:
缩放等级改变事件
1 /**//// <summary> 2 /// 缩放等级改变事件 3 /// </summary> 4 /// <remarks>在本地图的缩放等级发生变化后触发</remarks> 5 public event EventHandler ZoomLevelChanged;
这个事件的使用如下所示:
/**//// <summary>
/// 设置地图显示比例
/// </summary>
/// <remarks>窗体上所有缩放事件均进入该方法进行</remarks>
/// <param name="ZoomLevel"></param>
public void SetZoomLevel (int ZoomLevel)
{
_helper.Zoom ( ZoomLevel );
_zoomLevel = _helper.ZoomLevel;
if ( ZoomLevelChanged != null )
{
//触发事件
ZoomLevelChanged ( this, new MapControlEventArg ( _zoomLevel ) );
}
}
声明ZoomLevelChanged事件时,为了省事,没有使用相应的委托来做,其实在EventArg处,我使用了一个继承自EventArg的类,并把当前缩放等级值传入其中。

准备工作完成了,那么现在是时候构造地图缩放工具了。
设计思路是这样的:
由于缩放地图具有一定的范围,那么我就把地图的缩放设置为8个等级,并对应MapInfo的缩放距离,该缩放方法使用一个外部类控制:
设置地图缩放等级
/// <summary>
/// 设置地图缩放层级
/// </summary>
/// <param name="map">地图实例引用</param>
/// <param name="zoomLevel">缩放层级</param>
private void SetZoomLevel ( Map map,int zoomLevel )
{
try
{
map.Zoom = ExchangeZoomLevel ( zoomLevel );
}
catch
{ }
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-27980-1.html
送钱
烊烊棒棒哒你就是我们心中的小王子
坏账多