9

編集:これは、このSDKで確認されたバグになりました

Google Maps for iOS SDKのバージョン1.1.1.2311を使用しており、画面に表示されている地図の境界の緯度と経度の座標を探しています。

次のコードを使用して、現在の予測を教えてください。

NSLog(@"\n%@,%@\n%@,%@\n%@,%@\n%@,%@\n",
    [NSNumber numberWithDouble:mapView.projection.visibleRegion.farLeft.latitude],
    [NSNumber numberWithDouble:mapView.projection.visibleRegion.farLeft.longitude],
    [NSNumber numberWithDouble:mapView.projection.visibleRegion.farRight.latitude],
    [NSNumber numberWithDouble:mapView.projection.visibleRegion.farRight.longitude],
    [NSNumber numberWithDouble:mapView.projection.visibleRegion.nearLeft.latitude],
    [NSNumber numberWithDouble:mapView.projection.visibleRegion.nearLeft.longitude],
    [NSNumber numberWithDouble:mapView.projection.visibleRegion.nearRight.latitude],
    [NSNumber numberWithDouble:mapView.projection.visibleRegion.nearRight.longitude]);

ヘッダーを読んでみると、カメラが動いても更新されていないようです。けっこうだ...

/**
 * The GMSProjection currently used by this GMSMapView. This is a snapshot of
 * the current projection, and will not automatically update when the camera
 * moves. The projection may be nil while the render is not running (if the map
 * is not yet part of your UI, or is part of a hidden UIViewController, or you
 * have called stopRendering).
 */

しかし、デリゲートメソッドが呼び出されるたびに更新されるように見えるので、座標をプロットしてテストしようとしました...

私の電話の次の場合:

私のアプリの現在の予測

上からのNSLogの出力は、次のようになります。

37.34209003645947,-122.0382353290915
37.34209003645947,-122.010769508779
37.30332095984257,-122.0382353290915
37.30332095984257,-122.010769508779

これを使用してこれらの座標をプロットすると、外れたように見える投影が得られます。

実際の投影

これらの座標はアプリの起動全体で一貫しているため、一貫して何か間違ったことをしている、visibleRegionが何であるかを誤解している、またはバグを発見したと思います。誰かが私がそれがどれであるかを理解するのを手伝ってくれますか?

4

5 に答える 5

11

境界の緯度と経度を取得するには、次の手順を実行する必要があります。

GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] initWithRegion:self.googleMapsView.projection.visibleRegion];

CLLocationCoordinate2D northEast = bounds.northEast;
CLLocationCoordinate2D northWest = CLLocationCoordinate2DMake(bounds.northEast.latitude, bounds.southWest.longitude);
CLLocationCoordinate2D southEast = CLLocationCoordinate2DMake(bounds.southWest.latitude, bounds.northEast.longitude);
CLLocationCoordinate2D southWest = bounds.southWest;

よろしくロバート

于 2013-03-10T23:56:52.027 に答える
6

ここであなたの問題を見ました。彼らが次のアップデートでこの問題を修正することを願っています。

しかし今、私たちはこのように実際の目に見える領域を取ることができます:

    CGPoint topLeftPoint = CGPointMake(0, 0);
    CLLocationCoordinate2D topLeftLocation =
    [_mapView.projection coordinateForPoint: topLeftPoint];

    CGPoint bottomRightPoint =
    CGPointMake(_mapView.frame.size.width, _mapView.frame.size.height);
    CLLocationCoordinate2D bottomRightLocation =
    [_mapView.projection coordinateForPoint: bottomRightPoint];

    CGPoint topRightPoint = CGPointMake(_mapView.frame.size.width, 0);
    CLLocationCoordinate2D topRightLocation =
    [_mapView.projection coordinateForPoint: topRightPoint];

    CGPoint bottomLeftPoint =
    CGPointMake(0, _mapView.frame.size.height);
    CLLocationCoordinate2D bottomLeftLocation =
    [_mapView.projection coordinateForPoint: bottomLeftPoint];

    GMSVisibleRegion realVisibleRegion;
    realVisibleRegion.farLeft = topLeftLocation;
    realVisibleRegion.farRight = topRightLocation;
    realVisibleRegion.nearLeft = bottomLeftLocation;
    realVisibleRegion.nearRight = bottomRightLocation;

    [self drawPolylineWithGMSVisibleRegion:realVisibleRegion color:[UIColor redColor] width:10.0f forMap:mapView];

ポリライン法の描画:

- (void)drawPolylineWithGMSVisibleRegion:(GMSVisibleRegion)visibleRegion
                               color:(UIColor*)color
                               width:(double)width
                              forMap:(GMSMapView*)mapView{
    GMSPolylineOptions *rectangle = [GMSPolylineOptions options];
    rectangle.color = color;
    rectangle.width = width;
    GMSMutablePath *path = [GMSMutablePath path];
    [path addCoordinate:visibleRegion.nearRight];
    [path addCoordinate:visibleRegion.nearLeft];
    [path addCoordinate:visibleRegion.farLeft];
    [path addCoordinate:visibleRegion.farRight];
    [path addCoordinate:visibleRegion.nearRight];
    rectangle.path = path;
    [mapView addPolylineWithOptions:rectangle];
}

デフォルト以外の方位と角度のマップでも機能します。

于 2013-04-01T09:07:09.023 に答える
2

解決策は、問題が修正されたため、最新バージョンのSDK(この記事の執筆時点では1.2)をダウンロードすることです。

1.2リリースノートから:

解決された問題:-visibleRegionは、Retinaデバイスで正しいサイズの領域を報告するようになりました

ここからダウンロードしてください。

于 2013-04-18T04:51:15.377 に答える
1

印刷して手動でプロットしている緯度と経度の座標が少しずれているか、切り捨てられているようです。%fのデフォルトでは、小数点以下6桁までしか出力されません。

これが役立つかもしれない関連する質問です:

iOSで完全な精度でdoubleを印刷するにはどうすればよいですか?

于 2013-03-12T19:33:42.030 に答える
-3

たぶんあなたはロケーションマネージャーに間違った精度を与えます。

それを増やしてみてください:

locationMgr.desiredAccuracy = kCLLocationAccuracyBest;

バッテリーの消耗が進んでいますyy

于 2013-03-10T00:08:48.387 に答える