2010-06-11 4 views
7

m에 경도 위도를 변환과 같은 X/Y 값 : 나는 "두 geoPoints의 거리"의 일부 구현을 보았다하지만 그들은 모두 그냥 공기를 계산내가 GPS 위치를 매핑하는 기능을 필요

getXYpos(GeoPoint relativeNullPoint, GeoPoint p){ 
    deltaLatitude=p.latitude-relativeNullPoint.latitude; 
    deltaLongitude=p.longitude-relativeNullPoint.longitude; 
    ... 
    resultX=latitude (or west to east) distance in meters from p to relativeNullPoint 
    resultY=longitude (or south to north) distance in meters from p to relativeNullPoint 
} 

- 거리. 나는 deltaLongitude가 미터로 직접 변환 될 수 있다고 생각하지만 deltaLatitude는 경도에 달려있다. 아무도이 문제를 해결할 수있는 방법을 알고 계십니까?

답변

13

, 나는 당신이 당신의 latitudelongitude 반전 생각. 경도는 X, 위도는 Y로 측정합니다.

남북으로 쉽게 갈 수 있습니다. 우리는 360 도가 극을 통해 지구 주위의 완전한 원형임을 알고 있으며 that distance is 40008000 meters입니다. 지구가 완벽하게 구형이 아니기 때문에 오류를 설명 할 필요가없는 한 수식은 deltaLatitude * 40008000/360입니다.

의심스러운 부분은 경도를 X로 변환하는 것입니다. 위도에 따라 다르므로 사용하려는 위도를 결정해야합니다. 출발지의 위도, 목적지의 위도 또는 중간의 임의의 지점을 선택할 수 있습니다. 적도에서 원주 (위도 0)는 40075160 미터입니다. 주어진 위도에서 원의 원주는 코사인에 비례하므로 수식은 deltaLongitude * 40075160 * cos(latitude)/360이됩니다.

편집 : 귀하의 의견은 경도 공식에 문제가 있음을 나타냅니다. cos에 대한 호출에서 라디안 대신도를 사용했을 수 있습니다. 이는 신참적인 실수입니다. 모호성을 없애기 위해 여기 파이썬에서 작동하는 코드가 있습니다.

def asRadians(degrees): 
    return degrees * pi/180 

def getXYpos(relativeNullPoint, p): 
    """ Calculates X and Y distances in meters. 
    """ 
    deltaLatitude = p.latitude - relativeNullPoint.latitude 
    deltaLongitude = p.longitude - relativeNullPoint.longitude 
    latitudeCircumference = 40075160 * cos(asRadians(relativeNullPoint.latitude)) 
    resultX = deltaLongitude * latitudeCircumference/360 
    resultY = deltaLatitude * 40008000/360 
    return resultX, resultY 

은 내가 X 계산을위한 relativeNullPoint 위도를 사용하기로 결정했습니다. 동일한 경도를 가진 여러 점을 변환하면 동일한 X 값을 갖게된다는 이점이 있습니다. 남북 선은 수직입니다.

다시 편집 : 나는 이것이 매우 간단한 수식이며 그 한계를 알아야한다고 지적 했어야합니다. 분명히 지구는 평면이 아니므로 XY 좌표로 매핑하려는 시도는 약간의 타협을 수반 할 것입니다. 위에서 구한 수식은 변환하려는 영역이 평면적 인 것으로 간주 할 수있을만큼 작고 남북 회선의 미세한 곡률 및 비평 행성을 무시할 수있을 때 가장 효과적입니다. 투영법을지도하는 전체 과학이 있습니다. 몇 가지 가능성을보고 싶다면 Wikipedia을 시작하는 것이 좋습니다. 이 특정 투영은 the Equirectangular projection으로 알려져 있으며 일부 확장 기능이 추가되었습니다.

+0

괜찮아요, 위도 계산이 매우 정확합니다 :)하지만 위도 - 미터 값은 항상 위도가 im 테스트에 큰 1.3 요소입니다. 지구 위도가 현재의 위도에 상대적으로 계산되어야하는지, 아마 다른 위도에 따라 다를 것이기 때문에이 요소로 나누는 것이 좋은 아이디어가 아닌 것 같습니까? –

+0

@ 스폰서, 업데이트를 확인하십시오. –

+0

정말 고마워요! 위대한 작품 :) –

1

PHP, JavaJavascript 할이, 예를 들어, 대한 jstott.me.uk에 도서관이있다 Harvesine 기능의 자바 구현을 발견했습니다

UPDATE 시작하려면

var lld1 = new LatLng(40.718119, -73.995667); // New York 
document.write("New York Lat/Long: " + lld1.toString() + "<br />"); 
var lld2 = new LatLng(51.499981, -0.125313); // London 
document.write("London Lat/Long: " + lld2.toString() + "<br />"); 
var d = lld1.distance(lld2); 
document.write("Surface Distance between New York and London: " + d + "km"); 
관련 문제