Skobbler:centerMapOnCurrentPosition()让我在Aftrica中心,即使蓝点是正确的

时间:2015-03-18 19:09:26

标签: android skmaps

我正在使用skobbler sdk来制作地图。 我使用此代码将地图视图置于当前位置的中心,但即使蓝点位于我在洛杉矶的正确当前位置(我通过手动去那里验证),地图也以gps(0,0)为中心。

public void onCurrentPositionUpdate(SKPosition currentPosition) {
        this.currentPosition = currentPosition;
        mapView.reportNewGPSPosition(this.currentPosition);

        if(firstPositionUpdate){
            firstPositionUpdate = false;

            mapView.centerMapOnCurrentPosition();

        }
}

并且我的代码是用于初始化地图:

private void initializeMapView() {
    currentPositionProvider = new SKCurrentPositionProvider(getActivity());
    currentPositionProvider.setCurrentPositionListener(this);
    if (DemoUtils.hasGpsModule(getActivity()) && ((LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE)).isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
        currentPositionProvider.requestLocationUpdates(true, true, true);
    }

    SKMapViewHolder mapViewGroup = (SKMapViewHolder) getView().findViewById(R.id.map_surface_holder);
    mapView = mapViewGroup.getMapSurfaceView();
    mapView.setMapSurfaceListener(this);
    mapView.getMapSettings().setFollowerMode(SKMapSettings.SKMapFollowerMode.NONE);
    mapView.getMapSettings().setMapRotationEnabled(true);
    mapView.getMapSettings().setMapZoomingEnabled(true);
    mapView.getMapSettings().setMapPanningEnabled(true);
    mapView.getMapSettings().setZoomWithAnchorEnabled(true);
    mapView.getMapSettings().setInertiaRotatingEnabled(true);
    mapView.getMapSettings().setInertiaZoomingEnabled(true);
    mapView.getMapSettings().setInertiaPanningEnabled(true);
    SKVersioningManager.getInstance().setMapUpdateListener(this);

    mapView.centerMapOnPosition(new SKCoordinate( -118.123,34.123));
    //launchRouteCalculation();
}

1 个答案:

答案 0 :(得分:2)

似乎是reportNewGPSPosition(this.currentPosition);不能立即工作。

我注意到如果我只是将调用延迟到centerMapOnCurrentPosition(),则地图会正确居中。有两种解决方法:

手动设置位置:

mapView.centerMapOnPosition(new SKCoordinate( currentPosition.getLongitude(), currentPosition.getLatitude()));

- 或者创建一个延迟的runnable来调用以便在将来执行居中:

android.os.Handler handler = new android.os.Handler();
handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                mapView.centerMapOnCurrentPosition();
                mapView.setZoom(10);
            }
        },100);

注意:这个问题只会变得明显,因为我在第一次更新位置时只放置了地图的if语句。另一项工作是在第二次更新位置时使用计数器和中心地图。

如果用上述if语句实现这一点,不要忘记考虑准确性;当位置不准确时,居中不好,而不是以未来的位置更新为准。