I want to get the road distance between two geopoint coordinates. Currently I am getting the path but it is not very accurate as it considers the start and end of the road but not the curves in the road. I am using the following code:
Double sLat = Double.parseDouble(getIntent().getStringExtra("sLat"));
Double sLon = Double.parseDouble(getIntent().getStringExtra("sLon"));
Double dLat = Double.parseDouble(getIntent().getStringExtra("dLat"));
Double dLon = Double.parseDouble(getIntent().getStringExtra("dLon"));
MapView mv = (MapView) findViewById(R.id.mapview);
mv.setBuiltInZoomControls(true);
MapController mc = mv.getController();
ArrayList<GeoPoint> all_geo_points = getDirections(sLat, sLon, dLat, dLon);
GeoPoint moveTo = (GeoPoint) all_geo_points.get(0);
mc.animateTo(moveTo);
mc.setZoom(18);
mv.getOverlays().add(new MyOverlay(all_geo_points));
public static ArrayList<GeoPoint> getDirections(double lat1, double lon1, double lat2, double lon2)
{
String url = "http://maps.googleapis.com/maps/api/directions/xml?origin=" +lat1 + "," + lon1 + "&destination=" + lat2 + "," + lon2 + "&sensor=false&units=metric";
String tag[] = { "lat", "lng" };
ArrayList<GeoPoint> list_of_geopoints = new ArrayList<GeoPoint>();
HttpResponse response = null;
try
{
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpPost httpPost = new HttpPost(url);
response = httpClient.execute(httpPost, localContext);
InputStream in = response.getEntity().getContent();
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(in);
if (doc != null) {
NodeList nl1, nl2;
nl1 = doc.getElementsByTagName(tag[0]);
nl2 = doc.getElementsByTagName(tag[1]);
if (nl1.getLength() > 0) {
list_of_geopoints = new ArrayList<GeoPoint>();
for (int i = 0; i < nl1.getLength(); i++) {
Node node1 = nl1.item(i);
Node node2 = nl2.item(i);
double lat = Double.parseDouble(node1.getTextContent());
double lng = Double.parseDouble(node2.getTextContent());
list_of_geopoints.add(new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6)));
}
} else {
// No points found
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
return list_of_geopoints;
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
Can anyone give me some ideas how to improve this route and also how to get the distence by road. Currently I am getting crow-fly distance in kilometers but my need is to get distance by road.
Thanks in advance.
You may want to use The Google Distance Matrix API
For example, here is the distance by car between Paris (France) and Berlin (Germany)