Hello Friend我看过很多关于gps准确性问题的帖子,但它一直没有用到
-(void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
NSString *latstr = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude];
NSString *longstring=[NSStringstringWithFormat:@"%f",newLocation.coordinate.longitude];
if (abs(howRecent)>5.0)
{
[self.locationManager startUpdatingLocation];
return;
}
if(abs(newLocation.horizontalAccuracy)<0.0f)
{
[self.locationManager startUpdatingLocation];
return;
}
if(newLocation.horizontalAccuracy>65.0f)
{
[self.locationManager startUpdatingLocation];
return;
}
self.latstring = [latstr copy];
self.longstr = [longstring copy];
if((updateLocationFirst||loadFirstView))
{
[[NSUserDefaults standardUserDefaults]setObject:latstring forKey:@"Latitude"];
[[NSUserDefaults standardUserDefaults]setObject:longstr forKey:@"Longitude"];
[self displayParticularDaySpecial];
loadFirstView=FALSE;
updateLocationFirst=FALSE;
[self.locationManager stopUpdatingLocation];
}
}
这里的问题是,如果我正在降低准确度值,我会将谷歌api的纬度和经度发送到某些地址,这需要花费大量的时间来加载,当你到达目的地时这个值有问题目的地与0.6英里的差异。
答案 0 :(得分:2)
您应该参考Location Awareness Programming Guide,它提供了确定您所在位置的优秀编程示例。
正如您在该文档的演示中所看到的,当您start the standard location manager时,您通常会告诉它您需要什么样的准确性。一旦启动了位置管理器,您就不必再次启动它(就像您在代码示例中所做的那样)。 didUpdateLocations
方法将一次又一次地调用,准确性越来越高,所有这些都是独立的。您无需再次启动位置管理器...它会一直运行,直到您关闭它为止。根据定义,如果您在didUpdateLocations
,则表示它已经开启。
我还注意到你正在使用旧didUpdateToLocation
。如果你正在为iOS 6编程,你真的想使用didUpdateLocations
,这是CLLocationManagerDelegate
方法的当前版本。
最后,您提到需要很长时间才能找到您的位置。这很可能。事实上,在某些地区,你永远不会非常接近(或任何地方)。您的应用应该假设准确的位置需要一段时间,如果您从未获得真正准确的位置,您应该优雅地处理,这是非常可能的。
答案 1 :(得分:1)
您是否在CLLocationManager中设置了desiredLocationAccuracy?默认情况下,范围有点宽。
获取非常精确的值需要一些时间。