在iphone SDK中获取我所在位置的海拔高度(海平面高度)

时间:2012-05-17 06:05:23

标签: iphone gps cllocation altitude

我想在我的应用程序中获取我的位置的海拔高度。但每次我尝试altitude CLLocation对象的0.00属性时,我都会得到desireAccuracy

我搜索了我的查询,我收到了类似的问题herehere。这个链接说如果我使用wifi或手机信号塔访问CLLocation,它将为空。即使我尝试将CLLocationManager设置为最佳,甚至不确定该应用是否会使用GPS。它还说,如果我在室内,我将无法访问GPS。

我很多情况下它不确定应用程序是否仅使用GPS。我想要一些从wifi或手机塔获得海拔高度的方法。为此我搜索了更多,我得到了Google Earth API,但我认为这仅适用于Microsoft .net技术。

现在根据这种情况,我想一个解决方案,我可以在Microsoft技术中创建一个Web服务并通过我的位置,我可以获得高度作为响应,但我不想这样做。

任何人都可以建议我如何从ios获取我的位置高度。有没有可用的方法?如果是,请向我指导正确的方向。

提前致谢。

Edit1

我使用- (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); } 来更新位置,当我到达我的位置时,我需要高度。

EDIT2

根据@ fishinear的回答,我尝试了以下代码:

verticalAccuracy

-1始终为{{1}}。即使在运行应用程序后持续30分钟也没有改变。我在3GS上运行ios 4.3.2。我在室内,所以我认为即使使用此代码也无法访问GPS。

2 个答案:

答案 0 :(得分:4)

回答您的原始问题: 如果您在配置CLLocationManager时将desiredAccuracy设置为Best或BestForNavigation,并将distanceFilter设置为kCLDistanceFilterNone,则将始终使用GPS。然后,您还将在CLLocation事件中获取高度值。

然而,在GPS已经“锁定”到足够的卫星以便能够报告高度之前需要一段时间。在此期间,它将报告没有高度值的CLLocation事件。因此,您应该忽略前几个事件,直到verticalAccuracy值足够好。另外,检查时间戳,因为有时第一个CLLocation事件是旧事件。

答案 1 :(得分:0)

请参阅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

提供了Elevation服务和文档