路线覆盖切入道路 - Mapbox

时间:2016-09-02 03:43:53

标签: android mapbox

我从https://www.mapbox.com/android-sdk/examples/directions/复制的代码不会显示道路上的叠加层,即使我将条件指定为PROFILE_DRIVING,也会切断街道:

private void getRoute(Position origin, Position destination) throws ServicesException {

        MapboxDirections client = new MapboxDirections.Builder()
                .setOrigin(origin)
                .setDestination(destination)
                .setProfile(DirectionsCriteria.PROFILE_DRIVING)
                .setAccessToken(CommonResource.MAPBOX_ACCESS_TOKEN)
                .build();

        client.enqueueCall(new retrofit2.Callback<DirectionsResponse>() {
            @Override
            public void onResponse(Call<DirectionsResponse> call, Response<DirectionsResponse> response) {
                // You can get the generic HTTP info about the response
                if (response.body() == null) {
                    return;
                }

                currentRoute = response.body().getRoutes().get(0);
                drawRoute(currentRoute);
            }

            @Override
            public void onFailure(Call<DirectionsResponse> call, Throwable t) {                    
                Toast.makeText(MainActivity.this, "Error: " + t.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
    }

    private void drawRoute(DirectionsRoute route) {
        // Convert LineString coordinates into LatLng[]
        LineString lineString = LineString.fromPolyline(route.getGeometry(), Constants.OSRM_PRECISION_V5);
        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
        map.addPolyline(new PolylineOptions()
                .add(points)
                .color(Color.parseColor("#009688"))
                .width(5));
    }

enter image description here

1 个答案:

答案 0 :(得分:1)

正确答案:感谢您提供积分,在看到整条路线之前,我没有意识到发生了什么。您需要将setOverview设置为full。这在构建路线请求时完成,例如:

MapboxDirections client = new MapboxDirections.Builder()
  .setOrigin(origin)
  .setDestination(destination)
  .setProfile(DirectionsCriteria.PROFILE_CYCLING)
  .setOverview(DirectionsCriteria.OVERVIEW_FULL) // This line needs to be added.
  .setAccessToken(<access token>)
  .build();

以前的问题排查: 您使用的是哪个版本的Mapobx Android服务?你可以用整个类编辑你的问题,或者在GIthub上链接到它。我没有看到任何关于该代码的问题。对于最终的疑难解答,我建议更改OSRM_PRECISION_V5并检查点数组的大小以查看出错的地方。

我会在提供其他信息后编辑此答案。

编辑:如果您使用的是Mapbox方向V5,则无需更改编码常量。相反,你可以确保导入所有正确的类,解决this example in the demo app。如果您仍有问题,如下所述,请发布您提供的任何其他代码,目前您问题中的代码段与我们网站上的代码段完全相同。