相关疑难解决方法(0)

Android Maps v2用指南针旋转mapView

我正在开发一个需要用指南针旋转mapView的应用程序.我知道如何旋转相机,但我需要用指南针旋转mapView.中心点应该是当前位置.我找到了地图V1的代码,但我需要使用Maps V2

android google-maps google-maps-api-2 google-maps-android-api-2 android-maps-v2

9
推荐指数
1
解决办法
2万
查看次数

静止时用TYPE_ROTATION_VECTOR实现当前的基本方向法?

似乎有许多旧的例子表明在Android设备上获得当前的主要方向,但Google提供的官方解决方案似乎并未出现在他们的文档中.

最古老的参考Sensor.TYPE_ORIENTATION它被废弃了,更近的提及Sensor.TYPE_ACCELEROMETERSensor.TYPE_MAGNETIC_FIELD(我曾尝试,但收效甚微-准确迅速的变化取决于设备的方向).我一直在尝试使用这两个这样的实现.我甚至见过一些人TYPE.GRAVITY.

最近似乎表明 TYPE_ROTATION_VECTOR这显然是一个稠合的传感器(参考),但实例实施方案中似乎并不容易得到.

我需要使用这些位置/运动传感器,而不是GPS,因为在需要进行此测量时,用户不会移动.无论手机是平的还是垂直的(如果你正在拍照),也需要测量稳定

在我们以某种方式拉出度数测量之后,转换到基数方向似乎很容易.(/sf/answers/1774484211/)

以前的方案

  1. 如何在Android中获取方向(如北,西)
  2. /sf/answers/774821491/

java android android-sensors compass-geolocation sensor-fusion

5
推荐指数
1
解决办法
509
查看次数

当用户直立手持手机时,方位角读数变为相反

我已经根据我可以在网上找到的通常建议实施了指南针读数。我使用ROTATION_VECTOR传感器类型,并(azimuth, pitch, roll)使用标准 API 调用将其转换为三元组。这是我的代码:

fun Fragment.receiveAzimuthUpdates(
        azimuthChanged: (Float) -> Unit,
        accuracyChanged: (Int) -> Unit
) {
    val sensorManager = activity!!.getSystemService(Context.SENSOR_SERVICE)
            as SensorManager
    val sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR)!!
    sensorManager.registerListener(OrientationListener(azimuthChanged, accuracyChanged),
            sensor, 10_000)
}

private class OrientationListener(
        private val azimuthChanged: (Float) -> Unit,
        private val accuracyChanged: (Int) -> Unit
) : SensorEventListener {
    private val rotationMatrix = FloatArray(9)
    private val orientation = FloatArray(3)

    override fun onSensorChanged(event: SensorEvent) {
        if (event.sensor.type != Sensor.TYPE_ROTATION_VECTOR) return
        SensorManager.getRotationMatrixFromVector(rotationMatrix, event.values)
        SensorManager.getOrientation(rotationMatrix, orientation)
        azimuthChanged(orientation[0]) …
Run Code Online (Sandbox Code Playgroud)

android kotlin

2
推荐指数
1
解决办法
559
查看次数