I'm writing an Android app and I need the ability to take a lat/long value and find the lat/long value of the nearest road to it. I've read the article at http://econym.org.uk/gmap/snap.htm, and tried to implement this, but I've had to use the Google Maps Webservices rather than javascript (since it's an android app). When I make a request like
maps.google.com/maps/api/directions/xml?origin=52.0,0&destination=52.0,0&sensor=true
it doesn't return me the closest road at all! Seems that the above method doesn't work with the webservices. Has anyone got any other ideas about how to solve this problem?
Your URL seems to work perfectly.
Here is the AsyncTask I used to test it.
public class SnapToRoad extends AsyncTask<Void, Void, Void> {
private static final String TAG = SnapToRoad.class.getSimpleName();
@Override
protected Void doInBackground(Void... params) {
Reader rd = null;
try {
URL url = new URL("http://maps.google.com/maps/api/directions/xml?origin=52.0,0&destination=52.0,0&sensor=true");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setReadTimeout(10000 /* milliseconds */);
con.setConnectTimeout(15000 /* milliseconds */);
con.connect();
if (con.getResponseCode() == 200) {
rd = new InputStreamReader(con.getInputStream());
StringBuffer sb = new StringBuffer();
final char[] buf = new char[1024];
int read;
while ((read = rd.read(buf)) > 0) {
sb.append(buf, 0, read);
}
Log.v(TAG, sb.toString());
}
con.disconnect();
} catch (Exception e) {
Log.e("foo", "bar", e);
} finally {
if (rd != null) {
try {
rd.close();
} catch (IOException e) {
Log.e(TAG, "", e);
}
}
}
return null;
}
Within the logcat output if you look down a few lines you should see:
11-07 16:20:42.880: V/SnapToRoad(13920): <start_location>
11-07 16:20:42.880: V/SnapToRoad(13920): <lat>51.9999900</lat>
11-07 16:20:42.880: V/SnapToRoad(13920): <lng>0.0064800</lng>
11-07 16:20:42.880: V/SnapToRoad(13920): </start_location>
They are the coordinates you are looking for. I hope this helps.
来源:https://stackoverflow.com/questions/3272427/snap-to-roads-android