航向模式 旋转地图

Heading mode Rotating Map

我正在为 Android 使用 SKMaps v3.0 SDK,我尝试将用户航向模式更改为 Rotating_Map,以便用户能够根据航向位置旋转地图。

这是我的代码:

    private void followTheUserWithHeading(int transitionTime){
    mapView.getMapSettings().setCurrentPositionShown(true);
    mapView.getMapSettings().setFollowPositions(true);
    mapView.getMapSettings().setHeadingMode(SKMapSettings.SKHeadingMode.ROTATING_MAP);
    mapView.animateToBearing(1.0f,true,transitionTime);
    mapView.centerOnCurrentPosition(17,true,500);
}

在 onRouteCalculationCompleted 方法中调用 followTheUserWithHeading()。

遗憾的是,地图不随移动 phone 方向旋转。

N.B。 : 用户锥是可见的,使用 SKHeadingMode.ROUTE 时不是这样。所以看来我的代码并不完全是废话......我也试过ROTATING_HEADING但不是更好。

非常感谢:)

此功能仅在行人导航中可用。

此功能仅在使用步行导航模式时有效(使用navigationSettings.setNavigationMode(SKNavigationSettings.SKNavigationMode.PEDESTRIAN)之类的调用设置);) 为了启用该功能,您需要确保调用 mapView.getMapSettings().setHeadingMode(SKMapSettings.SKHeadingMode.ROTATING_MAP); 导航开始后 (navigationManager.startNavigation(navigationSettings);) 我在下面附上了一段显示工作功能的视频: https://www.dropbox.com/s/onnsbeavldxvdpu/20161221_PedestrianNavigation_RotatingMap.mp4?dl=0

好的,我终于找到了解决问题的方法...

这不是行人模式的问题。为了使 ROTATIN_MAP 正常工作,您必须实施所有传感器事件。

请参阅 Android 演示项目了解更多详细信息,但这里是查看代码片段

 private void setHeading(boolean enabled) {
    if (enabled) {
        headingOn = true;
        mapView.getMapSettings().setHeadingMode(SKHeadingMode.ROTATING_MAP);
        startOrientationSensor();
    } else {
        headingOn = false;
        mapView.getMapSettings().setHeadingMode(SKMapSettings.SKHeadingMode.NONE);
        stopOrientationSensor();
    }
}

/**
 * Activates the orientation sensor
 */
private void startOrientationSensor() {
    orientationValues = new float[3];
    SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    Sensor orientationSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
    sensorManager.registerListener(this, orientationSensor, SensorManager.SENSOR_DELAY_UI);
}

/**
 * Deactivates the orientation sensor
 */
private void stopOrientationSensor() {
    orientationValues = null;
    SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    sensorManager.unregisterListener(this);
}