西洛!我有个问题!
我有权使用以下代码吗?我想计算两个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);
}
}
答案 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);
}
}