LoginSignup
1
2

More than 5 years have passed since last update.

中心経緯度と距離からBoundingBox(矩形)を求める

Last updated at Posted at 2017-02-26

この投稿を参考に和訳しただけですが・・・
http://stackoverflow.com/a/15683034/1971596

MapKitに中心位置と距離(メートル)を指定してBoundingBox生成の元となるMKRegionを作れる便利関数があります。

MKCoordinateRegionMakeWithDistance(center, latitudinalMeters, longitudinalMeters) -> MKCoordinateRegion

CoreLocationだけでなくMapKitを使うところがミソですね。

MKRegionからBoundingBoxを以下のように作れます。

let region = MKCoordinateRegionMakeWithDistance(center, distance, distance)
let northLatitude = center.latitude  + (region.span.latitudeDelta  / 2.0)
let westLongitude = center.longitude - (region.span.longitudeDelta / 2.0)
let southLatitude = center.latitude  - (region.span.latitudeDelta  / 2.0)
let eastLongitude = center.longitude + (region.span.longitudeDelta / 2.0)

本当は最大値を超えた時の対応もしたほうが良いですが、日本限定サービスとかならしなくていいと思います。

あと注意すべきは、MKCoordinateRegionMakeWithDistanceで指定した距離は、矩形の1辺の長さとなります。つまり中心から辺まで垂直に交わる直線の交点までの距離は、指定した距離の半分となります。

zukei.png

もし、中心から辺までの1000mの距離を範囲としたい場合、MKCoordinateRegionMakeWithDistanceへは2倍の距離2000を指定するべきでしょう。

let region = MKCoordinateRegionMakeWithDistance(center, 2000, 2000)

ほとんどの場合、円形範囲よりBoundingBoxが良さげ

PCもスマホも画面は矩形であり、その表示範囲内の場所が取得できれば良い場合がほとんどだと思います。またSQLでDBから場所を取ってくるときも、矩形範囲指定で取れたほうが楽ちん。GeohashやQuadkeyを使う手もありますけどね。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2