说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Windows Phone 7 实现简单的GPS定位器

HTML文档下载 WORD文档下载 PDF文档下载
GPS系统变得很受欢迎,许多人的手机都需要它,尤其是游客。但是许多开发商不知道如何开始做GPS系统。这是一个Windows Phone 7中的GPS系统的例子,展示了如何通过手机内置的定位得到你的位置。然后在Bing地图上显示位置(就像谷歌地图)。

 

作者:Ahmedn1

翻译:okbase.net winphone

 

源代码下载

 

介绍

GPS系统变得很受欢迎,许多人的手机都需要它,尤其是游客。但是许多开发商不知道如何开始做GPS系统。

这是一个Windows Phone 7中的GPS系统的例子,展示了如何通过手机内置的定位得到你的位置。

然后在Bing地图上显示位置(就像谷歌地图)。

背景

要使用Bing地图,你需要一个Bing Key用于开发时使用。这是一个您的应用程序的唯一键,用它可以登录到Bing地图。

 

你可以注册Windows Live账号时从Bing Maps Portal(https://www.bingmapsportal.com/)得到key。

拿到key后,你可以将它附加到您的应用程序,并得到你想要的地图。之后,我们可以使用一个重要的服务:Terra服务,它可以以文本形式提供经纬度位置。您可以在项目名称上右键点击,选择“添加服务引用”对于Terra服务,你可以使用这个网址:http://msrmaps.com/TerraService2.asmx,然后你可以根据导入时候所命名的名字引用该命名空间。

官方网站:http://msrmaps.com

 

Terra服务包含了许多重要的用于GPS的方法,例如:

 

  • ConvertLonLatPtToNearestPlace
  • ConvertLonLatPtToUtmPt
  • ConvertPlaceToLonLatPt
  • ConvertUtmPtToLonLatPt
  • CountPlacesInRect
  • GetAreaFromPt
  • GetAreaFromRect
  • GetAreaFromTileId
  • GetLatLonMetrics
  • GetPlaceFacts
  • GetPlaceList
  • GetPlaceListInRect
  • GetTheme
  • GetTile
  • GetTileMetaFromLonLatPt
  • GetTileMetaFromTileId
  •  

     

    我们感兴趣的是:ConvertLonLatPtToNearestPlace,从坐标得到地名。反过来的方法是:

     

    ConvertPlaceToLonLatPt

     

    使用代码

     

    首先,我们设定地图部分的XAML代码

     

     

     

    <my:Map Height="457" Name="mapBing" Width="450" CredentialsProvider="Your Key"/>
    然后要让你的地图工作,你会发现,它会开始工作,甚至在设计视图之前,部署和运行。代码如下:
    Terra.TerraServiceSoapClient client = new Terra.TerraServiceSoapClient();
    这一部分是从下载的服务里创建一个对象:
    public MainPage()        {            InitializeComponent();            client.ConvertLonLatPtToNearestPlaceCompleted += |                new EventHandler<ConvertLonLatPtToNearestPlaceCompletedEventArgs>(                client_ConvertLonLatPtToNearestPlaceCompleted);            mapBing.ZoomBarVisibility = System.Windows.Visibility.Visible;        }
    在构造函数中,我们创建了ConvertLonLatPtToNearestPlaceCompleted事件的事件处理程序
    ,激发时得到最接近我们的坐标位置,然后使地图上的缩放按钮可见。
    void client_ConvertLonLatPtToNearestPlaceCompleted(object sender,     ConvertLonLatPtToNearestPlaceCompletedEventArgs e)        {            txtResult.Text = e.Result;            mapBing.Center = new GeoCoordinate(latitude, longitude);            mapBing.ZoomLevel = 10;        }
    这个是事件处理函数,它显示文本块并将新的坐标置于地图中心,并将放大倍数设为10
    现在让我们看一下按钮点击事件:
    txtResult.Text = "Loading....";GeoCoordinateWatcher myWatcher = new GeoCoordinateWatcher();var myPosition = myWatcher.Position;latitude = 30.01;longitude = 31.14;if (!myPosition.Location.IsUnknown){    latitude = myPosition.Location.Latitude;    longitude = myPosition.Location.Longitude;}client.ConvertLonLatPtToNearestPlaceAsync(new Terra.LonLatPt {     Lat = latitude, Lon = longitude });
    GeoCoordinateWatcher类是手机定位器的内置类,可以通过Position属性得到当前坐标。
    我添加了一些默认的坐标,因为在Windows Phone模拟器中没有定位装置,所以它不会得到正确的坐标。我添加了这些默认值仅用于测试。最后,我们使用Terra服务搜索此位置的名称。
    兴趣点
    在我的工作中,我添加了几个按钮来改变不同地图的模式如:航空,公路,街道,卫星,...... 等等,但我发现,这是不必要的,所以我删除了它。
    历史
    这是第一个版本,我会尽快与更先进的功能,转载时请注明出处。

     

    备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘