silverlight
发布时间:2022-05-04 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Silverlight】Bing Maps开发应用与技巧四:自定义MapMode实现地图访问限制,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
概述
在某些情况下可能
会出现只需要访问(加载)某块区域的地图显示,也
可能需要对地图的缩放级别进行限制,或者只能让地图在5--10级之间进行深度缩放。要实现这些功能就需要通过自定义MapMode来实现了。本篇将为您介绍如何通过自定义MapMode来实现地图访问限制的常用方法与技巧。 首先需要了解下Bing Maps Silverlight Control的地图投影模式(MapMode)的架构模型,所有
在某些情况下可能
会出现只需要访问(加载)某块区域的地图
显示,也
可能需要对地图的缩放级别进行限制,或者只能让地图在5--10级之间进行深度缩放。要实现这些
功能就需要通过@L_153_2
@mapMode来实现了。本篇将为您介绍如何通过@L_153_2
@mapMode来实现地图访问限制的常用
方法与技巧。
@H_
874_18@
@H_
874_18@ 首先需要了解下Bing Maps Silverlight Control的地图投影模式(MapMode)的架构模型,所有的地图投影模式都是根据投影抽象基类(MapMode)扩展而来。比如二维平面地图投影模式(FlatMapMode)、三维立体地图投影模式(MapMode3D:此投影模式目前尚未使用,为以后的扩展而保留)以及空地图投影模式(Nul
lmode)等。如下图:
@H_
874_18@
@H_
874_18@
@H_
874_18@
如上图所示,其中的墨卡托投影模式(MercatorMode),通过继承于平面地图投影模式(FlatMapMode)对下提供基于墨卡托投影的地图空间映射模型,其下分别实现了加载卫星地图的卫星投影模式(Aeria
lmode)和街道地图的街道投影模式(
roadMode),分别用于实现加载微软卫星地图和街道地图。
@H_
874_18@
@H_
874_18@ 如本篇前面提到的实现地图的访问范围和深度缩放级别限制,从上面对Bing Maps Silverlight Control的地图投影模式架构设计的整体分析,
可知要实现访问限制可以从MercatorMode基类开始,MercatorMode提供了基于墨卡托投影的地理空间坐标系的完整地图投影模式实现,要
自定义的平面地图投影模式则可以直接通过扩展MercatorMode来实现。比如下
自定义模式用于加载中国地区的地图瓦片:
@H_
874_18@
/// <sumMary>
/// 自定义地图投影模式
/// </sumMary>
public class ChinaMode : MercatorMode
{
}
@H_
874_18@通过MercatorMode继承过来有分别处理地图加载范围(Cons
TrainView)和地图深度缩放级别(GetZoomRange)的两个
方法。实际上我们要在地图访问上做一些范围的限制
主要就是通过重写这两个
方法的具体实现。如下
代码块演示了加载经度从70-
-140范围的地图,且地图缩放级别只能是
在3--10级之间进行缩放。
@H_
874_18@
/// <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
;
}
}
}
@H_
874_18@通过以上方式
自定义的地图投影模式,使用和内置的投影模式一样的简单,
可以直接在XAML
代码里配置,也可以在
后台代码里动态指定。详细如下
代码片段:
@H_
874_18@
<@H_140_736
@m:Map
x:Name="map" Margin="0,0" CredentialsProvider="{Staticresource MyCredentials}"
MouseClick="map_MouseClick"
ScaleVisibility="Visible"
CopyrightVisibility="Collapsed">
<@H_140_736
@m:Map.Mode
>
<!--使用自定义的地图投影模式-->
<@H_140_736
@mode:ChinaMode
></@H_140_736
@mode:ChinaMode
>
</@H_140_736
@m:Map.Mode
>
</@H_140_736
@m:Map
>
@H_
874_18@
后台代码中动态指定和Bing Maps Silverlight Control中内置的投影模式使用方式是完全一样的,直接将投影模式的实例赋值给Map控件的Mode
属性。
@H_
874_18@
public MainPage()
{
InitializeComponent();
this.Loaded += (o,E) =>
{
this.map.Mode = new ChinaMode();
map.ZoomLevel=5;
};
}
@H_
874_18@
大佬总结
以上是大佬教程为你收集整理的Silverlight】Bing Maps开发应用与技巧四:自定义MapMode实现地图访问限制全部内容,希望文章能够帮你解决Silverlight】Bing Maps开发应用与技巧四:自定义MapMode实现地图访问限制所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。