- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 distanceFromLocation: 方法来计算我手持 iPhone 行走的总距离。到目前为止,我一直在四处寻找以帮助纠正我令人困惑、不准确且看似武断的结果。在这些代码片段中,theLabel 只是一个出现在我的应用程序界面中的标签对象,distanceMoved 是我试图存储我走过的总距离的变量,而 locMan 是一个在我的@interface 文件中声明的位置管理器.
- (void)viewDidLoad
{
locMan = [[CLLocationManager alloc] init];
locMan.delegate = self;
[locMan startUpdatingLocation];
isInitial = true;
distanceMoved = 0.0;
[super viewDidLoad];
}
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
distanceMoved += [newLocation distanceFromLocation: oldLocation];
theLabel.text = [NSString stringWithFormat: @"%f meters", distanceMoved];
}
如果您能帮助解决我在这里做错的问题,我们将不胜感激。谢谢!
最佳答案
kCLLocationAccuracyBest
,oldLocation
为零时不计算距离。您还可以做更多事情,但只要您获得足够好的 horizonalAccuracy (<30m),这应该可行。您可以过滤掉低准确度的结果,但您必须自己跟踪 oldLocation,这有点复杂。
添加一个 NSLog(见下文)以便您可以了解发生了什么。如果您仍然没有得到好的结果,请发布 NSLog 的输出,以便我们了解发生了什么并提供更多帮助。
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
NSTimeInterval age = -[newLocation.timestamp timeIntervalSinceNow];
if (age > 120) return; // ignore old (cached) updates
if (newLocation.horizontalAccuracy < 0) return; // ignore invalid udpates
// EDIT: need a valid oldLocation to be able to compute distance
if (oldLocation == nil || oldLocation.horizontalAccuracy < 0) return;
CLLocationDistance distance = [newLocation distanceFromLocation: oldLocation];
NSLog(@"%6.6f/%6.6f to %6.6f/%6.6f for %2.0fm, accuracy +/-%2.0fm",
oldLocation.coordinate.latitude,
oldLocation.coordinate.longitude,
newLocation.coordinate.latitude,
newLocation.coordinate.longitude,
distance,
newLocation.horizontalAccuracy);
distanceMoved += distance;
theLabel.text = [NSString stringWithFormat: @"%f meters", distanceMoved];
}
- (void)viewDidLoad
{
locMan = [[CLLocationManager alloc] init];
locMan.delegate = self;
locMan.desiredAccuracy = kCLLocationAccuracyBest;
locMan.distanceFilter = 10;
[locMan startUpdatingLocation];
isInitial = true;
distanceMoved = 0.0;
[super viewDidLoad];
}
编辑 iOS6 如果您想使用 didUpdateLocations: 做同样的事情(因为现在不推荐使用上述方法)最简单的解决方案是简单地将每个位置保存在属性中,以便在下一次更新时您拥有以前的位置。在类中声明一个属性来保存 oldLocation
:
@property (nonatomic, retain) CLLocation* oldLocation;
然后在委托(delegate)方法中保存每个 newLocation
以用作下次调用委托(delegate)方法时的 oldLocation
:
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocations:(NSArray *)locations
{
CLLocation* newLocation = [locations lastObject];
NSTimeInterval age = -[newLocation.timestamp timeIntervalSinceNow];
if (age > 120) return; // ignore old (cached) updates
if (newLocation.horizontalAccuracy < 0) return; // ignore invalid udpates
// EDIT: need a valid oldLocation to be able to compute distance
if (self.oldLocation == nil || self.oldLocation.horizontalAccuracy < 0) {
self.oldLocation = newLocation;
return;
}
CLLocationDistance distance = [newLocation distanceFromLocation: self.oldLocation];
NSLog(@"%6.6f/%6.6f to %6.6f/%6.6f for %2.0fm, accuracy +/-%2.0fm",
self.oldLocation.coordinate.latitude,
self.oldLocation.coordinate.longitude,
newLocation.coordinate.latitude,
newLocation.coordinate.longitude,
distance,
newLocation.horizontalAccuracy);
distanceMoved += distance;
theLabel.text = [NSString stringWithFormat: @"%f meters", distanceMoved];
self.oldLocation = newLocation; // save newLocation for next time
}
关于iphone - CLLocation 方法 distanceFromLocation : Inaccurate results 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10184802/
我正在使用 HTML5 的 Canvas 创建一个“预览”图像,该图像主要由一些矩形和简单的线条组成。到目前为止工作正常,但有一个问题我无法以某种方式解决。假设以下情况: context.fillSt
下面是我用来测试 Tesseract 性能的非常简单的程序。尽管图片是高质量且非常清晰的屏幕截图(不是带有颜色的复杂图片),但我得到的结果并不像预期的那样。请查看我的代码和下面的结果。我不确定是我做错
我已经为此苦苦挣扎了一段时间,希望得到一些帮助! 我在 sprite kit 中有一个瓦片 map ,用户可以点击任何瓦片,事情就会发生。为了获得他们点击的图 block ,我使用了这样的东西: -(
嗨,我编写了这个简单的 javascript 幻灯片,因为我想用 javascript 编写自己的幻灯片。它会按照设定的时间间隔自动更改图像。但是,当我尝试单击后退和前进功能时,结果不准确或图像是有序
我正在尝试实现一种光线拾取算法,用于绘制和选择 block (因此我需要相当高的准确性)。最初我使用了光线转换实现,但我觉得它不够准确(尽管故障可能出在我的相交测试上)。不管怎样,我决定尝试使用深度缓
请参阅此 Google Play 邮件:- Issue: Inaccurate Target Audience We determined that your app and store listin
我已经使用 C++ 和 OpenGL 创建了一个简单的 3d 第一人称演示,它似乎运行良好。我的目标是:当用户将相机指向一个平面并单击鼠标左键时,我想绘制一条射线的交点,该射线从玩家的位置与该平面指向
背景 我有一个 java 服务器正在对 go 服务器进行 RPC 调用。 java rpc 客户端和 go rpc 服务器使用 lightstep 进行检测。除了 lightstep UI 中放置 g
我有一个存储十进制值的 MySQL 数据库 (DECIMAL(32, 12))。当我使用 HeidiSQL 选择值时,值显示正确(例如 15922.638440778302)。但是当我在 NodeJS
我试图使用以下代码将 div 元素的右边缘定位到距页面中心 300 像素的位置: HTML: CSS: #content { width: 100%;
我需要在 WebView -> WebChromeClient -> onProgressChanged() 中访问进度值。进度整数值不会从 0 增加到 100,而是会跳来跳去。这是加载一页和相关进度
我正在用 C++ 编写一个类,它需要一些在整个类中都可以访问的常量。通常我会使用#define、const- 或静态声明,但发生了一些奇怪的事情:所以例如我写 #define Rm 8.3144621
我正在尝试使用 distanceFromLocation: 方法来计算我手持 iPhone 行走的总距离。到目前为止,我一直在四处寻找以帮助纠正我令人困惑、不准确且看似武断的结果。在这些代码片段中,t
我已经实现了一些代码来创建一些代码来处理相对较小位置的图像,例如平面,以便在我存储的图像位置和传入的纬度/经度信息之间进行转换。 使用 https://msdn.microsoft.com/en-us
我已经安装了最新的 VS2017 更新 (15.4.4),但在编译我们的项目时,单元测试开始失败。在使用优化 (/O2) 和浮点快速模型 (/fp:fast) 时,问题似乎发生在某些情况下。以前的编译
在 Mac OS Mojave 10.14.6 上使用 VS Code 处理一个奇怪的包含问题。 #include errors detected. Please update your includ
我是一名优秀的程序员,十分优秀!