我正在尝试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);
}
}
你为什么要自己计算你的"方位/方位角"?MyLocationOverlay 按住方法 getOrientation() 以提供方位角。我肯定会原封不动onSensorChanged
,让MyLocationOverlay
为你计算一下。通常,要正确绘制指南针,您只需拨打enableCompass()