iPhone从GPS获取错误的坐标

时间:2017-03-10 15:57:54

标签: ios objective-c gps

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上试过这个,都显示了同样的问题。 提前谢谢。

2 个答案:

答案 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);
   }
}