使用Mapbox

时间:2017-01-23 19:31:52

标签: android mapbox

我的一位同事目前正在努力实施转发指导,为我们正在开发的公司开发的应用程序。我的任务是尝试帮助他,但我们都没有能够做任何进展。

他正在使用Mapbox创建地图。我之前从未使用过mapbox,所以我没多大帮助。

他已经实施了代码,应该让我们转向指示,但它似乎没有做任何事情。

很抱歉,如果我提出旧问题或者没有明确说明我的情况,但这是我能解释的最好的问题。我们做了很多搜索,但我们发现似乎没有任何帮助。

以下是他尝试使用的代码,它应该实现转向指示。

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

    MapboxDirections client = new MapboxDirections.Builder()
            .setOrigin(origin)
            .setDestination(destination)
            .setProfile(DirectionsCriteria.PROFILE_DRIVING)
            .setSteps(true)
            // .setOverview(DirectionsCriteria.OVERVIEW_FULL)
            .setInstructions(DirectionsCriteria.INSTRUCTIONS_TEXT)
            .setAccessToken("pk.eyJ1IjoibnRyY3N2ZyIsImEiOiJCUmc4OHhjIn0.shHWdNg3Q32QUHJ1nOCs3A")
            .build();

    client.enqueue(new retrofit.Callback<DirectionsResponse>() {
        @Override
        public void onResponse(Response<DirectionsResponse> response, Retrofit retrofit) {
            // You can get the generic HTTP info about the response
            Log.d(TAG, "Response code: " + response.code());
            if (response.body() == null) {
                Log.e(TAG, "No routes found, make sure you set the right user and access token.");
                return;
            } else if (response.body().getRoutes().size() < 1) {
                Log.e(TAG, "No routes found");
                return;
            }
        }

        @Override
        public void onFailure(Throwable t) {
            Log.e(TAG, "Error: " + t.getMessage());
            Toast.makeText(MainActivity.this, "Error: " + t.getMessage(), Toast.LENGTH_SHORT).show();
        }

        public void onResponse(Response<DirectionsResponse> call, Response<DirectionsResponse> response) {
            // You can get the generic HTTP info about the response
            Log.d(TAG, "Response code: " + response.code());
            if (response.body() == null) {
                Log.e(TAG, "No routes found, make sure you set the right user and access token.");
                return;
            } else if (response.body().getRoutes().size() < 1) {
                Log.e(TAG, "No routes found");
                return;
            }

            drawRoute(currentRoute);
        }


        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());
            }

            Polyline polyline = mMapboxMap.addPolyline(new PolylineOptions()
                    .add(points)
                    .color(Color.RED)
                    .width(5));
            directionsOn = true;


        }

非常感谢任何帮助。

提前致谢。

2 个答案:

答案 0 :(得分:0)

我强烈建议您从Mapbox Java中的路线v4更改为v5。完成切换后,您可以在我们网站上找到this example。确保您也以正确的顺序传递坐标,首先是longitude,然后是latitude

答案 1 :(得分:0)

亲爱的朋友地图框也提供了包含示例代码段的详细文档。 我已按照mapbox转弯导航文档为我的要求构建了一个可用的应用程序。

如果您遇到任何问题,请点击链接告诉我。

链接:https://www.mapbox.com/android-docs/navigation/overview/navigation-ui/

在这里,您可以使用NavigationView组件自定义地图框转弯功能。