如何获取从位置A(起点)到位置B(目的地)的路线的所有经纬度

How to get all the latitude and longitude of a route from location A(start point) to Location B(destination point)

我试过创建路线,但我不确定如何事先获取从起点到目的地的所有纬度和经度。在这里,我 select 我在地图中搜索从起点到终点的路线时选择的一条路线,我想获得从起点到终点的所有经纬度。我必须将此数据提供给其他 java 方法进行一些计算。让我知道是否有任何解决方法。因为,我是地图的初学者,所以我不太了解。我在 Stack overflow 中进行了 google 和尝试,但没有找到任何类似或支持的解决方案。

提前致谢, 灰

使用此 API 获取方向 将您的起始经纬度和目的地经纬度输入 api 字符串 url = "https://maps.googleapis.com/maps/api/directions/" + 输出 + “?” + 参数;

首先我们将获得源点和目标点,我们必须在它们之间绘制路线。然后我们将这些属性传递给下面的函数。

 public String makeURL (double sourcelat, double sourcelog, double destlat, double destlog ){
    StringBuilder urlString = new StringBuilder();
    urlString.append("http://maps.googleapis.com/maps/api/directions/json");
    urlString.append("?origin=");// from
    urlString.append(Double.toString(sourcelat));
    urlString.append(",");
    urlString
            .append(Double.toString( sourcelog));
    urlString.append("&destination=");// to
    urlString
            .append(Double.toString( destlat));
    urlString.append(",");
    urlString.append(Double.toString( destlog));
    urlString.append("&sensor=false&mode=driving&alternatives=true");
    urlString.append("&key=YOUR_API_KEY");
    return urlString.toString(); }

此函数将使我们发送的 url 得到方向 API 响应。然后我们将解析该响应。解析器 class 是

public class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public String getJSONFromUrl(String url) {

    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();           

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }

        json = sb.toString();
        is.close();
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }
    return json;

}}

此解析器将 return 我们的字符串。我们会这样称呼它。

JSONParser jParser = new JSONParser();String json = jParser.getJSONFromUrl(url);

现在我们将这个字符串发送到我们的 drawpath 函数。绘制路径函数

public void drawPath(String  result) {

try {
        //Tranform the string into a json object
       final JSONObject json = new JSONObject(result);
       JSONArray routeArray = json.getJSONArray("routes");
       JSONObject routes = routeArray.getJSONObject(0);
       JSONObject overviewPolylines = routes.getJSONObject("overview_polyline");
       String encodedString = overviewPolylines.getString("points");
       List<LatLng> list = decodePoly(encodedString);
       Polyline line = mMap.addPolyline(new PolylineOptions()
                                .addAll(list)
                                .width(12)
                                .color(Color.parseColor("#05b1fb"))//Google maps blue color
                                .geodesic(true)
                );
       /*
       for(int z = 0; z<list.size()-1;z++){
            LatLng src= list.get(z);
            LatLng dest= list.get(z+1);
            Polyline line = mMap.addPolyline(new PolylineOptions()
            .add(new LatLng(src.latitude, src.longitude), new LatLng(dest.latitude,   dest.longitude))
            .width(2)
            .color(Color.BLUE).geodesic(true));
        }
       */
} 
catch (JSONException e) {

}} 

以上代码会在mMap上绘制路径。 decodePoly的代码是

private List<LatLng> decodePoly(String encoded) {

List<LatLng> poly = new ArrayList<LatLng>();
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;}

由于方向调用可能需要时间,所以我们将在异步任务中完成所有这些。我的异步任务是

private class connectAsyncTask extends AsyncTask<Void, Void, String>{
private ProgressDialog progressDialog;
String url;
connectAsyncTask(String urlPass){
    url = urlPass;
}
@Override
protected void onPreExecute() {
    // TODO Auto-generated method stub
    super.onPreExecute();
    progressDialog = new ProgressDialog(MainActivity.this);
    progressDialog.setMessage("Fetching route, Please wait...");
    progressDialog.setIndeterminate(true);
    progressDialog.show();
}
@Override
protected String doInBackground(Void... params) {
    JSONParser jParser = new JSONParser();
    String json = jParser.getJSONFromUrl(url);
    return json;
}
@Override
protected void onPostExecute(String result) {
    super.onPostExecute(result);   
    progressDialog.hide();        
    if(result!=null){
        drawPath(result);
    }
}}

试试这个对我有用的代码