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);
}
}