2009-11-07 4 views
3

저는이 방법을 자바 스크립트로 구현했으며 대략 2.5 % 정도를 설명하고 있습니다. 왜 그런지 이해하고 싶습니다.지구 중심 좌표계를 사용하여 위도, 경도 및 높이로부터 거리를 계산합니다.

제 입력 데이터는 WGS84 타원체 위의 위도, 경도 및 높이로 표시된 점의 배열입니다. 이 포인트는 마라톤 경주 중 손목에 장착 된 GPS 장치에서 수집 한 데이터에서 가져온 것입니다.

내 알고리즘은 각 점을 데카르트 좌표로 변환 한 다음 유클리드 거리 (피타고라스)를 계산하는 것이 었습니다. 직교 좌표계는 지구 중심 지구 고정이라고도합니다. 즉 지구와 함께 회전하는 X, Y, Z 좌표 시스템입니다.

내 테스트 데이터는 마라톤의 데이터이므로 거리는 42.26km에 가깝습니다. 그러나, 거리는 약 43.4km에 이른다. 저는 다양한 접근법을 시도했지만 결과는 1 미터 이상 변하지 않았습니다. 예 : 높이 데이터를 NASA SRTM 임무의 데이터로 바꿨습니다. 높이를 0으로 설정했습니다.

Google을 사용하여 위도, 경도, 높이가 변환 된 두 점을 발견했습니다. 알고리즘이 일치합니다.

설명 할 수있는 것은 무엇입니까? Javascript의 이중 표현을 너무 많이 기대합니까? (X, Y, Z 숫자는 매우 크지 만 두 점 사이의 차이는 매우 작습니다.)

대신 Vincenty의 알고리즘 (또는 이와 유사한 방법)을 사용하여 WGS84 타원체의 측지선을 계산 한 다음 두 높이를 사용하여 유클리드 거리를 계산하는 방법으로 이동하는 것이 더 정확하지 않을 수 있습니다.

미리 도움 주셔서 감사합니다.

+0

사용중인 샘플 입력 배열을 제공 할 수 있습니까? –

+0

@Sarge, Darin이 말했듯이 우리는 실제로 데이터를 볼 필요가 있습니다. 마라톤이 정확히 42.26km가 아니었을지도 모릅니다. 또는 주자가 우회했다 ;-) –

+0

여기에 파일을 게시하는 방법을 모르겠다는 점이 많습니다. 처음 2 점 : SRID = 4326, 스트링 (-123.371889330447 48.4189514815807 0.2 -123.371935682371 48.4187386650592 -0.6) 지심 유클리드 : 14.067619675265561 회전 타원체 길이 (WGS 84) 23.9255789000969 처음 5 점 : SRID = 4326, 스트링 (-123.371889330447 48.4189514815807 0.2 -123.371935682371 48.4187386650592 -0.6, 48.4185731224716 -123.372053951025 3 -123.372148666531 48.4183834400028 1.4 -123.372255116701 48.4182131197304 3) 지심 유클리드 : 62.76225910919548 회전 타원체 길이 (WGS 84) 87.4846191030089 – Sarge

답변

0

자바 스크립트는 계산하기에 충분히 정확하므로 문제가 발생하지 않는다고 생각합니다. 확실히 2.5 % 정도의 오류는 아닙니다.

나는 결코 들어 본 적이없는 단어를 던져 버리므로, 나는 당신이 최소한 나는 측지 거리 계산에 대해 잘 알고 있다고 생각할 것입니다. 나는 이것을 오래 전부터 사용 해왔다.이 작업을 수행하는 방법은 쌍곡선 사인과 코사인을 계산하여 "이상한"구형 형상을 수행해야했다. Euclidian 평면 거리를 "할"경우 지구의 곡률이 중요 해지면 거리가 사라집니다.

그래서 ... 저속한 죄를 짓고 있습니까? 귀하의 프로그램은 지수 및 로그와 물건을하고 있습니까? 그렇지 않은 경우 잘못된 수식을 적용 할 수 있습니다.

저기 ... 그 주제에 대해 내가 아는 전부입니다. 행운을 빕니다!

+1

@Carl : 실제로 sin, cos, pow 및 sqrt 만 사용합니다. 지구 중심 변환은 다음과 같습니다. http://www.satsleuth.com/GPS_ECEF_Datum_transformation.htm – Sarge

+0

웜 - 크롤링이 아닌 점 사이의 두더지 - 벌로우 거리를 계산할 수 있습니까? 거리? 내 수식 책을 파헤 치고 그 책이 당신이 인용 한 책과 어떻게 비교되는지보십시오. –

+0

좋아, 나는 내 깊이가 없어. 나는 포기한다. 행운을 빕니다! –

1

저는 문제의 주요 원인으로 보이는 것을 해결했습니다. 나는 위도와 경도를 변형 함수에서 틀린 길을 돌았습니다.

젊은 플레이어를위한 트랩 : 포인트 데이터는 경도가 아닌 경도를 먼저 제공합니다.

이제 내 알고리즘에서 42,476.75, 회전 타원에서 42,476.69가되었습니다. 내 목적에 충분히 가깝다.

감사합니다.

+0

합리적인 소리 : –

+0

당신이 솔루션의 관련 코드를 게시 할 수 있다면 다른 사람들에게 도움이 될 것입니다 :) – philfreo

+0

이것은지도 제작에서 나온 것이라고 생각합니다 -지도 투영은 보통 x, y와 같은 easting/northing으로 정의됩니다 우리는 초등 학교에서 배운다. 따라서 long/lat. – mtrw

0

이와 같은 계산에는 Google지도 API를 사용할 수 있습니다. 나는 이것을 한 번했다.

+0

확인하지는 않았지만 Google Maps API는 표고를 고려하지 않습니다. Google지도는 2D입니다. – Sarge

관련 문제