我正在尝试将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)
为什么要自己计算“方位/方位角”? MyLocationOverlay持有Method getOrientation()来为您提供方位角。我肯定会保持onSensorChanged
不受影响,让MyLocationOverlay
为你计算。通常,为了正确绘制您的指南针,您只需拨打enableCompass()