2017-04-08 8 views
0

대각선 길이가 30km 인 MKCoordinateRegion을 계산하려면 영역의 비율이지도 프레임과 동일해야합니다. 내 접근 방식은 다음과 같습니다대각선 길이가 고정 된 MKCoordinateRegion 계산

let alpha = atan(mapView.frame.width/mapView.frame.height).radiansToDegrees 
    let beta = 90 - alpha 

    let spanDiagonal = 30_000.0 
    let spanWidth = spanDiagonal * Double(cos(beta.degreesToRadians)) 
    let spanHeight = sqrt(spanDiagonal * spanDiagonal + spanWidth * spanWidth) 

    let region = MKCoordinateRegionMakeWithDistance(mapView.centerCoordinate, spanWidth, spanHeight) 
    let tlLat = region.center.latitude + (region.span.latitudeDelta/2.0) 
    let tlLong = region.center.longitude - (region.span.longitudeDelta/2.0) 
    let brLat = region.center.latitude - (region.span.latitudeDelta/2.0) 
    let brLong = region.center.longitude + (region.span.longitudeDelta/2.0) 

    let tl = CLLocationCoordinate2D(latitude: tlLat, longitude: tlLong) 
    let br = CLLocationCoordinate2D(latitude: brLat, longitude: brLong) 
    print(MKMetersBetweenMapPoints(MKMapPointForCoordinate(tl), MKMapPointForCoordinate(br))) 

I 프레임의 각도와 다음이 각도 삼각형과이 내가 올바른 범위의 높이와 너비를 생각했던 결과 30000의 기본으로 계산합니다.

내가 가진 문제는 그 지역의 대각선이 약 10km 더 큽니다. 나는 이것이 계량기가 어떤 각도로도 단위로 변환되는 원인이라고 생각합니다.

내 접근 방식에 문제가 있는지, 30 킬로미터 대각선 및 프레임과 같은 비율로 지역을 계산하는 더 좋은 방법을 알고 계십니까?

답변

0

유클리드 알고리즘을 구현 한 멋진 라이브러리를 사용하여 결국 좌표 주위의 경계 상자를 확장 할 수있었습니다. 정확히 내가 무엇을 찾고 있었는지!