我正在尝试在我的应用程序中获取我的位置的高度。但是每次我尝试altitude
对象的CLLocation
属性时,都会得到0.00
作为结果。
我用谷歌搜索查询,然后遇到类似的问题here和here。该链接表示,如果我使用wifi或手机信号塔访问CLLocation,它将为null。即使我尝试将desireAccuracy
设置为最佳设置,也不要确保该应用程序将使用GPS。也就是说,如果我在室内,将无法访问GPS。
在很多情况下,我不确定该应用程序是否只会使用GPS。我也想要一些从wifi或手机发射塔获取海拔的方法。为此,我在Google上搜索更多,得到了Google Earth API,但我认为这仅适用于Microsoft .net技术。
现在,根据这种情况,我认为对于解决方案,我可以在Microsoft Technology中创建一个Web服务并将其传递到该位置,并且可以获取海拔高度作为响应,但是我不想这样做。
谁能建议我如何从ios获取我所在位置的海拔高度。有没有可用的方法?如果可以,请按照正确的方向导航。
提前致谢。
编辑1
我使用CLLocationManager
更新位置,当我获得位置时,我需要海拔高度。
编辑2
根据@fishinear的回答,我尝试了以下代码:
- (void)viewDidLoad
{
[super viewDidLoad];
manager = [[CLLocationManager alloc] init];
[manager setDesiredAccuracy:kCLLocationAccuracyBestForNavigation];
[manager setDistanceFilter:kCLDistanceFilterNone];
[manager setDelegate:self];
[manager startUpdatingLocation];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
if ([newLocation verticalAccuracy] >= 0) {
NSLog(@"Altitude = %lf",newLocation.altitude);
}
NSLog(@"Vertical Accuracy : %lf",newLocation.verticalAccuracy);
}
verticalAccuracy
始终是-1
。即使将应用程序运行了30分钟,它也没有改变。我在3GS上运行ios 4.3.2。我在室内,因此我认为它甚至都无法使用此代码访问GPS。 最佳答案
看到Android - Get Altitude By Longitude and Latitude?,有一个Android解决方案,但它很容易适应iOS。
答案是使用USGS Elevation Query Web Service
从最上面的答案开始,基本上,您只是将HTML Web请求发送到:
http://gisdata.usgs.gov/xmlwebservices2/elevation_service.asmx/getElevation?X_Value=" +
String.valueOf(longitude) +
"&Y_Value=" + String.valueOf(latitude)
+ "&Elevation_Units=METERS&Source_Layer=-1&Elevation_Only=true";
然后,您可以从
<double>...</double>
标签之间解析出响应文本编辑:
看来您可能正在尝试使美国境外的海拔升高。
Google Maps API的https://developers.google.com/maps/documentation/javascript/elevation确实提供了海拔服务和文档