Android Distance Api Android

时间:2015-02-21 11:25:24

标签: android api google-maps

西洛!我有个问题!

我有权使用以下代码吗?我想计算两个GPS坐标之间的距离。

你怎么说?

public class ApiDirectionsAsyncTask extends AsyncTask<Double,Double,Double>
{

    double lat1, lng1, lat2,  lng2;


    ApiDirectionsAsyncTask(double lat1, double lng1, double lat2, double lng2)
    {
        this.lat1 = lat1;
        this.lng1 = lng1;
        this.lat2 = lat2;
        this.lng2 = lng2;
    }


    @Override
    protected Double doInBackground(Double... params) {
        StringBuilder stringBuilder = new StringBuilder();
        Double dist = 0.0;
        try {
            String url = "http://maps.googleapis.com/maps/api/directions/json?origin=" + lat1 + "," + lng1 + "&destination=" + lat2 +","+lng2 + "&mode=driving&sensor=false";

            HttpPost httppost = new HttpPost(url);

            HttpClient client = new DefaultHttpClient();
            HttpResponse response;
            stringBuilder = new StringBuilder();


            response = client.execute(httppost);
            HttpEntity entity = response.getEntity();
            InputStream stream = entity.getContent();
            int b;
            while ((b = stream.read()) != -1) {
                stringBuilder.append((char) b);
            }
        } catch (ClientProtocolException e) {
        } catch (IOException e) {
        }

        JSONObject jsonObject = new JSONObject();
        try {

            jsonObject = new JSONObject(stringBuilder.toString());

            JSONArray array = jsonObject.getJSONArray("routes");

            JSONObject routes = array.getJSONObject(0);

            JSONArray legs = routes.getJSONArray("legs");

            JSONObject steps = legs.getJSONObject(0);

            JSONObject distance = steps.getJSONObject("distance");

            Log.i("Distance", distance.toString());
            dist = Double.parseDouble(distance.getString("text").replaceAll("[^\\.0123456789]","") );

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return dist;
    }

    @Override
    protected void onPostExecute(Double aDouble) {
        super.onPostExecute(aDouble);

    }
}

1 个答案:

答案 0 :(得分:0)

在您的主要方法

ApiDirectionsAsyncTask  task = new ApiDirectionsAsyncTask();
task.execute();

像这样更改你的代码

public class ApiDirectionsAsyncTask extends AsyncTask<String, Integer, String> {

    private static final String DIRECTIONS_API_BASE = "http://maps.googleapis.com/maps/api/distancematrix/json";

    @Override
    protected String doInBackground(String... params) {
        StringBuilder stringBuilder = new StringBuilder();
        String dist = "0 km";
        try {
            StringBuilder sb = new StringBuilder(DIRECTIONS_API_BASE);
            sb.append("?origins=" + params[0]);
            sb.append("&destinations=" + params[1]);

            HttpPost httppost = new HttpPost(sb.toString());

            HttpClient client = new DefaultHttpClient();
            HttpResponse response;
            stringBuilder = new StringBuilder();


            response = client.execute(httppost);
            HttpEntity entity = response.getEntity();
            InputStream stream = entity.getContent();
            int b;
            while ((b = stream.read()) != -1) {
                stringBuilder.append((char) b);
            }
        } catch (ClientProtocolException e) {
        } catch (IOException e) {
        }

        JSONObject jsonObject;
        try {

            jsonObject = new JSONObject(stringBuilder.toString());
            dist = String.valueOf( jsonObject.getJSONArray("rows").getJSONObject(0).getJSONArray("elements").getJSONObject(0).getJSONObject("distance").get("text")) ;

        } catch (JSONException e) {
            e.printStackTrace();
        }

        return String.valueOf(dist);
    }


    @Override
    protected void onPostExecute(String s) {

        super.onPostExecute(s);
        Log.i("Dis", s);
    }

}