尝试实施Google室内地图API向用户提供路线时路线错误

时间:2019-05-14 09:54:00

标签: java android google-maps

我正在尝试将Google室内地图api用于建筑物的楼层以及所有其他方面,但是当我从路线api请求路线时,它会使用道路到达那里,但是当我在网络或他们的应用程序的google map上尝试相同的操作时显示步行方向。我在请求其api时选择了相同的模式。

我尝试用解码方法解码多段线字符串,然后在地图上绘制了这些多段线,但它从道路经过。 这是我用来绘制折线的代码

if (click != 70) {
            marker.showInfoWindow();
            if (setstartMarker){
                start = marker.getPosition();
                setstartMarker = false;
            }else if (setEndMarker){
                end = marker.getPosition();
                setEndMarker = false;
            }
            if (start != null && end != null){
                AndroidNetworking.get("https://maps.googleapis.com/maps/api/directions/json?origin={start}&destination={end}&key={key}&mode=walking")
                        .addPathParameter("start",start.latitude+","+start.longitude)
                        .addPathParameter("end",end.latitude+","+end.longitude)
                        .addPathParameter("key","MY_API_KEY")
                        .setPriority(Priority.HIGH)
                        .build()
                        .getAsJSONObject(new JSONObjectRequestListener() {
                            @Override
                            public void onResponse(JSONObject response) {
                                try {
                                    Log.d("polystring",response.toString());
                                    JSONArray object = response.getJSONArray("routes");
                                    JSONObject polyline = object.getJSONObject(0);
                                    JSONArray ovrplylne = polyline.getJSONArray("legs");
                                    JSONObject legsobject = ovrplylne.getJSONObject(0);
                                    JSONArray steps = legsobject.getJSONArray("steps");
                                    Log.d("steps",steps.toString());
                                    for (int i = 0 ; i < steps.length();i++){
                                        List<LatLng> points = decodePoly(steps.getJSONObject(i).getJSONObject("polyline").getString("points"));
                                        PolylineOptions options = new PolylineOptions();
                                        for (LatLng objectpoint: points){
                                            options.add(objectpoint);
                                        }
                                        mMap.addPolyline(options);
                                    }

                                } catch (JSONException e) {
                                    Log.d("polystring",e.getMessage());
                                }
                            }

                            @Override
                            public void onError(ANError anError) {
                                Toast.makeText(getApplicationContext(),String.valueOf(anError.getErrorCode()),Toast.LENGTH_SHORT).show();
                            }
                        });
                start = null;
                end = null;
            }
            return true;
        }

要使用此代码对折线进行解码

private List<LatLng> decodePoly(String encoded) {
        List<LatLng> poly = new ArrayList<>();
        int index = 0, len = encoded.length();
        int lat = 0, lng = 0;

        while (index < len) {
            int b, shift = 0, result = 0;
            do {
                b = encoded.charAt(index++) - 63;
                result |= (b & 0x1f) << shift;
                shift += 5;
            } while (b >= 0x20);
            int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
            lat += dlat;

            shift = 0;
            result = 0;
            do {
                b = encoded.charAt(index++) - 63;
                result |= (b & 0x1f) << shift;
                shift += 5;
            } while (b >= 0x20);
            int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
            lng += dlng;

            LatLng p = new LatLng((((double) lat / 1E5)),
                    (((double) lng / 1E5)));
            poly.add(p);
        }

        return poly;
    }

这是我的Android应用程序https://prntscr.com/nobqn6中的样子,现在在其Google地图的网站上检查相同的标记http://prntscr.com/nobs4s

0 个答案:

没有答案