5

アプリケーションで現在地の高度を取得しようとしています。しかし、オブジェクトaltitudeのプロパティを試すたびに、結果として得られます。CLLocation0.00

クエリをグーグルで検索したところ、ここここで同様の質問がありました。このリンクは、wifiまたはセルタワーでCLLocationにアクセスするとnullになることを示しています。最適に設定しようとしてもdesireAccuracy、アプリが GPS を使用するかどうかはわかりません。また、屋内にいると GPS にアクセスできないとも言われています。

多くの場合、アプリが GPS のみを使用するかどうかはわかりません。Wi-Fi やセルタワーからも高度を取得する方法が必要です。そのために、さらにググってGoogle Earth APIを入手しましたが、これは Microsoft .net テクノロジ専用だと思います。

この状況によると、マイクロソフト テクノロジで 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 にアクセスしていないと思います。

4

2 に答える 2

4

元の質問に答えるには: CLLocationManager を構成するときに、desiredAccuracy を Best または BestForNavigation に設定し、distanceFilter を kCLDistanceFilterNone に設定すると、常に GPS が使用されます。その後、CLLocation イベントで高度値も取得します。

ただし、GPS が十分な数の衛星に「ロックイン」して高度を報告できるようになるまでには、少し時間がかかります。その間、高度値なしで CLLocation イベントを報告します。したがって、verticalAccuracy 値が適切になるまで、最初の 2 つのイベントを無視する必要があります。また、最初の CLLocation イベントが古い場合があるため、タイムスタンプを確認してください。

于 2012-05-23T14:27:20.467 に答える
2

Android - 経度と緯度で高度を取得しますか?を参照してください。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で提供しています。

于 2012-05-17T06:21:11.983 に答える