2012-05-17 110 views
4

我正在尝试在我的应用程序中获取我的位置的海拔高度。但每次我尝试altitudeCLLocation对象的属性,我得到0.00作为结果。在iPhone SDK中获取我的位置的海拔高度(海拔高度)

我为我的查询搜索了一下,我收到了类似的问题herehere。这个链接是说,如果我使用wifi或手机信号塔访问CLLocation,它将为空。即使我试图设置desireAccuracy最好,即使它不确定该应用程序将使用GPS。这也是说,如果我在室内,我将无法访问GPS。

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

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

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

在此先感谢。

EDIT1

我用CLLocationManager更新的位置,当我把我的位置,我需要的高度。

EDIT2

据@ 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。

回答

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>之间解析出响应文本标签

编辑: 它看起来像你可能试图让海拔在美国之外。

谷歌地图API的功能,在https://developers.google.com/maps/documentation/javascript/elevation

+0

我试过使用这个URL,并且我分别传递了x和y值'22.998851594142938'&'72.5317382812553173828125',响应是' -1.79769313486231E + 308'。我对此有所了解?如何获得这个高度? –

+0

谢谢。你编辑的答案帮助:) https://developers.google.com/maps/documentation/javascript/elevation这是我正在寻找的。 –

4

提供海拔服务和文档要回答你原来的问题: GPS将始终使用,如果你配置CLLocationManager时设置desiredAccuracy为最佳或BestForNavigation,并distanceFilter到kCLDistanceFilterNone。然后您将在CLLocation事件中获取高度值。

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

+0

但是,我怎么能确定哪些高度值在你说的几个值中是正确的? –

+0

检查CLLocation中的verticalAccuracy字段。这表示高度值的精确度,如果高度未确定,则为负值。 – fishinear

+0

检查我的'edit2'问题。我实施了你的建议,但没有奏效。 –