mapKitをテストし、自分の位置の精度を表示するために独自のオーバーレイを作成したいと思いました。ズーム率がたとえば.005の場合、私の周りの円はどの半径を持っている必要がありますか(私の精度がたとえば500mの場合)?
助けを得るのは素晴らしいことです:)
どうもありがとう。
mapKitをテストし、自分の位置の精度を表示するために独自のオーバーレイを作成したいと思いました。ズーム率がたとえば.005の場合、私の周りの円はどの半径を持っている必要がありますか(私の精度がたとえば500mの場合)?
助けを得るのは素晴らしいことです:)
どうもありがとう。
MKCoordinateSpan
マップのregion
プロパティの一部であるのドキュメントを参照してください。1度の緯度は常に約です。111 kmなので、latitudeDelta
メートルに変換してからピクセルあたりのメートルに到達するのは簡単です。縦方向の値の場合、経度1度でカバーされる距離が111 km(赤道)と0 km(極)の間で変化するため、それほど簡単ではありません。
別の答えに追加すると、緯度の1分の差は、1海里に相当します。これが海里の定義方法です。したがって、法定マイルに変換すると、1海里= 1.1508スタチューマイル、つまり6076.1フィートまたは1852メートルになります。
経度に行くと、前の回答で述べたように、緯度が高くなるにつれて地球の周りの経度の円のサイズは小さくなります。正しい要因は
1 minute of longitude = (1852 meters)*cos(theta),
ここで、シータは緯度です。
もちろん、地球は完全な球体ではありませんが、上記の単純な計算では1%以上ずれることはありません。
ピクセルあたりのメーターを取得する私の方法:
MKMapView *mapView = ...;
CLLocationCoordinate2D coordinate = ...;
MKMapRect mapRect = mapView.visibleMapRect;
CLLocationDistance metersPerMapPoint = MKMetersPerMapPointAtLatitude(coordinate.latitude);
CGFloat metersPerPixel = metersPerMapPoint * mapRect.size.width / mapView.bounds.size.width;