0

MKMapViewMKMapCameraを使用しようとしています。これまでのところ、すべてをセットアップし、マップを 3D モード/フライオーバーで構成することができました。たとえば、マップの中心にニューヨークのエンパイア ステート ビルを使用し、MKMapCamera をコンストラクターでセットアップします。

public init(lookingAtCenterCoordinate centerCoordinate:
   CLLocationCoordinate2D, fromDistance distance: CLLocationDistance, 
   pitch: CGFloat, heading: CLLocationDirection)

中央にエンパイア・ステート・ビルディングがちゃんと見えるようになりました。今、私ができるようにしたいのは、MKMapCamera の「見出し」( CLLocationDirection ) を変更して、別の方向を指すようにすることです。つまり、中心にエンパイア ステート ビルディングがないことを意味します。

現在、カメラの方向を変更すると、実際にはカメラが移動し、エンパイア ステート ビルディングが MKMapView の中心に維持されます。

さまざまな API を見ると、見出しを変更した後に新しいMKMapViewセンターを「再計算」するために使用できる API が見つかりません。

指定した見出しに従ってマップの中心が移動する場所にMKMapCamera固定する、現在のMKMapViewの反対の動作を取得したいと考えています。

それを達成するための適切な方法は何ですか?

4

1 に答える 1

0

マップの中心を見ているオブジェクトの方向をMKMapCamera変更すると、その中心点を中心としたカメラの回転角度が変化します。カメラが紐で中心点に結び付けられていると想像してください。カメラは、中心点を中心に円を描くようにのみ移動できます。カメラが中心点を中心に移動する距離は、カメラの向きによって制御されます。あなたの例では、中心点はエンパイア ステート ビルディングであるため、カメラの向きを変更すると、カメラを建物に向けたまま、エンパイア ステート ビルディングの周りを円を描くようにカメラが移動します。

私があなたの要件を正しく理解している場合は、カメラの位置を固定したままにして、カメラからの見出しを使用してマップの中心に表示される位置を変更したいと考えています。これを実現するには、マップの新しい中心座標を計算する必要があります。新しい中心座標は、カメラを中心とした仮想円の円周上のポイントになります。円の半径は、カメラからマップの中心点までの距離です。

この計算では、カメラの位置、カメラからの方向、およびカメラからの距離を使用して、マップの新しい中心となる緯度と経度の座標を計算します。GreatCircleは、必要な計算を実行locationWithBearing:distance:する拡張機能としてメソッドを提供する Objective-C ライブラリです。CLLocation

- (nonnull CLLocation *)locationWithBearing:(CLLocationDirection)bearing
                                   distance:(CLLocationDistance)distance;

したがって、カメラの位置c、方向 (方位) h(度単位)、および距離d(メートル単位) が与えられると、マップの新しい中心はm(Swift で) になります。

let m = c.locationWithBearing(h, distance: d)
于 2016-08-17T10:24:10.153 に答える