座標 (0, 0, 0) を指す OpenGL で描画された 3D 矢印があり、GPS の位置と方向に応じて特定の GPS 位置を指すようにします。
(携帯電話の向きで)方位角を計算し、(磁北ではなく)実際の北になるように調整してみました。
SensorManager.getOrientation(remappedRotationMatrix, orientation);
// convert radians to degrees
float azimuth = orientation[0];
azimuth = azimuth * 360 / (2 * (float) Math.PI);
GeomagneticField geoField = new GeomagneticField(
Double.valueOf(loc.getLatitude()).floatValue(),
Double.valueOf(loc.getLongitude()).floatValue(),
Double.valueOf(loc.getAltitude()).floatValue(),
System.currentTimeMillis());
// converts magnetic north into true north
azimuth -= geoField.getDeclination();
次に、自分の場所からポイントしたい場所までの方位を取得します。
target.setLatitude(42.806484);
target.setLongitude(-1.632482);
float bearing = loc.bearingTo(target); // (it's already in degrees)
if (bearing < 0) {
bearing = bearing + 360;
}
float degrees = bearing - azimuth;
if (degrees < 0) {
degrees = degrees + 360;
}
矢印を回転させる角度を計算します
gl.glRotatef(degrees, 0.0f, 1.0f, 0.0f);
arrow.draw(gl);
何とかする方法はありますか?GPS 位置を OpenGL 座標に変換し、それを指すために GLU.gluLookAt を使用する別の可能性はありますか?
ありがとう。