2010-07-08 3 views
2

일반 (또는 장치 독립) 물리적 위치의 구조는 무엇입니까? 내 생각 엔 두 개의 긴 필드가 있거나 비슷한 구조체 일 수 있습니다.(geo) 위치의 일반적인 데이터 구조/형식은 무엇이며 어떻게 비교합니까?

또한 하나의 대상 위치와 두 개의 후보 위치가 있으면 대상에 가장 가까운 후보를 결정하는 간단한 알고리즘이 있습니까? 이 모든 것을 처리하는 라이브러리 나 서비스를 찾고있는 것은 아닙니다. Java에서 옵션이 될 수는 있지만, 실제로는 아주 간단한 저수준 개념을 사용하여 직접 조작 할 수 있습니다.

감사합니다.

편집 f1sh에서 언급 한 계산의 복잡함을 고려하면 haversine 계산을 처리하는 멋진 작은 Java 라이브러리가 있습니까?

답변

4

클래스에서 위도와 경도를 저장하면 안된다. 이미 Andreas_D가 언급 했으므로 (이중 필드 2 개).

까다로운 부분은이 행성의 표면에있는 2 개의 점 사이의 거리를 계산하는 것이 2 개의 2D 점 사이의 공통 거리 공식만큼 간단하지 않다는 것입니다. 다음과 같은 사실이 고려되어야한다 : 위도가 + 90 ° -90 ° (남극) 범위 동안

  • , 경도는 정기 간행물이다. 즉, 점 (0 °, 179 °)은 점 (0 °, -180 °)에 단지 1 °의 거리가 있음을 의미합니다.
  • 지구는 구입니다. 결과적으로 위도/경도에서 미터법으로의 변환이 쉽지 않습니다. 적도 (경도 0 °)의 경도 1 °는 약 111km이며, 북극의 경도 1 °는 0 (km/인치/피트/건)입니다.
  • 기타 수학.이것은 분명히 가장 정확한 공식은
0

예,

public Geo { 
    private double lat; 
    private double lon; 
} 

같은 클래스는 지리적 위치를 저장하기에 충분하다. setter 메서드를 추가하여 lat, lon이 항상 유효한 범위에 있는지 확인해야합니다. 그렇지 않으면 Geo 객체의 상태가 유효하지 않을 수 있습니다.

  1. 위도
  2. 경도
  3. 고도
  4. 수평 정확도
  5. 수직 정확도

(약 말할 수 없습니다 :

+0

확인 덕분에, 당신이 특정 범위는 무엇을 알 수 있습니까? – MalcomTucker

+0

@MalcomTucker - f1sh는 이미 답변에 범위를 포함 시켰습니다. –

+0

그는 내가 해설했지만 감사 할 때 게시하지 않았다! :) – MalcomTucker

2

GPS 장치는 일반적으로 위치와 관련하여 다음과 같은 데이터를 제공하고 있습니다 속도, 목적지, 인공위성 등 c)

질문의 두 번째 부분 : haversine 수식을 사용하여 모든 후보자와 위치 사이의 거리를 계산 한 다음이 거리만큼 정렬 할 수 있습니다. 좀 더 일반적인/과학적 접근법에 대해 확신하지 못합니다.

편집 : 호버린 공식 here을 살펴보십시오. 코드 예제도 있습니다. 나는 이것을 위해 도서관이 필요하다고 생각하지 않는다.

0

, 짧은 diatances을 통해 부정확 인 하버 사인 :

//L = latitude, G = longtitude 
double delta = G1 - G2; 
double p1 = cos(L2) * sin(delta); 
double p2 = cos(L1) * sin(L2) - sin(L1) * cos(L2) * cos(delta); 
double p3 = sin(L1) * sin(L2) + cos(L1) * cos(L2) * cos(delta); 
distance = 60 * Math.atan2(Math.sqrt(p1*p1 + p2*p2), p3); 

Reference

관련 문제