LoginSignup
1

More than 3 years have passed since last update.

Google Maps APIのズームレベルから画面を覆う程度の半径を算出

Posted at

地図アプリ作成中にある程度適切な範囲のデータを取得したいと思ったので、
Google Maps APIのズームレベルまとめ - Qiita
を参考に画面を覆うくらいの円の半径を算出するコードをSwift / Kotlin / Javascriptで。

具体的には以下のような引数と戻り値。

# ズームレベル => メートル
 8 => 150000
 9 =>  75000
10 =>  37500
11 =>  18750
12 =>   9375
13 =>   4687
14 =>   2343
15 =>   1171

この後これをカメラ位置と一緒にPostGISのST_DWithinに突っ込んで周辺データを取り出している。

地球レベルまでズームアウトできてしまうので、8以下は150km固定にした。
環境によって適宜調整してください。

Swift

private func zoomToRadius(_ zoom: Float) -> Double {
    var radius = Double(150000.0)
    if zoom > 8 { radius /= Double(pow(2, zoom - 8)) }
    return radius
}

Kotlin

private fun zoomToRadius(zoom: Float): Double {
    var radius = 150000.0
    if (zoom > 8) { radius /= 2.0.pow(zoom.toDouble() - 8) }
    return radius
}

Javascript

var zoomToRadius = function(zoom) {
  let radius = 150000
  if (zoom > 8) { radius = radius / Math.pow(2, zoom - 8) }
  return radius
}

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