嗨,大家好我正在开发谷歌地图实施。
我正在尝试通过谷歌地图绘制路径。我有按钮来启动和停止GPS,基本上是为了获得Lat和Long值。
例如:我可以获得10个lat和long值,并将它们存储在ArrayList中。
现在我正在尝试使用上面的lat和long列表绘制路径,如果我使用Google maps API,那么我只需要发送我的ArrayList的起点和终点,然后在地图上绘制/渲染,但它不是我想要的方式。
我想在lat和long值列表中绘制路径(10个值)。原因是谷歌只是给我们从开始到结束的路径,但它可能不是用户旅行的方式/路线
我们怎么做?
以下是我正在做的事情:
private String getMapsApiDirectionsUrl(LatLng source, LatLng destination, String mode) {
// Origin of route
String str_origin = "origin=" + source.latitude + "," + source.longitude;
// Destination of route
String str_dest = "destination=" + destination.latitude + "," + destination.longitude;
// Sensor enabled
String sensor = "sensor=false";
// Building the parameters to the web service
String parameters = str_origin + "&" + str_dest + "&" + sensor + "&" + mode + "&alternatives=true";
// Output format
String output = "json";
// Building the url to the web service
String url = "https://maps.googleapis.com/maps/api/directions/" + output + "?" + parameters;
Log.e(TAG, " " + url);
return url;
}
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) {
task.callBack(routes);
}
}
修改
我正在按照它显示的here的方式完成,但是会发生什么是基于开始和结束值Google地图APi V2给了我路线但可能不是用户旅行的路线,因为他可能已经访问了开始和结束之间的某些地方。
答案 0 :(得分:2)
好吧,我从你的问题得到的是你有10个latlong并且你想在单一路线中绘制它们。这是解决方案 -
<强> 编程 强>
ArrayList<LatLng> points = new ArrayList<LatLng>();
PolylineOptions lineOptions = new PolylineOptions()
points.add(position); //positions are the latlng;
lineOptions.addAll(points);
lineOptions.width(8);
lineOptions.color(Color.RED);
googleMap.addPolyline(lineOptions); //googleMap is the googlemap object which you are displaying on activity.
祝你好运。
如果这是你想要的,请告诉我。
答案 1 :(得分:0)
这是我在使用折线
在googlemap中绘制路径的操作 LatLng prev = new LatLng(pLati, plongi);
LatLng my = new LatLng(latid, longid);
Polyline line = googlemap.addPolyline(new PolylineOptions()
.add(prev, my).width(5).color(Color.RED));
答案 2 :(得分:0)
您可以通过以下解决方案来完成。
PolylineOptions options = new PolylineOptions().width(5).color(Color.BLUE).geodesic(true);
for (int i = 0; i < list.size(); i++) {
LatLng point = list.get(i);
options.add(point);
}
Polyline line = myMap.addPolyline(options);
希望这会对你有所帮助。