要获取安卓谷歌地图从A到B的路线,可以使用Google Maps API来实现。以下是一个示例代码,展示了如何使用Google Maps Directions API获取两个地点之间的路线:
import android.os.AsyncTask;
import android.util.Log;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.PolylineOptions;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class DirectionsTask extends AsyncTask {
private GoogleMap mMap;
private LatLng origin;
private LatLng destination;
public DirectionsTask(GoogleMap map, LatLng origin, LatLng destination) {
this.mMap = map;
this.origin = origin;
this.destination = destination;
}
@Override
protected String doInBackground(String... url) {
String data = "";
try {
data = downloadUrl(url[0]);
} catch (IOException e) {
Log.d("Background Task", e.toString());
}
return data;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
ParserTask parserTask = new ParserTask();
parserTask.execute(result);
}
private String downloadUrl(String strUrl) throws IOException {
String data = "";
InputStream iStream = null;
HttpURLConnection urlConnection = null;
try {
URL url = new URL(strUrl);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.connect();
iStream = urlConnection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(iStream));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
data = sb.toString();
br.close();
} catch (Exception e) {
Log.d("Exception", e.toString());
} finally {
assert iStream != null;
iStream.close();
urlConnection.disconnect();
}
return data;
}
private class ParserTask extends AsyncTask>>> {
@Override
protected List>> doInBackground(String... jsonData) {
JSONObject jObject;
List>> routes = null;
try {
jObject = new JSONObject(jsonData[0]);
DirectionsJSONParser parser = new DirectionsJSONParser();
routes = parser.parse(jObject);
} catch (JSONException e) {
e.printStackTrace();
}
return routes;
}
@Override
protected void onPostExecute(List>> result) {
ArrayList points;
PolylineOptions lineOptions = null;
for (int i = 0; i < result.size(); i++) {
points = new ArrayList<>();
lineOptions = new PolylineOptions();
List> path = result.get(i);
for (int j = 0; j < path.size(); j++) {
HashMap 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);
}
lineOptions.addAll(points);
lineOptions.width(10);
lineOptions.color(Color.RED);
}
if (lineOptions != null) {
mMap.addPolyline(lineOptions);
}
}
}
}
这个代码示例中,我们首先创建了一个DirectionsTask类,它继承自AsyncTask类,并用于在后台获取路线数据。在doInBackground方法中,我们使用HttpURLConnection来下载路线数据。然后,我们在onPostExecute方法中创建一个ParserTask类的实例,并将获取到的路线数据传递给它进行解析。
在ParserTask类中,我们首先将获取到的数据解析为一个JSONObject对象。然后,我们使用DirectionsJSONParser类来解析JSON对象并获取路线信息。最后,我们将路线上的坐标点添加到PolylineOptions对象中,并将其添加到Google地图上显示出来。
要使用这个示例代码,你需要将Google Maps Android API添加到你的Android项目中,并获取一个有效的API密钥。然后,你可以在你的Activity中调用DirectionsTask类的实例,并传
上一篇:安卓谷歌登录
下一篇:安卓谷歌地图单个折线或多个折线