km를 lat 또는 lon float에 추가하여 검색을위한 경계 상자를 계산할 수있는 값으로 변환 할 수있는 간단한 계산이 있습니까? 완전히 정확할 필요는 없습니다.
예를 들어 영국 런던의 위도 / 경도 (51.5001524, -0.1262362)가 주어졌고 그 지점에서 동 / 서 25km의 위도를 계산하고 그 중 남 / 북 25km를 계산하고 싶었습니다. 포인트, 위의 값에 더하기 위해 25km를 소수점으로 변환하려면 어떻게해야합니까?
일반적인 경험 법칙을 찾고 있습니다. 예 : 1km == +/- 0.XXX
편집하다:
“lat lon”에 대한 원래 검색이이 결과를 반환하지 않았습니다.
주어진 위도 / 경도 위치에 대한 경계 상자를 계산하는 방법은 무엇입니까?
받아 들여진 대답은 내 요구 사항에 적합합니다.
답변
대략적인 변환은 다음과 같습니다.
- 위도 : 1도 = 110.574km
- 경도 : 1 deg = 111.320 * cos (latitude) 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))
답변
적절하게 공식화 된 지리 공간 쿼리를 사용하지 않는 이유는 무엇입니까 ???
다음은 STContains 지리 공간 함수의 SQL 서버 참조 페이지입니다.
또는 상자 및 라디안 변환을 사용하지 않으려면 항상 거리 함수를 사용하여 필요한 포인트를 찾으십시오.
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
거의 모든 데이터베이스에 유사한 기능이 있어야합니다.
지리 공간 색인을 올바르게 구현했다면 검색이 사용중인 접근 방식보다 훨씬 빠릅니다.
답변
