MapBox导航sdk使用地图

时间:2017-09-21 09:44:45

标签: android dictionary navigation geojson mapbox-android

我有一个GeoJSON数据,它给了我所有的点(坐标)。 使用这些点,我可以使用以下代码在地图上绘制折线。

mapboxMap.addPolyline(new PolylineOptions()
                            .addAll(mapMatchedPoints)
                            .color(Color.GREEN)
                            .alpha(0.65f)
                            .width(4));

然后我想使用此

在地图上的所有点进行导航
 NavigationRoute.Builder navigationRoute = NavigationRoute.builder()
            .accessToken(Mapbox.getAccessToken());

    navigationRoute.origin(origin);
    navigationRoute.destination(destination);

此处需要原点和目的地点。聆听其回调方法可在以下代码中提供路径

navigationRoute.build().getRoute(new Callback<DirectionsResponse>() {
        @Override
        public void onResponse(Call<DirectionsResponse> call, Response<DirectionsResponse> response) {
            if (response.body() == null) {
                Log.e(TAG, "No routes found, make sure you set the right user and access token.");
                return;
            }

            // Print some info about the route
            route = response.body().getRoutes().get(0);
            Log.d(TAG, "Distance: " + route.getDistance());

            // Draw the route on the map
            drawRoute(route, origin, destination);
        }

        @Override
        public void onFailure(Call<DirectionsResponse> call, Throwable t) {
            Log.e(TAG, "Error: " + t.getMessage());
        }
    });

drawroute是用于绘制导航路线的方法

private void drawRoute(DirectionsRoute route, Position origin, Position destination) {
    // Convert LineString coordinates into LatLng[]
    LineString lineString = LineString.fromPolyline(route.getGeometry(), Constants.PRECISION_6);
    List<Position> coordinates = lineString.getCoordinates();
    LatLng[] points = new LatLng[coordinates.size()];
    for (int i = 0; i < coordinates.size(); i++) {
        points[i] = new LatLng(
                coordinates.get(i).getLatitude(),
                coordinates.get(i).getLongitude());
    }

    // Draw Points on MapView
    mapboxMap.addPolyline(new PolylineOptions()
            .add(points)
            .color(Color.parseColor("#3887be"))
            .width(5));
    mapboxMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(origin.getLatitude(), origin.getLongitude()), 18));

    mapboxMap.addMarker(new MarkerOptions().position(new LatLng(origin.getLatitude(), origin.getLongitude())).setTitle("Origin"));
    mapboxMap.addMarker(new MarkerOptions().position(new LatLng(destination.getLatitude(), destination.getLongitude())).setTitle("Destination"));
}

但它没有通过所有要点。

它只是从原点到目的地绘制,避免它们之间的中间点。

如此截图中所示,它仅显示从始发地到目的地。

enter image description here

我希望它显示通过绿色标记折线的路线,然后浏览它。

我猜它是在计算点和绘制线之间的最短路径。

1 个答案:

答案 0 :(得分:-1)

是的,你可以做到,所有内容都在其github(Mapbox)官方项目中提到 here 只需使用它的克隆,在developer-config值xml资源中使用你的克隆更改其访问令牌。 你会找到你的解决方案。你必须在那里挖一点,你很高兴。