8

このviewDidLoadメソッドを使用して、ユーザーに現在の緯度と経度を取得しようとしています。結果のマップは現在の場所を正しく示していますが、NSLogは一貫して次のことを示しています。

2009-09-19 16:45:29.765 Mapper[671:207] user latitude = 0.000000
2009-09-19 16:45:29.772 Mapper[671:207] user longitude = 0.000000

誰かが私がここで欠けているものを知っていますか?よろしくお願いします!

- (void)viewDidLoad {
    [super viewDidLoad];
    [mapView setMapType:MKMapTypeStandard];
    [mapView setZoomEnabled:YES];
    [mapView setScrollEnabled:YES];
    [mapView setShowsUserLocation:YES];

    CLLocation *userLoc = mapView.userLocation.location;
    CLLocationCoordinate2D userCoordinate = userLoc.coordinate;

    NSLog(@"user latitude = %f",userCoordinate.latitude);
    NSLog(@"user longitude = %f",userCoordinate.longitude);
}
4

8 に答える 8

10

私の知る限り、地図は実際に表示されるまでユーザーの位置を取得しようとはしません。その良いテストは、アプリがユーザーの場所を取得してもよいかどうかを尋ねるダイアログがいつ表示されるかということです。私の経験では、地図が画面に表示された後にのみ常に表示されます。

起動時に場所が必要な場合にこの問題に取り組む最善の方法は、従来のCore Locationハンドラーコードを実装し、そこから最初に場所を取得することです。マップがアップしたら、そこからの更新の受信を停止して、そこからさらに変更を取得できます(ただし、定期的な更新が必要な場合は、標準のCore Locationの更新を維持することをお勧めします。考えてみれば、「showsuser地図で有効になっている「位置情報」は、GPSが常に起動されるため、アプリによるコアロケーションのさらなる使用は基本的に無料です。

于 2009-09-20T02:05:14.617 に答える
4

viewDidLoad() メソッドでユーザー座標を取得しようとすると、まだ初期化されていないため、常に 0,0 の結果が返されます。

Apple サイトの「Where Am I」のサンプル コードをご覧ください。必要なものを説明しています。CLLocationManagerクラスを使用する必要があります。メソッドも必要になります

*-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation*

このメソッドは、ユーザーの場所が更新されるたびに自動的に呼び出されます。シミュレーターを使用している場合、このメソッドは 1 回だけ呼び出され、デフォルトの座標が返されます。

それが役に立てば幸い。

于 2009-09-21T05:36:57.857 に答える
2

CLLocationのドキュメントから、水平精度または垂直精度が負の場合、値が見つからないことを意味します。それがここで起こっていることだと思います。一度見ただけでは、精度の結果が向上する前に、おおよその最後の既知の場所が得られる可能性があることに注意してください。

水平精度座標の緯度と経度は円の中心を識別し、この値はその円の半径を示します。負の値は、座標の緯度と経度が無効であることを示します。

于 2009-09-19T20:55:23.117 に答える
1

MapKit の代わりに CoreLocation から座標を取得する必要があります。MapView は、実際に現在地を取得した後、ユーザーの場所を表示します。場所を特定する前に、緯度と経度は両方とも 0 に設定されます。 3

CLLocationManager インスタンスを作成し、デリゲートを設定する必要があります。場所が決まり次第お知らせいたします。

于 2009-09-20T05:17:33.310 に答える
1

Kendallが言ったように、MKMapView には読み込みが完了するまでユーザーの場所がなく、viewDidLoad メソッドは通常、早すぎてリクエストできません。CoreLocation を使用するよりも簡単な方法は、MKMapViewDelegate メソッドを実装すること -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocationです。CLLocationManager を処理しなくても、ユーザーが見つかるとすぐにユーザーの場所が表示されます。

于 2013-01-08T17:33:46.803 に答える
0

この回答は、ユーザーの場所を使用してマップ ビューを設定する方法を説明しています。

指定されたユーザーの場所で MKMapView を初期化する方法は?

于 2010-03-09T15:52:34.487 に答える
0

これを試してみてください

CLLocation *userLoc = mapView.userLocation.location;
CLLocationCoordinate2D userCoordinate = userLoc.coordinate;

NSLog(@"user latitude = %f",userCoordinate.latitude);
NSLog(@"user longitude = %f",userCoordinate.longitude);

ViewdidAppear: または遅延後に実行セレクターを呼び出します

于 2014-05-05T11:32:24.023 に答える
-1

これを viewDidLoad セクションに追加します

mapView.showsUserLocation = YES;
于 2010-05-02T04:56:47.133 に答える