MapBox导航

时间:2017-08-12 06:10:29

标签: android mapbox

目前我一直在为MapBox sdk创建基本导航。我已成功查看地图但无法显示导航功能,因为我很难找到任何教程或易于理解的MapBox文档指南,任何帮助将不胜感激,并提前感谢。在这里,我包括我的活动。

活性

public class MapNavigationActivity extends AppCompatActivity implements OnMapReadyCallback,
        MapboxMap.OnMapClickListener, ProgressChangeListener, NavigationEventListener, MilestoneEventListener, OffRouteListener {

    private static final int BEGIN_ROUTE_MILESTONE = 1001;

    // Map variables
    @BindView(R.id.mapView)
    MapView mapView;

    @BindView(R.id.newLocationFab)
    FloatingActionButton newLocationFab;

    @BindView(R.id.startRouteButton)
    Button startRouteButton;

    private MapboxMap mapboxMap;

    // Navigation related variables
    private LocationEngine locationEngine;
    private MapboxNavigation navigation;
    private DirectionsRoute route;
    private Position destination;
    private Position waypoint;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Mapbox.getInstance(getApplicationContext(), getString(R.string.access_token));
        setContentView(R.layout.activity_map_navigation);
        ButterKnife.bind(this);

        mapView = (MapView) findViewById(R.id.mapView);
        mapView.onCreate(savedInstanceState);
        mapView.getMapAsync(this);

        navigation = new MapboxNavigation(this, getString(R.string.access_token));

        LocationEngine locationEngine = LostLocationEngine.getLocationEngine(this);
        navigation.setLocationEngine(locationEngine);

        // From Mapbox to The White House
        Position origin = Position.fromCoordinates(-77.03613, 38.90992);
        Position destination = Position.fromCoordinates(-77.0365, 38.8977);

        navigation.getRoute(origin, destination, 90f, new Callback<DirectionsResponse>() {
            @Override
            public void onResponse(
                    Call<DirectionsResponse> call, Response<DirectionsResponse> response) {

            }

            @Override
            public void onFailure(Call<DirectionsResponse> call, Throwable t) {

            }
        });

        navigation.addNavigationEventListener(new NavigationEventListener() {
            @Override
            public void onRunning(boolean running) {

            }
        });
    }

    @OnClick(R.id.startRouteButton)
    public void onStartRouteClick() {
        if (navigation != null && route != null) {

            // Hide the start button
            startRouteButton.setVisibility(View.INVISIBLE);

            // Attach all of our navigation listeners.
            navigation.addNavigationEventListener(this);
            navigation.addProgressChangeListener(this);
            navigation.addMilestoneEventListener(this);

            ((MockLocationEngine) locationEngine).setRoute(route);
            navigation.setLocationEngine(locationEngine);
            navigation.startNavigation(route);
            mapboxMap.setOnMapClickListener(null);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // Remove all navigation listeners being used
        navigation.removeNavigationEventListener(this);
        navigation.removeNavigationEventListener(this);
        navigation.removeProgressChangeListener(this);
        navigation.removeOffRouteListener(this);

        // End the navigation session
        navigation.endNavigation();
    }

    @Override
    protected void onStart() {
        super.onStart();
        mapView.onStart();
        navigation.onStart();
    }

    @Override
    public void onMapClick(@NonNull LatLng point) {

    }

    @Override
    public void onMapReady(MapboxMap mapboxMap) {

    }

    @Override
    public void onRunning(boolean running) {

    }

    @Override
    public void onMilestoneEvent(RouteProgress routeProgress, String instruction, int identifier) {

    }

    @Override
    public void onProgressChange(Location location, RouteProgress routeProgress) {

    }

    @Override
    public void userOffRoute(Location location) {

    }
}

2 个答案:

答案 0 :(得分:2)

这是有关为Android构建导航应用的官方教程。 https://www.mapbox.com/help/android-navigation-sdk/

它解释了这些项目:

  • 安装导航SDK
  • 初始化地图
  • 显示用户位置
  • 点击添加标记
  • 计算并绘制路线
  • 添加按钮以开始导航
  • 自定义样式

答案 1 :(得分:0)

经过对网络的深入研究,我终于能够使我的导航工作了。因此,我将与您分享启用导航应用程序的所有参考资料。

NavHud Mapbox