HeegeePark / TableView

0 stars 0 forks source link

MapView: 거리 차에 따른 맞춤 region 설정 #11

Closed HeegeePark closed 9 months ago

HeegeePark commented 9 months ago

🔨 Issue

거리 차에 따른 맞춤 region 설정

// annotation들의 center coordinate
    var centerCoordinate: CLLocationCoordinate2D {
        let latitudeCenter = mapAnnotations.map { $0.latitude }.reduce(0, +) / Double(mapAnnotationsCount)
        let longitudeCenter = mapAnnotations.map { $0.longitude }.reduce(0, +) / Double(mapAnnotationsCount)

        return CLLocationCoordinate2D(latitude: latitudeCenter, longitude: longitudeCenter)
    }

    // center coordinate로부터 가장 큰 span
    // 값이 커질수록 지도 축소
    var maxDistanceSpan: MKCoordinateSpan {
        let latitudeDiffMax = mapAnnotations.map {
            abs(centerCoordinate.latitude - $0.latitude)
        }.max()!

        let longitudeDiffMax = mapAnnotations.map {
            abs(centerCoordinate.longitude - $0.longitude)
        }.max()!

        return MKCoordinateSpan(latitudeDelta: latitudeDiffMax, longitudeDelta: longitudeDiffMax)
    }

    // annotation들의 center region
    var centerRegion: MKCoordinateRegion {
        print(maxDistanceSpan)
        // TODO: 거리 차에 따른 맞춤 span으로 설정하기.
        return MKCoordinateRegion(center: centerCoordinate, span: maxDistanceSpan)
    }

Originally posted by @HeegeePark in https://github.com/HeegeePark/TableView/issues/10#issuecomment-1892911321

HeegeePark commented 9 months ago

해결

내가 구한 값은 "center에서 가장 먼 annotation까지의 경도, 위도 차"이므로 지도 상에서 보여야 할 반경의 반지름 값 정도 밖에 안된다. 충족 안되니 x2하고 여유있게 보이는 조금의 값을 더해주면 됨!

return MKCoordinateSpan(latitudeDelta: latitudeDiffMax * 2 + 0.02, longitudeDelta: longitudeDiffMax * 2 + 0.02)