Windows Phone 位置 API

Posted

技术标签:

【中文标题】Windows Phone 位置 API【英文标题】:Windows Phone Location API 【发布时间】:2013-01-11 19:06:07 【问题描述】:

我正在开发一个基于位置的社交网络应用程序,并且正在使用高精度的地理坐标观察器和 20m 的移动阈值来获取用户的位置。我的问题是关于位置修复的频率。从文档中,我收集到 20m 的移动阈值仅意味着如果当前位置距离上一个位置更改事件的位置 20m,则不会触发位置更改事件。这表明位置修复仍然会发生,但如果

谢谢!

【问题讨论】:

【参考方案1】:

我想您想了解 MovementThreshold 的工作原理以及如何设置它。

基本上你可以说:

public class MyClass

      private IGeoPositionWatcher<GeoCoordinate> _geoCoordinateWatcher;

      /// <summary>
        /// Gets the geo coordinate watcher.
        /// </summary>
        private IGeoPositionWatcher<GeoCoordinate> GeoCoordinateWatcher
        
            get
            
                if (_geoCoordinateWatcher == null)
                
                    _geoCoordinateWatcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
                    ((GeoCoordinateWatcher)_geoCoordinateWatcher).MovementThreshold = 3;
                
                return _geoCoordinateWatcher;
            
        

你可能有的其他地方

DispatcherTimer currentSpeedTimer = new DispatcherTimer();
            currentSpeedTimer.Interval = new TimeSpan(0, 0, 1);
            currentSpeedTimer.Tick += (sender, e) =>
            
                if (this.GeoCoordinateWatcher.Position.Location.HorizontalAccuracy < 10)
                
                    if (DateTime.Now - this.GeoCoordinateWatcher.Position.Timestamp.DateTime > new TimeSpan(0, 0, 2))
                    
                        CurrentSpeed = 0;
                    
                    else
                    
                        CurrentSpeed = double.IsNaN(this.GeoCoordinateWatcher.Position.Location.Speed) ? 0 : this.GeoCoordinateWatcher.Position.Location.Speed;
                    
                
            ;
            currentSpeedTimer.Start();

还值得指出的是,我发现使用 .NET Reactive Extensions 和 IGeoPositionWatcher 对我来说非常有效。

http://msdn.microsoft.com/en-us/data/gg577609.aspx

【讨论】:

【参考方案2】:

在我看来,如果当前位置距离先前位置 > 20m 会触发事件......

如果有办法改变阈值,那似乎会以不同的方式触发,但最大分辨率可能是 20m,因为这通常是卫星的最大分辨率,如果我没记错的话,不确定。

【讨论】:

我假设为了确定当前位置是否 > 20m,设备必须触发位置修复。我试图了解是什么决定了这种情况发生的频率。 在我看来,位置修复发生在状态发生变化事件发生时。对我来说,如果发生“定位修复”,这意味着当前位置已经距离之前的位置 >20m。 这里是网站msdn.microsoft.com/en-us/library/… 我不确定 API 是否针对该信息公开。这取决于固件开发人员将哪些内容公开为该通信模块的可控组件。从外部看,您可能想查看处理电话和服务器之间通信的任何 API,在本例中是卫星。 msdn.microsoft.com/en-us/library/… 我想这可能是它......在这种情况下它看起来像每 1 秒......

以上是关于Windows Phone 位置 API的主要内容,如果未能解决你的问题,请参考以下文章

将我的 Windows Phone 的 GPS 连接为 Windows 位置传感器

Windows Phone GeoCoordinateWatcher 上相同物理位置的不同 GPS 位置读数

WebView windows phone 8.1

在 Windows phone 8.1 中实时跟踪位置

在 Windows Phone 8 中跟踪位置时出现异常

从 Windows Phone 7 中的 GeoCoordinateWatcher.StatusChanged 事件返回位置数据