我正在编写一个Android应用程序,我需要能够获取一个纬度/经度值,并找到最近的道路的纬度/经度值。我在http://econym.org.uk/gmap/snap.htm阅读了这篇文章,并试图实现这一点,但我不得不使用谷歌地图Web服务而不是javascript(因为它是一个Android应用程序)。当我提出像
这样的请求时maps.google.com/maps/api/directions/xml?origin=52.0,0&destination=52.0,0&sensor=true
它根本不会让我回到最近的路上!似乎上述方法不适用于Web服务。有没有人对如何解决这个问题有任何其他想法?
答案 0 :(得分:4)
您的网址似乎运作正常。
这是我用来测试它的AsyncTask。
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;
}
在logcat输出中,如果向下看几行,你应该看到:
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>
它们是您正在寻找的坐标。 我希望这会有所帮助。