質問

この 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);
}
役に立ちましたか?

解決

マップは、私の知る限りでは、それが実際に表示されるまで、ユーザの位置を取得しようとしません。それの良いテストは、ときにアプリがユーザーの位置を取得することがOKかどうかを尋ねるダイアログを得るのですか?私の経験では、それは常にマップが画面上に表示する唯一の後に来ています。

あなたが起動時に場所を持っている必要があります場合は、この問題にアプローチする最良の方法は、古典的なコアロケーションハンドラのコードを実装し、最初にその場所を取得することです。あなたが一定のアップデートが必要な場合は、ちょうど標準のコア場所の更新を維持するほうが良いでしょうけれども、あなたはそれについて考える場合は、「ユーザーを示していたときにあなたは、。(マップが起動したら、そこからアップデートの受信を停止し、そこからさらに変更を取得することができます場所」GPSはとにかく全体の時間を解雇されますので、基本的に自由であるあなたのアプリによってコア場所のマップをさらに使用して有効になってます。

他のヒント

あなたがのviewDidLoad()メソッドでは、ユーザー座標を取得しようとした場合、それがまだ初期化されていないため、

、それは常に、0,0の結果が得られます。

あなたは「アムI」のサンプルコードフォームアップルのサイトを見てみる必要があります。それはあなたが必要なものについて説明します。 あなたは CLLocationManager のクラスを使用する必要があります。あなたはまた、この方法が必要になります。

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

このメソッドは、ユーザーの位置が更新されるたびに自動的に呼び出されます。あなたは、シミュレータを使用している場合、このメソッドは一度だけ呼び出され、それはいくつかのデフォルトの座標を返します。

それがお役に立てば幸いです。

資料より CL位置, 、水平精度または垂直精度が負の場合、値が見つからないことを意味します。それがここで起こっていることだと思います。一度確認しただけでは、結果の精度が向上する前に、最後に確認されたおおよその位置が得られる可能性があることに注意してください。

水平精度座標の緯度と経度は円の中心を識別し、この値はその円の半径を示します。ネガティブ value は、座標の 緯度と経度は無効です。

あなたはCoreLocationの代わりに、MapKitから座標を取得する必要があります。それは実際に現在位置を得た後のMapViewは、ユーザの位置を表示します。位置が決定される前に、緯度と経度の両方が0.3に設定されている

あなたはCLLocationManagerのinstace、設定デリゲートを作成する必要があります。位置が決定されたときに通知されます。

ケンダルには、前記のように、

、MKMapViewは、それがロードを完了するまで、ユーザの位置を有し、ありませんviewDidLoadメソッドは、通常はそれを要求するのは時期尚早です。 CoreLocationを使用するよりも簡単な方法は、MKMapViewDelegateメソッドを実装することです -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation。これは、CLLocationManagerに対処しなくても、とすぐにそれが配置されているとして、あなたにユーザの位置を与えます。

この答えは、ユーザーの場所でマップビューを設定する方法について説明します:

ハウツーは、所与のユーザの位置とMKMapViewを初期化するか

タグでこれを試してみてください
CLLocation *userLoc = mapView.userLocation.location;
CLLocationCoordinate2D userCoordinate = userLoc.coordinate;

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

ViewdidAppear:または遅延後seletorを行う呼び出し

あなたのviewDidLoadセクションにこれを追加

mapView.showsUserLocation = YES;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top