iPhone 6 Plus上的IOS10。 一个小应用程序应用程序,它抓住gps坐标并将它们发送到远程Web服务。在iphone地图上,用户位置正确显示,但检索到的坐标为:
location.coordinate.latitude,
location.coordinate.longitude
离地图说我在哪里0.5英里!无论我搬到哪里,这都是一致的。
我遵循Apple的最佳做法并使用委托方法,如下所示:这些坐标不正确。
// Delegate method from the CLLocationManagerDelegate protocol.
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations {
CLLocation* location = [locations lastObject];
NSDate* eventDate = location.timestamp;
NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
if (abs(howRecent) < 15.0) {
// Log the data
NSLog(@"latitude %+.6f, longitude %+.6f\n",
location.coordinate.latitude,
location.coordinate.longitude);
}
}
我按如下方式设置位置准确度:
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
我将gps坐标采样30秒,以确保我获得最佳准确度。
我在2台不同的iPhone上试过这个,都显示了同样的问题。 提前谢谢。
答案 0 :(得分:1)
我终于找到了导致问题的原因.. 我现在在中国......这就是神秘抵消的原因......中国的地图是“抵消”的。 如果你有兴趣,这里有一篇关于它的帖子,这让我免于撕裂我的头发。 http://www.sinosplice.com/life/archives/2013/07/16/a-more-complete-ios-solution-to-the-china-gps-offset-problem
中国使用名为GCJ-02的映射投影,它与西方的地图标准(WGS-84)不同。因此,如果您正在开发地图系统,您可能希望将此考虑在中国的旅行者中!
无论如何,感谢您提供有用的编码建议。
答案 1 :(得分:0)
您可以在方法中添加一项检查,以便再次更新位置,直至达到所需的准确度:
// Delegate method from the CLLocationManagerDelegate protocol.
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations {
// You can check for either locationManager.desiredAccuracy or a value you'd like in meters
CLLocation* location = [locations lastObject];
if (location.horizontalAccuracy > locationManager.desiredAccuracy) {
//Do nothing yet
return;
}
NSDate* eventDate = location.timestamp;
NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
if (abs(howRecent) < 15.0) {
// Log the data
NSLog(@"latitude %+.6f, longitude %+.6f\n",
location.coordinate.latitude,
location.coordinate.longitude);
}
}