好库网 好库网首页 | 我的好库
微微发软的芒果

文章分类

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

发布者:winphone
发布日期:2012/4/29 19:21:58   更新日期:2012/4/29 19:30:02
阅读次数:4521
评分:4.80
介绍: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服务搜索此位置的名称。
    兴趣点
    在我的工作中,我添加了几个按钮来改变不同地图的模式如:航空,公路,街道,卫星,...... 等等,但我发现,这是不必要的,所以我删除了它。
    历史
    这是第一个版本,我会尽快与更先进的功能,转载时请注明出处。

     


    评论 [发表评论]
    账号 密码 还没帐号呢,现在注册一个?

    免责声明:好库网所展示的信息由买卖双方自行提供,其真实性、准确性和合法性由信息发布人负责。好库网不提供任何保证,并不承担任何法律责任。