在android中的谷歌地图上绘制路径

时间:2016-01-13 10:39:02

标签: android google-maps google-maps-api-2

我使用下面的代码绘制路线,但是有一个问题,它无法计算完美路线。

我使用了getMapsApiDirectionsUrl()方法中的google api。我使用ReadTask来获取api的响应。但它对我来说不合适。

它远离标记位置开始路径&也远离终点位置。 检查屏幕截图

  

检查屏幕截图,它在一个地方显示标记&路线起步远   从一定距离。

- 如果两个地点彼此靠近,那么它就无法绘制路线   - 在他们之间,它从两个位置分开。

请帮帮我。提前谢谢。

这是为了调用google api:

String url = getMapsApiDirectionsUrl();
ReadTask downloadTask = new ReadTask();
downloadTask.execute(url);

Google API:

private String getMapsApiDirectionsUrl() {
        String waypoints = "origin="
                + lat + "," + Long
                + "&destination=" + Double.parseDouble(Constants.LATITUDE) + ","
                + Double.parseDouble(Constants.LONGITUDE);

        String sensor = "sensor=false&units=metric&mode=driving";
        String params = waypoints + "&" + sensor;
        String output = "json";
        String url = "https://maps.googleapis.com/maps/api/directions/"
                + output + "?" + params;
        return url;
}

这是AsyncTask:

private class ReadTask extends AsyncTask<String, Void, String> {
            @Override
            protected String doInBackground(String... url) {
                String data = "";
                try {
                    HttpConnection http = new HttpConnection();
                    data = http.readUrl(url[0]);
                } catch (Exception e) {
                    Log.d("Background Task", e.toString());
                }
                return data;
            }

            @Override
            protected void onPostExecute(String result) {
                super.onPostExecute(result);
                new ParserTask().execute(result);
            }
        }

        private class ParserTask extends AsyncTask<String, Integer, List<List<HashMap<String, String>>>>
        {
            @Override
            protected List<List<HashMap<String, String>>> doInBackground(String... jsonData)
            {
                JSONObject jObject;
                List<List<HashMap<String, String>>> routes = null;

                try {
                    jObject = new JSONObject(jsonData[0]);
                    PathJSONParser parser = new PathJSONParser();
                    routes = parser.parse(jObject);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return routes;
            }

            @Override
            protected void onPostExecute(List<List<HashMap<String, String>>> routes)
            {
                ArrayList<LatLng> points = null;
                PolylineOptions polyLineOptions = null;

                // traversing through routes
                for (int i = 0; i < routes.size(); i++) {
                    points = new ArrayList<LatLng>();
                    polyLineOptions = new PolylineOptions();
                    List<HashMap<String, String>> path = routes.get(i);

                    for (int j = 0; j < path.size(); j++) {
                        HashMap<String, String> point = path.get(j);

                        double lat = Double.parseDouble(point.get("lat"));
                        double lng = Double.parseDouble(point.get("lng"));
                        LatLng position = new LatLng(lat, lng);

                        points.add(position);
                    }

                    polyLineOptions.addAll(points);
                    polyLineOptions.width(3);
                    polyLineOptions.color(Color.RED);
                }

                googleMap.addPolyline(polyLineOptions);

            }
        }

http://i.stack.imgur.com/c4tTc.jpg

http://i.stack.imgur.com/urXlw.jpg

0 个答案:

没有答案