위도 / 경도 및 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))
'IT박스' 카테고리의 다른 글
leiningen-지역 항아리에 의존성을 추가하는 방법? (0) | 2020.07.27 |
---|---|
Oracle의 CREATE OR REPLACE VIEW에 해당하는 SQL Server (0) | 2020.07.27 |
VS '프로젝트에서 제외'를 실행 취소 하시겠습니까? (0) | 2020.07.27 |
SVN 충돌을 나열하는 명령이 있습니까? (0) | 2020.07.27 |
관찰 가능 및 흐름 가능 rxJava2 (0) | 2020.07.27 |