我使用下面的代码绘制路线,但是有一个问题,它无法计算完美路线。
我使用了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);
}
}