我对如何实施"个人指南针"感到困惑,即指向特定方位而不是标准"北极"的指南针...不幸的是,我目前的尝试出错了(不指向给定方位).它还与加速器连接,能够根据用户转向的方式动态调整自身.
这是我目前的尝试(onSensorChanged()更新箭头的方法):
public void onSensorChanged( SensorEvent event ) {
// If we don't have a Location, we break out
if ( LocationObj == null ) return;
float azimuth = event.values[0];
float baseAzimuth = azimuth;
GeomagneticField geoField = new GeomagneticField( Double
.valueOf( LocationObj.getLatitude() ).floatValue(), Double
.valueOf( LocationObj.getLongitude() ).floatValue(),
Double.valueOf( LocationObj.getAltitude() ).floatValue(),
System.currentTimeMillis() );
azimuth += geoField.getDeclination(); // converts magnetic north into true north
//Correct the azimuth
azimuth = azimuth % 360;
//This is where we choose to point it …Run Code Online (Sandbox Code Playgroud) 有没有人知道在Java中将地球表面位置从lat,lon转换为UTM(比如WGS84)?我目前正在研究Geotools,但遗憾的是解决方案并不明显.
如果您打开Google地图应用,则屏幕右上角会显示一个按钮,您可以按此按钮将地图置于当前位置的中心位置.然后按钮的图标会发生变化.如果再次按相同按钮,地图将根据指南针标题自动旋转.换句话说,地图变得以自我为中心(与分配中心AKA北方总是向上)相反.
Google最近推出了适用于Android的地图API V2,我当然比旧版更喜欢它.默认情况下,android maps V2将包含"center on location"按钮.但是,多次按下它不会启用自动旋转; 它只是试图将地图再次置于您的位置.
有没有人知道如何使用地图API v2自动旋转地图就像谷歌地图应用程序一样?我是否必须自己实现此功能,或者它是否在API中,我只是没有看到它?我感谢所有的帮助.
我的要求是像Google maps apps罗盘模式一样(点击时可以看到演示current location button twice):
compass模式下,地图始终旋转一个角度,以便bluedot arrow始终指向顶部屏幕.但我不知道如何计算正确的bearing距离azimuth, pitch, roll值.
public void onSensorChanged(SensorEvent sensorEvent) {
switch (sensorEvent.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
System.arraycopy(sensorEvent.values, 0, mAccelerometers, 0, 3);
break;
case Sensor.TYPE_MAGNETIC_FIELD:
System.arraycopy(sensorEvent.values, 0, mMagnetometers, 0, 3);
break;
default:
break;
}
float[] rotationMatrix = new float[9];
boolean success =
SensorManager.getRotationMatrix(rotationMatrix, null, mAccelerometers, mMagnetometers);
if (success) {
SensorManager.getOrientation(rotationMatrix, mOrientation);
float azimuth = Math.toDegrees(mOrientation[0]);
float pitch = Math.toDegrees(mOrientation[1]);
float roll = Math.toDegrees(mOrientation[2]);
} …Run Code Online (Sandbox Code Playgroud) 我正在开发指南针应用程序,我希望指南针指向特定的纬度经度位置,而不是通常的北方.我发现了一些问题,与我的问题,但我不管理,使他们为我工作.这是我的代码:
public class MainActivity extends AppCompatActivity implements SensorEventListener {
private ImageView image;
private float currentDegree = 0f;
private SensorManager mSensorManager;
private TextView tvHeading;
private Location location = new Location("A");
private Location target = new Location("B");
private LocationManager locationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image = (ImageView) findViewById(R.id.imageViewCompass);
tvHeading = (TextView) findViewById(R.id.tvHeading);
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
location.setLatitude(54.903535);
location.setLongitude(23.979342);
target.setLatitude(54.904618);
target.setLongitude(23.978782);
}
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
SensorManager.SENSOR_DELAY_GAME);
}
@Override
protected void onPause() { …Run Code Online (Sandbox Code Playgroud) 我正在使用Google Maps Android API v2,我在地图上将我的设备位置显示为GoogleMap Marker.我有一个监听器(LocationServices.FusedLocationApi.requestLocationUpdates ...)附加到Map,以处理每个GPS位置的变化.每当我收到一个新位置时,我都会更新Marker(我的位置)以及地图上的Camera,几乎就像我开车时一样.
但是......我需要一些帮助才能使MAP 旋转和/或显示在我要移动的方向上.我的意思是,当我开车时,我需要旋转MAP,我可以在地图左侧看到我在现实生活中的左侧,所以右侧也是如此.由于MAP方向是静态的,Marker(Me)正在移动它,但大多数时候方向与我的汽车实时方向不匹配.
我应该怎么做地图才能实现这种视觉效果?
我已经尝试了很多,但不能为我的应用程序制作Qibla指南针.我无法理解我的所作所为.我需要能够完美运行的Qibla指南针.
我正在尝试编程我的应用程序,所以我的箭头ImageView将指向给定的android.Location.现在它没有指向正确的方向.由于某种原因它很漂亮.我认为这是因为我没有考虑到我正确面对的方向.
这是我目前正在做的事情:
float angle = GetAngle(myLocation);
RotateAnimation anim = new RotateAnimation(0.0f, angle, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
anim.setInterpolator(new LinearInterpolator());
anim.setRepeatCount(0);
anim.setDuration(2);
anim.setFillAfter(true);
arrow.startAnimation(anim);
Run Code Online (Sandbox Code Playgroud)
这是GetAngle()函数:
float GetAngle(Location myLocation)
{
float angle = (float) Math.toDegrees(Math.atan2(theirLocation.getLatitude() - myLocation.getLatitude(), theirLocation.getLongitude() - myLocation.getLongitude()));
if (angle < 0)
angle += 360;
return angle;
}
Run Code Online (Sandbox Code Playgroud)
有没有比我更好的方法呢?我不知道如何让ImageView面向我从一个位置给出的坐标.
android.hardware.GeomagneticField 类有一个 getDeclination 方法,我们可以用它来找到真北。我在 StackOverFlow 和其他站点上看到的所有示例都将此值添加到磁北以找到真正的北,如下所示:
True north = Magnetic North + Declination
但是这个问题中的一个帖子表明这可能是错误的: 使用方向传感器指向特定位置
不幸的是,没有人对该帖子发表评论或投票。
Android 文档说,正值“意味着磁场从真北向东旋转了那么多”。而这个页面有几个数字,显示了相同的:“积极赤纬-磁北在真北的东”。换句话说,赤纬定义如下:
Declination = Magnetic north - True North
重新排列以根据磁北找到真北:
True north = Magnetic north - Declination
那么,增加或减少偏角是否正确?如果添加它是正确的,为什么?
android ×8
google-maps ×3
geolocation ×2
java ×2
location ×2
autorotate ×1
geography ×1
geotools ×1
gps ×1
rotation ×1