地図アプリ作成中にある程度適切な範囲のデータを取得したいと思ったので、
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
}