silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了【Silverlight】Bing Maps开发应用与技巧一:地图打点与坐标控件(CoordControl)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

使用Bing Maps Silverlight Control开发中,很多时候都需要实现在的地图上打点的功能,也就是通过鼠标点击事件处理当前地图上点击点添加一个标注(比如图钉),主要使用ViewportPointToLOCATIOn方法进行坐标转换,将鼠标所点击点的物理坐标转化为地理坐标(经度、纬度),该方法如下定义: [ScriptableMemberAttribute] public over

使用Bing Maps Silverlight Control开发中,很多时候都需要实现在的地图上打点的功能,也就是通过鼠标点击事件处理当前地图上点击点添加一个标注(比如图钉),主要使用ViewportPointToLOCATIOn方法进行坐标转换,将鼠标所点击点的物理坐标转化为地理坐标(经度、纬度),该方法如下定义:

[ScriptableMemberAttribute]
public override LOCATIOn ViewportPointToLOCATIOn (Point viewportPoint)
{}

鼠标在地图上点击会触发一系列的地图鼠标事件(MapMouseEventArgs),通过该事件的事件参数可以直接或获取到鼠标当前点击点的物理坐标,该事件类定义如下:

namespace Microsoft.Maps.MapControl
{
class MapMouseEventArgs : MapEventArgs
{
MapMouseEventArgs(Point viewportPoint);

[ScriptableMember]
Point ViewportPoint { get; }
}
}

 了解了以上两个关键点后就可以实现在地图上打点的功能了,比如我们通过鼠标单击事件来处理,当鼠标在地图上单击的时候实现打点,代码如下:

protectedvoid map_MouseClick(object sender,MapMouseEventArgs E)
{
//初始化一个图标
Pushpin pushpin =new Pushpin();
设置图钉对象的定位坐标pushpin.LOCATIOn map.ViewportPointToLOCATIOn(e.ViewportPoint);
添加图钉到地图上@H_64_21@map.Children.Add(pushpin);
}

【Silverlight】Bing Maps开发应用与技巧一:地图打点与坐标控件(CoordControl)

最近不少朋友问我Bing Maps Silverlight Control怎么没有和DeepEarth中提供的用于显示当前鼠标所在的地理位置(经度、纬度)的显示控件,在DeepEarth中我叫它坐标控件(CoordControl)。在Bing Maps Silverlight Control中确实没有坐标控件(CoordControl),但是Bing Maps Silverlight Control为我们提供了非常灵活的编程模型框架,可以通过扩展自己开发出这样的控件。

  首先为坐标显示控件设计一个外观效果,使用Border布局,并设置了其水平靠右,垂直靠底对齐。如下所示:

<Border @H_419_128@BACkground="#FF000000"@H_419_128@ CornerRadius="8,8,8"@H_419_128@ Padding="0,0)"> Opacity="0.68"@H_419_128@ MinWidth="190"@H_419_128@ MinHeight="30"@H_419_128@
HorizontalAlignment="Right"@H_419_128@ VerticalAlignment="Bottom"@H_419_128@ Margin>TextBlock @H_419_128@x:Name="Coords"@H_419_128@ HorizontalAlignment="Center"@H_419_128@ textwrapping="Wrap"@H_419_128@ Foreground="White"/></Border>

如上的控件界面设计,其中使用了一个Coords的TextBlock控件来显示当前鼠标指针所在的地理坐标,通过Map对象的MouseMove事件来实现坐标的显示

map_MouseMove(:rgb(0,MouseEventArgs E)
{
Point viewportPoint
e.GetPosition(map);
LOCATIOn LOCATIOn;
if (map.TryViewportPointToLOCATIOn(viewportPoint,out LOCATIOn))
{
Coords.Text
String.Format("坐标: {0:f6},{1:f6}",LOCATIOn.Longitude,LOCATIOn.LatitudE);
}
}

【Silverlight】Bing Maps开发应用与技巧一:地图打点与坐标控件(CoordControl)

以上是直接在Map所在页面实现的,我们也可以将其封装为Silverlight用户控件,具体实现就是将上面的Border布局的界面那一堆代码移植到Silverlignt UserControl中去,如下XAML代码块:

UserControl @H_419_128@x:Class="BingMapsTraining.uicomponents.CoordControl"@H_419_128@
xmlns="http://scheR_520_11845@as.microsoft.com/winfx/2006/xaml/presentation"@H_419_128@
xmlns:x="http://scheR_520_11845@as.microsoft.com/winfx/2006/xaml"Grid ="LayoutRoot"GridUserControl>

接下来需要重载或是改写该控件的构造方法,让外部调用的时候传递@L_925_2@map对象参数,在构造方法里实现对Map对象的MouseMove事件的监听处理。

partial CoordControl : UserControl
{
private CoordControl()
{
InitializeComponent();
}

CoordControl(Map MapInstancE)
:
this()
{
(MapInstance != null)
{
MapInstance.MouseMove
+= (sender,E) =>
{
Point viewportPoint
e.GetPosition(MapInstancE);
LOCATIOn LOCATIOn;
(MapInstance.TryViewportPointToLOCATIOn(viewportPoint,LOCATIOn.LatitudE);
}
};
}
}
}

通过上面的方式将坐标控件进行封装后,调用就更加简单,只需要实例化一个对象作为一个Silverlight子元素并将其添加到布局容器中就行了,如下代码

LayoutRoot.Children.Add( CoordControl(.map));

推荐博文:

  【Silverlight】Bing Maps开发系列文章

@H_890_18@mSDN:http://msdn.microsoft.com/en-us/library/ee681890.aspx

  官方:http://www.microsoft.com/maps

  中国Bing Maps:http://cn.bing.com/ditu/

  官方SDK:http://www.microsoft.com/maps/isdk/silverlight/

大佬总结

以上是大佬教程为你收集整理的【Silverlight】Bing Maps开发应用与技巧一:地图打点与坐标控件(CoordControl)全部内容,希望文章能够帮你解决【Silverlight】Bing Maps开发应用与技巧一:地图打点与坐标控件(CoordControl)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。