その場所の精度を考慮して妥当なズームレベルを与えながら、Googleマップをユーザーの場所に集中させようとしています。誰かがそれを計算する方法を説明できますか? 関係する変数はどれですか。これをどのように達成しますか?
質問する
2811 次
3 に答える
0
ありがとう@シマス!CLLocationの精度を考慮して理想的なzoomLevelを計算するために、GMSMapViewにこの拡張を作成するためにあなたのアルゴリズムを取り上げました。
各ピクセルは画面上の 1 点と正確に同じではないため、Retina ディスプレイを搭載したデバイスを考慮するために調整を行う必要がありました。
extension GMSMapView {
func getIdealZoomLevel(usingLocation location:CLLocation)->Float {
let retinaScale = Double(UIScreen.mainScreen().scale)
let equatorLength : Double = 40075004 // in meters
var metersPerPixel = equatorLength / 256
let accuracy = location.horizontalAccuracy
// I used height because I'm on landscape, but moving forward I'll have to get the Min of the width and height.
// I also took only 75% of the height to give it some margin
let screenWidth : Double = Double( self.frame.size.height) * 0.75
var display = metersPerPixel * (screenWidth / retinaScale)
var zoomLevel : Float = 0.0
while (display > accuracy) {
metersPerPixel /= 2
display = metersPerPixel * (screenWidth / retinaScale)
zoomLevel += 1
}
return zoomLevel
}
}
これは私が取り組んでいる Swift プロジェクト用で、現在、指定された CLLocation 内の半径を囲む適切な近接を表示できます。
お役に立てれば。
于 2017-04-23T04:00:47.327 に答える