2014-03-19 2 views
0

위치를 향해 당신을 가리키는 앱을 만들려고합니다. 당신은 버튼을 누르고 GPS 좌표를 저장하고, 거리와 당신이 직면 할 필요가있는 각도와 같은 것을 계산합니다. 그런 다음 화면상의 나침반 그래픽을 사용하여 "포인팅"하여 기억 된 위치로 되돌아갑니다.안드로이드, gps와 나침반을 사용하여 좌표 방향을 지정하십시오.

적어도, 그렇게해야합니다. 몇 시간 동안 코드를 어지럽히고 난 후, 지난 몇 년 동안 trig 연습이 부족하여 어딘가에 논리 오류가 있다는 결론에 도달했습니다.

나침반과 GPS 위치는 비교적 자주 업데이트됩니다. 이것은 나침반을 회전시키고 거리를 표시하는 사용자 인터페이스의 기본 업데이트 호출 코드입니다.

public void updateUI(){ 
    double deltaX = targetLongitude - currentLongitude; 
    double deltaY = targetLatitude - currentLatitude; 
    double distance = Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2)); 
    double rotation = Math.toDegrees(Math.atan2(deltaX,deltaY)); 
    distanceTextView.setText(Double.toString(distance)); 
    rotateCompass(rotation - degreesClockwiseFromNorth); 
} 

및 rotateCompass에 대한 코드 :

public void rotateCompass(double degrees){ 
    degrees -= currentRotation; //calculates necessary rotation across updates 
    currentRotation += degrees; 

    matrix.postRotate(
     (float) degrees, 
     compass.getDrawable().getBounds().width()/2, 
     compass.getDrawable().getBounds().height()/2); 

    compass.setImageMatrix(matrix); 
} 

내가 교체 할 때이

rotateCompass(rotation - degreesClockwiseFromNorth); 

rotateCompass(0 - degreesClockwiseFromNorth); 

으로 가리키는 때문에 내 회전 코드가 작동 거의 확실 해요 진짜 나침반과 나란히 북쪽으로 내가 직면하고있는 방향에 상관없이. 그러나 전자를 사용하면 일관된 지점을 가리키고 있지만 그 지점은 목표 지점 근처에없는 것 같습니다. 그래서 결론은 정확한 각도를 계산하거나 GPS가 너무 정확할 것으로 예상된다는 것입니다. 나는 뒷마당에서 할 수있는 것보다 더 먼거리를 테스트하지는 않았지만, GPS 정확도 문제가 있다면 나는 내 방향으로 잘못 가르키지 않고 나침반을 볼 수 있다고 생각합니다.

읽어 주셔서 감사합니다. 제안이나 수정 사항을 보내 주시면 감사하겠습니다.

답변

1

경도 2도 사이의 거리가 위도 2도와 같지 않으므로 수학이 모두 엉망입니다. 사실, 그것은 경도에 대한 일정한 길이조차도 아닙니다. 극점에 의해 단락되고 적도에서 가장 길다는 것입니다. 대신 Location.distanceTo 함수를 사용하십시오.

+0

당신은 진지해? 나는 그런 경우에 대해 생각하지도 않았다. 나는 이것에 들어가기 전에 조금 더 많은 조사를 했어야했다. 나는 그것을 시도 할 것이다. – user2816570

+0

Location 객체를 다시 보면 distanceBetween 함수가 베어링을 반환하는 것을 볼 수 있습니다. 그것은 모든 계산 문제를 해결해야합니다. –

+0

네 말이 맞아. 먼저 설명서를 읽지 않으려 고하는 그런 패배자 같아요. 하하, 다시 한번 감사드립니다. – user2816570

관련 문제