/// 自定义地图投影模式
/// </summary>
public class ChinaMode : MercatorMode
{
} 通过MercatorMode继承过来有分别处理地图加载范围(ConstrainVIEw)和地图深度缩放级别(GetZoomrange)的两个方法。实际上我们要在地图访问上做一些范围的限制主要就是通过重写这两个方法的具体实现。如下代码块演示了加载经度从70--140范围的地图,且地图缩放级别只能是在3--10级之间进行缩放。 /// <summary>
/// 自定义地图投影模式
/// </summary>
public class ChinaMode : MercatorMode
{
/// <summary>
/// 纬度范围
/// </summary>
public Range < double > LatitudeRange = new Range < double > ( - 50.0 , 50.0 );
/// <summary>
/// 经度范围(70-140刚好就是中国地图区域)
/// </summary>
public Range < double > LongitudeRange = new Range < double > ( 70.0 , 140.0 );
/// <summary>
/// 深度缩放范围(3-10级)
/// </summary>
public Range < double > MapZoomrange = new Range < double > ( 3.0 , 10.0 );
/// <summary>
///
/// </summary>
/// <param name="center"> 地图中心地理坐标 </param>
/// <param name="zoomLevel"> 地图缩放级别 </param>
/// <param name="heading"> 定向视图标题 </param>
/// <param name="pitch"></param>
/// <returns> 是否有值更改 </returns>
public overrIDe bool ConstrainVIEw(Location center, ref double zoomLevel, ref double heading, ref double pitch)
{
return base .ConstrainVIEw(center, ref zoomLevel, ref heading, ref pitch);
}
/// <summary>
/// 确定地图深度缩放范围
/// </summary>
/// <param name="center"></param>
/// <returns></returns>
protected overrIDe Range < double > GetZoomrange(Location center)
{ //只能访问3-10级地图
return this .MapZoomrange;
}
/// <summary>
/// 重写鼠标中键滚轮 *** 作行为
/// </summary>
/// <param name="e"></param>
public overrIDe voID OnMouseWheel(MapMouseWheelEventArgs e)
{
if ((e.WheelDelta > 0.0 ) && ( this .ZoomLevel >= this .MapZoomrange.To))
{
e.Handled = true ;
}
else
{
base .OnMouseWheel(e);
}
}
/// <summary>
/// 重写鼠标拖放地图行为
/// </summary>
/// <param name="e"></param>
public overrIDe voID OnMouseDragBox(MapMouseDragEventArgs e)
{
if ((( this .TargetBoundingRectangle.East <= this .LongitudeRange.To)
&& ( this .TargetBoundingRectangle.West >= this .LongitudeRange.From)))
{
e.Handled = true ;
}
else
{
e.Handled = false ;
}
}
} 通过以上方式自定义的地图投影模式,使用和内置的投影模式一样的简单,可以直接在XAML代码里配置,也可以在后台代码里动态指定。详细如下代码片段: < m:Map x:name ="map" margin ="0,0" CredentialsProvIDer =" {StaticResource MyCredentials} "
MouseClick ="map_MouseClick"
ScaleVisibility ="Visible"
copyrightVisibility ="Collapsed" >
< m:Map.Mode >
<!-- 使用自定义的地图投影模式 -->
< mode:ChinaMode ></ mode:ChinaMode >
</ m:Map.Mode >
</ m:Map > 后台代码中动态指定和Bing Maps Silverlight Control中内置的投影模式使用方式是完全一样的,直接将投影模式的实例赋值给Map控件的Mode属性。 public MainPage()
{
InitializeComponent();
this .Loaded += (o, e) =>
{
this .map.Mode = new ChinaMode();
map.ZoomLevel = 5 ;
};
} 总结
以上是内存溢出为你收集整理的【Silverlight】Bing Maps开发应用与技巧四:自定义MapMode实现地图访问限制全部内容,希望文章能够帮你解决【Silverlight】Bing Maps开发应用与技巧四:自定义MapMode实现地图访问限制所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)