所以,我有一个导航应用程序。它使用板载GPS(以及磁性指南针和加速度计(来构建一个3D增强现实视图,类似于Google Sky的工作方式。我们没有出于多种原因使用ARKIT,包括该设备将用于移动的车辆,我们担心Arkit会因看似非移动的车辆内部而分心,而不是关注不可见力的外观车辆外的参考框架,这是我们希望将AR导航显示与。
的参考框架AR方向部分不是我的主要问题(尽管我发现Magcompass Plus加速度计确实很容易出错(。我的烦恼问题是,无论我多么努力,某些iOS设备(主要是iPad(似乎都没有使用实际的GPS硬件来确定核心位置数据。它似乎正在使用WiFi三级发音,因此提供了较低的位置数据(缺乏海拔高度(,因此从位置数据计算出的速度较低。
这是一些事实。
我初始化这样的位置服务:
_locationManager = [[CLLocationManager alloc]init];
[_locationManager requestAlwaysAuthorization];
_locationManager.delegate = self;
_locationManager.distanceFilter = kCLDistanceFilterNone;
_locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
[_locationManager startUpdatingLocation];
在某些设备上,我们肯定有一个完整的3D GPS位置,包括高度。
但是,某些测试设备(" apple mpmf2ll/a iPad Pro,带有Wi-Fi Cellular 512GB,10.5",Silver"," Apple iPad Air 2 MH2V2LL/A(16GB,Wi-Fi,Wi-Fi Cellular,Silver(2014 2014模型",具有蜂窝能力和OS 11.2.6(,我们获得了报告垂直精度的0值的位置数据,这意味着它无效,而LAT/LON位置值的行为就像是WiFi三重透中的位置,而不是真正的GPS。
我们已经尝试开发和关闭飞机模式,确保启用位置服务并授予我们应用程序的许可。我们尝试将位置权限设置为"始终"。我们尝试了出厂重置和恢复。
来自其他应用程序开发人员的简单指南针应用似乎可以正常工作,并在这些设备上显示正确的高度和垂直精度。我们的应用似乎在其他设备(各种口味,全尺寸的第五代iPad(上可以正常工作,并获得完整的GPS位置。因此,这似乎不是测试设备的硬件故障,但似乎也不是我们代码的完全故障。
是否有一些魔法我们不要求或执行正确的魔术以确保我们获得完整的GPS采购位置数据?
对于我们无法获得GPS高度的设备或情况,代码中已经有一个后备。但是,如果该设备具有功能,我们希望确保我们将其运用到最佳能力。我们还在努力使用外部GPS,但是似乎我们应该能够使用iOS设备的肯定可以使用。
感谢任何见解。似乎不应该很难。
因此,在经历了很多痛苦和痛苦之后,我们确定了罪魁祸首,但是仍然有一个未知的罪魁祸首。
我将从修复程序的差异开始,因为参考代码胜过全部,然后我会解释我们认为出了问题的问题。
- CLGeocoder *geocoder = [[CLGeocoder alloc] init] ;
- [geocoder reverseGeocodeLocation:_currentLocation completionHandler:^(NSArray *placemarks, NSError *error)
+ if(_udpSocket == nil || timesincelastnetwork > _waitSecondsWithNoNetwork)
{
- if (!(error))
- {
- CLPlacemark *placemark = [placemarks objectAtIndex:0];
- // NSLog(@"nCurrent Location Detectedn");
- //NSLog(@"placemark %@",placemark);
- NSString *locatedAt = [[placemark.addressDictionary valueForKey:@"FormattedAddressLines"] componentsJoinedByString:@", "];
- NSString *Address = [[NSString alloc]initWithString:locatedAt];
- NSString *Area = [[NSString alloc]initWithString:placemark.locality];
- NSString *Country = [[NSString alloc]initWithString:placemark.country];
- NSString *CountryArea = [NSString stringWithFormat:@"%@, %@", Area,Country];
- //NSLog(@"%@",CountryArea);
-
-
- CLLocation* l = placemark.location;
- CLLocationCoordinate2D coords = l.coordinate;
+ _currentLocation = [locations objectAtIndex:0];
+ //[_locationManager stopUpdatingLocation];
-
- float lati = coords.latitude; //39.8560963f; //
- float longi = coords.longitude; //-104.67373759999998f; //
-
- float alti = l.altitude;
因此,似乎发生的事情是,在地理编码过程中,在某些设备上,高度丢失了,但是在某些设备上,它被保留了。由于我们真的不需要地理编码(我们从示例代码有用的情况下将其放入了(,因此我们只是将其取出并直接从位置服务中使用LAT/LON/ALT,并且可以正常工作现在所有设备。
我认为这是一个错误,或者至少是一个无证件的条件,即在某些不清楚的情况下,地理编码器正在删除高度值,但幸运的是,这是我们能够解决的错误。