위도 / 경도 및 km 거리 작업을위한 간단한 계산?


119

km를 lat 또는 lon float에 추가하여 검색을위한 경계 상자를 계산할 수있는 값으로 변환 할 수있는 간단한 계산이 있습니까? 완전히 정확할 필요는 없습니다.

예를 들어 영국 런던의 위도 / 경도 (51.5001524, -0.1262362)가 주어졌고 그 지점에서 동 / 서 25km의 위도를 계산하고 그 중 남 / 북 25km를 계산하고 싶었습니다. 포인트, 위의 값에 더하기 위해 25km를 소수점으로 변환하려면 어떻게해야합니까?

일반적인 경험 법칙을 찾고 있습니다. 예 : 1km == +/- 0.XXX

편집하다:

"lat lon"에 대한 원래 검색이이 결과를 반환하지 않았습니다.

주어진 위도 / 경도 위치에 대한 경계 상자를 계산하는 방법은 무엇입니까?

받아 들여진 대답은 내 요구 사항에 적합합니다.


답변:


221

대략적인 변환은 다음과 같습니다.

  • 위도 : 1도 = 110.574km
  • 경도 : 1 deg = 111.320 * cos (latitude) km

이것은 지구의 극좌표 평탄화를 완전히 수정하지 못합니다. WGS84 참조 타원체 (GPS에 사용되는 모델)를 사용하는 더 복잡한 공식을 원할 것입니다. 그러나 오류는 귀하의 목적에 따라 무시할 수 있습니다.

출처 : http://en.wikipedia.org/wiki/Latitude

주의 : latlong 좌표는 각도로 표현되는 반면 cos대부분의 (모든?) 언어 의 함수는 일반적으로 라디안을 허용하므로 라디안 변환 도 필요합니다.


두 번째 공식에서 cos (경도)를 의미합니까?
Odys 2014

1
어떻게 생각 해냈어? 누락 된 것이 있습니다. 경도 계산에 대해 자세히 설명해 주시겠습니까? Ty
Odys 2014

5
@Odys : 동일한 경도선 (북 / 남)에있는 두 점을 비교하는 경우, 두 점은 대원에 있으며 변환 계수는 지구의 극지 둘레를 360 도로 나눈 값입니다. 그러나 동서 측정의 경우는 다릅니다. (적도 제외) "대권"을 따라 측정하지 않기 때문에 주어진 위도에서의 "원주"가 더 작습니다. 그리고 보정 계수는 위도의 코사인으로 밝혀졌습니다.
Jim Lewis

17
내 설명 : cos(0°) = 1=> 따라서 적도에서 계산을 수행하는 데 적용되는 보정 계수가 없습니다. 경도가 가장 넓습니다. cos(90°) = 0=> 극에서 경도는 한 지점에서 만납니다. 계산할 거리가 없습니다.
Jenny O'Reilly

4
@Stijn : Math.cos ()를 호출하기 전에 각도를 라디안으로 변환해야합니다.
Jim Lewis




1

그의 훌륭한 답변에 대해 Jim Lewis 에게 감사 드리며 Swift의 내 기능 으로이 솔루션을 설명하고 싶습니다.

func getRandomLocation(forLocation location: CLLocation, withOffsetKM offset: Double) -> CLLocation {
        let latDistance = (Double(arc4random()) / Double(UInt32.max)) * offset * 2.0 - offset
        let longDistanceMax = sqrt(offset * offset - latDistance * latDistance)
        let longDistance = (Double(arc4random()) / Double(UInt32.max)) * longDistanceMax * 2.0 - longDistanceMax

        let lat: CLLocationDegrees = location.coordinate.latitude + latDistance / 110.574
        let lng: CLLocationDegrees = location.coordinate.longitude + longDistance / (111.320 * cos(lat / .pi / 180))
        return CLLocation(latitude: lat, longitude: lng)
    }

이 함수에서 거리를 변환하려면 다음 공식을 사용합니다.

latDistance / 110.574
longDistance / (111.320 * cos(lat / .pi / 180))

"lat * pi / 180"이어야한다고 생각합니다
magamig

1

적절하게 공식화 된 지리 공간 쿼리를 사용하지 않는 이유는 무엇입니까 ???

다음은 STContains 지리 공간 함수의 SQL 서버 참조 페이지입니다.

https://docs.microsoft.com/en-us/sql/t-sql/spatial-geography/stcontains-geography-data-type?view=sql-server-ver15

또는 상자 및 라디안 변환을 사용하지 않으려면 항상 거리 함수를 사용하여 필요한 포인트를 찾으십시오.

DECLARE @CurrentLocation geography; 
SET @CurrentLocation  = geography::Point(12.822222, 80.222222, 4326)

SELECT * , Round (GeoLocation.STDistance(@CurrentLocation ),0) AS Distance FROM [Landmark]
WHERE GeoLocation.STDistance(@CurrentLocation )<= 2000 -- 2 Km

거의 모든 데이터베이스에 유사한 기능이 있어야합니다.

지리 공간 색인을 올바르게 구현했다면 검색이 사용중인 접근 방식보다 훨씬 빠릅니다.


1
스루 읽어 보시기 바랍니다 편집 도움도움말 센터를 . Stack Overflow의 형식은 다른 사이트와 다릅니다.
Dharman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.