2012-06-07 3 views
0

MyLocationOverlay 나침반이 특정 위치를 가리 키려고합니다. 현재 사용자 위치에서 지정된 위치로 방향을 보여주고 싶습니다. 지금까지 방향을 계산하여 MyLocationOverlay에 전달했습니다. 그러나 나침반 화살표는 다른 위치를 혼돈으로 가리키기 시작합니다. 때로는 올바른 방향을 가리키지 만 대개는 완전히 난센스를 보여줍니다.

나침반을 제대로 작동시키는 방법이 있습니까? 내 활동
MyLocationOverlay 나침반이 특정 위치를 가리키게합니다.

@Override 
    public void onSensorChanged(SensorEvent event) { 
     if(location != null && carOverlay.size() > 0 
       && !map.getUserOverlay().isPointingToNorth()) { 

      float azimuth = event.values[0]; 
      azimuth = azimuth * 180/(float) Math.PI; 
      GeomagneticField geoField = new GeomagneticField(
        Double.valueOf(location.getLatitude()).floatValue(), 
        Double.valueOf(location.getLongitude()).floatValue(), 
        Double.valueOf(location.getAltitude()).floatValue(), 
        System.currentTimeMillis()); 
      azimuth += geoField.getDeclination(); 

      GeoPoint point = carOverlay.getItem(0).getPoint(); 
      Location target = new Location(provider); 
      float lat = (float) (point.getLatitudeE6()/1E6f); 
      float lon = (float) (point.getLongitudeE6()/1E6f); 
      target.setLatitude(lat); 
      target.setLongitude(lon); 

      float bearing = location.bearingTo(target); 
      float direction = azimuth - bearing; 

      map.getUserOverlay().putCompassDirection(direction); 
     } 
    } 

방향을 계산하는 방법을

이이 내 사용자 정의 오버레이

@Override 
    protected void drawCompass(Canvas canvas, float bearing) { 
     if(pointToNorth) { 
      super.drawCompass(canvas, bearing); 
     } 
     else { 
      super.drawCompass(canvas, compassDirection); 
     } 

    } 
+0

"때로는 올바른 방향을 가리키지 만 보통 말도 안되는 소리를냅니다." 깨진 시계조차도 하루 두 번 맞습니다. –

답변

0

왜 당신이 당신의 "베어링/방위각"자신을 계산합니까에서 오버라이드 (override) 방법이다? MyLocationOverlay 메서드는 getOrientation() 메서드를 사용하여 방위각을 제공합니다. 나는 확실히 onSensorChanged을 그대로두고, MyLocationOverlay이 이것을 계산하도록 내버려 둘 것입니다. 일반적으로 컴퍼스를 그리려면 올바른 번호를 입력해야합니다. enableCompass()

+0

나침반이지도의 특정 오버레이 항목을 가리 키기 때문에 방향을 직접 계산합니다. 기본적으로 사용자는 나침반이 북쪽을 가리 키거나지도의 위치를 ​​가리 키도록 버튼을 전환 할 수 있습니다. – droid8421

관련 문제