12

我正在尝试实现一个使用方向传感器以指向特定位置的箭头。Google Places 在 ListView 中为它找到的每个地方实现了这个箭头。

我已经设法得到方位角,但是给定一个位置,我不知道如何继续计算我需要的角度。此外,我需要从真北和磁北进行转换。有人有这种实现的例子吗?

提前致谢。

4

1 回答 1

24

我解决了。

float azimuth = // get azimuth from the orientation sensor (it's quite simple)
Location currentLoc = // get location from GPS or network
// convert radians to degrees
azimuth = Math.toDegrees(azimuth);
GeomagneticField geoField = new GeomagneticField(
             (float) currentLoc.getLatitude(),
             (float) currentLoc.getLongitude(),
             (float) currentLoc.getAltitude(),
             System.currentTimeMillis());
azimuth += geoField.getDeclination(); // converts magnetic north to true north
float bearing = currentLoc.bearingTo(target); // (it's already in degrees)
float direction = azimuth - bearing;

如果要绘制箭头或其他东西来指向方向,请使用 canvas.rotate(-direction)。我们传递了一个否定参数,因为画布旋转是逆时针的。

于 2011-04-01T20:10:37.990 回答