sud*_*-rf 9 iphone cocoa-touch core-location
我的应用程序中存在问题.我试图找到用户的位置以达到最佳精确度,以确定他们的邮政编码.目前我有一个按钮,按下后,启动一个名为的方法locateMe.
-(IBAction)locateMe; {
self.locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
Run Code Online (Sandbox Code Playgroud)
然后我实施了 didUpdateToLocation:
-(void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation; {
NSLog(@"Found location! %f,%f",newLocation.coordinate.latitude,newLocation.coordinate.longitude);
}
Run Code Online (Sandbox Code Playgroud)
我之前做过更复杂的事情,didUpdateToLocation但是当我测试了一些东西时,我意识到它发现的第一个位置至少不准确.所以,我把NSLog电话放在那里,它给了我一个类似于下面的输出......
Found location! 39.594093,-98.614834
Found location! 39.601372,-98.592171
Found location! 39.601372,-98.592171
Found location! 39.611444,-98.538196
Found location! 39.611444,-98.538196
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它首先给了我一个不正确的值,这在我的应用程序中引起了问题,因为它没有给出正确的位置.
所以,这是我的问题.有什么办法我可以等待位置经理找到最准确的位置吗?
提前致谢!
编辑:我想要这样的东西:
if (newLocation.horizontalAccuracy <= locationManager.desiredAccuracy) {
}
Run Code Online (Sandbox Code Playgroud)
但它永远不会被召唤!
我不认为你期望它如何发挥作用.无法保证您获得具有特定准确度的位置.您假设您最终会获得一个具有所需报告准确度的位置,而这种位置不一定会发生.LocationManager将向您发送一系列位置更新,这些更新通常但不一定总是越来越准确.不幸的是,您不能要求设备接收足够强大的信号,以便为您提供任意精度的位置,并且设备无法预测未来会说"这是我将获得的最准确的位置" .
您可以尝试存储在某个时间间隔内报告的所有位置,或直到报告的准确度似乎稳定并接受在几秒钟之后您可能无法获得明显更准确的位置.然后,您可以使用最后报告的位置,或者所有位置的最准确或加权中心点,或者您认为有意义的任何内容.
鉴于您说这将用于执行反向地理编码以获取邮政编码,我不得不想知道为什么这是一个问题.即使是最精细的位置也可能会触及用户当前的邮政编码,即使是最精确的也不会完全正确,所以如果您的用户可以看到,您仍然希望允许用户更正.
核心位置通常调用didUpdateToLocation,并在前一个会话期间检测到位置.因此,您可以跳过它发送给您的第一个位置.如果您根据此数据计算用户速度,则应该了解该行为.在这种情况下,通常以100英里/小时的速度行人.:)
如果您使用地理坐标提交评论或照片 - 当用户输入以编写评论屏幕时,开始接收地理坐标.而他会输入一条消息 - 检测到的位置变得非常准确.
| 归档时间: |
|
| 查看次数: |
4715 次 |
| 最近记录: |