IT박스

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

itboxs 2020. 7. 27. 07:41
반응형

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


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

예를 들어, 영국 런던 (51.5001524, -0.1262362)에 위도 / 경도를 부여 받았는데, 그 시점에서 위도 25km가 동쪽 / 서쪽으로, 경도가 북쪽 / 남쪽으로 25km가되는 곳을 계산하고 싶을 때 포인트, 위의 값을 더하기 위해 25km을 10 진수로 변환하려면 어떻게해야합니까?

나는 일반적인 규칙, 즉 1km == +/- 0.XXX를 찾고 있습니다.

편집하다:

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

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

수락 된 답변이 내 요구 사항에 적합한 것 같습니다.


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

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

지구의 극 평화에 대해서는 완전히 맞지 않습니다. WGS84 참조 타원체 (GPS에 사용되는 모델)를 사용하여 더 복잡한 공식을 원할 수도 있습니다. 그러나 오류는 아마도 귀하의 목적에 무시할 수 있습니다.

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

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


Java, Javascript 또는 PHP를 사용하는 경우 매우 복잡하지만 여전히 빠른 삼각법을 사용하여 이러한 계산을 정확하게 수행하는 라이브러리가 있습니다.

http://www.jstott.me.uk/jcoord/


http://www.jstott.me.uk/jcoord/- 이 라이브러리 사용

            LatLng lld1 = new LatLng(40.718119, -73.995667);
            LatLng lld2 = new LatLng(51.499981, -0.125313);
            Double distance = lld1.distance(lld2);
            Log.d(TAG, "Distance in kilometers " + distance);

UTM 좌표에 대한 언급을 보지 못한 것이 흥미 롭습니다.

https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system .

적어도 같은 지역에 km을 추가하려면 간단해야합니다 (Python : https://pypi.org/project/utm/ )

utm.from_latlon 및 utm.to_latlon.


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))

참고 URL : https://stackoverflow.com/questions/1253499/simple-calculations-for-working-with-lat-lon-and-km-distance

반응형