0

I am using the following piece of code to find the road distance between two sets of coordinates in android:

public String getDistance(double lat1, double lon1, double lat2, double lon2) { String result_in_kms = ""; String url = "http://maps.google.com/maps/api/directions/xml?origin=" + lat1 + "," + lon1 + "&destination=" + lat2 + "," + lon2 + "&sensor=false&units=metric"; String tag[] = {"text"}; HttpResponse response = null; try { HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpPost httpPost = new HttpPost(url); response = httpClient.execute(httpPost, localContext); InputStream is = response.getEntity().getContent(); DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); org.w3c.dom.Document doc = builder.parse(is); if (doc != null) { NodeList nl; ArrayList args = new ArrayList(); for (String s : tag) { nl = doc.getElementsByTagName(s); if (nl.getLength() > 0) { Node node = nl.item(nl.getLength() - 1); args.add(node.getTextContent()); } else { args.add(" - "); } } result_in_kms =String.valueOf( args.get(0)); } } catch (Exception e) { e.printStackTrace(); } //Float f=Float.valueOf(result_in_kms); return result_in_kms; } 

But instead of the distance between them all i get is a '-'.What is wrong in the above code , i got it from this post:

How to find distance (by road) between 2 geo points in Android application without using google map direction api?

1

2 Answers 2

2

Please try working code as written below:

public String getDistance(final double lat1, final double lon1, final double lat2, final double lon2){ Thread thread=new Thread(new Runnable() { @Override public void run() { try { URL url = new URL("http://maps.googleapis.com/maps/api/directions/json?origin=" + lat1 + "," + lon1 + "&destination=" + lat2 + "," + lon2 + "&sensor=false&units=metric&mode=driving"); final HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); InputStream in = new BufferedInputStream(conn.getInputStream()); response = iStreamToString(in); JSONObject jsonObject = new JSONObject(response); 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"); parsedDistance=distance.getString("text"); Log.v("Distsnce","Distance>>"+parsedDistance); } catch (ProtocolException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } } }); thread.start(); try { thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } return parsedDistance; } public String iStreamToString(InputStream is1) { BufferedReader rd = new BufferedReader(new InputStreamReader(is1), 4096); String line; StringBuilder sb = new StringBuilder(); try { while ((line = rd.readLine()) != null) { sb.append(line); } rd.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } String contentOfMyInputStream = sb.toString(); return contentOfMyInputStream; } 

//Call the above method with your origin and destination latitude and longitude.

For example:

 getDistance(23.0225,72.5714,21.1702,72.8311); 
Sign up to request clarification or add additional context in comments.

Comments

0

you will get the difference of two lat long using bellow method.

public float getDistance(double lat1, double lon1, double lat2, double lon2) { android.location.Location homeLocation = new android.location.Location(""); homeLocation .setLatitude(lat1); homeLocation .setLongitude(lon1); android.location.Location targetLocation = new android.location.Location(""); targetLocation .setLatitude(lat2); targetLocation .setLongitude(lon2); float distanceInMeters = targetLocation.distanceTo(homeLocation); return distanceInMeters ; } 

if you want distance in km please convert it to km.

2 Comments

That distance is straight line distance , i want road distance.
if you want shortest path distance you can use 'distanceBetween(double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results)' please see the link .

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.