1

位置特定ボタンが押されたときにユーザーの現在の場所を中心にする次のコードがあります。

- (void)locate
{
    if (self.curLocation) {
        [self.googleMapView setCenterCoordinate:self.curLocation.coordinate animated:YES];
        NSLog(@"setting center (%f,%f), but got (%f,%f)", self.curLocation.coordinate.latitude, self.curLocation.coordinate.longitude, self.googleMapView.centerCoordinate.latitude, self.googleMapView.centerCoordinate.longitude);
    }
}

NSLog の出力は「センター (37.785834,-122.406417) を設定していますが、(37.785826,-122.406406) を取得しました」

これは、setCenterCoordinate が指示された座標ではなく、おおよその座標に移動したことを意味します。ズーム レベルを実装すると、同じ場所でズームアウトしてからズームインすると (setRegion も中心座標を変更するため) 古い場所から移動するため、これは非常に不便です。これは直感に反するものであり、Android プラットフォーム API はこの不規則な動作を示しません。

setCenterCoordinate が正確な座標に移動しない理由と、可能であれば、ズームアウトとズームインが同じ中心になるようにする方法を誰かが説明できますか。ありがとう。

4

2 に答える 2

4

元の「適切な」中心座標をivarに保存し、ズームインするたびにそれを使用できます。そうすれば、常に開始位置に戻るはずです。ボタンまたはメソッドを呼び出してズームインしていると思います。

中心座標は信頼できないようです。ズームインすると信頼性が高まりますが、要求どおりに設定されているようには見えません. によって返された中心座標を使用してもregionThatFits:、正確な一致は得られません。-mapView:regionDidChangeAnimated:これを試すために使用できます:

- (void)viewDidAppear:(BOOL)animated
{
    MKCoordinateSpan span = MKCoordinateSpanMake(0.0001f, 0.0001f);
    CLLocationCoordinate2D coordinate = {35.67106,139.764909};
    MKCoordinateRegion region = {coordinate, span};

    MKCoordinateRegion regionThatFits = [self.mapView regionThatFits:region];
    NSLog(@"Fit Region %f %f", regionThatFits.center.latitude, regionThatFits.center.longitude);

    [self.mapView setRegion:regionThatFits animated:YES];
//  [self.mapView setRegion:region animated:YES];
//  [self.mapView setCenterCoordinate:coordinate animated:NO];
}

- (void)mapView:(MKMapView *)myMapView regionDidChangeAnimated:(BOOL)animated
{
    NSLog(@"Center: %f %f", myMapView.region.center.latitude,myMapView.region.center.longitude);
}
于 2012-04-23T11:10:18.537 に答える
0

setCenterCoordinateの最後のパラメーターは「アニメーション化」されています。これをYESに設定しているため、正しい場所に到達するまでに1秒ほどかかる場合があります。これは別のスレッドで発生するため、マップがターゲット座標に到達する前にNSLog行が発生します。センターを読む前に1、2秒待つか、画面上のボタンを使用してNSLogステートメントをアクティブにして、マップの移動が停止した後に確実に実行できるようにします。

于 2012-04-22T06:00:52.143 に答える