Привязка к дорогам Android - PullRequest
4 голосов
/ 17 июля 2010

Я пишу приложение для Android, и мне нужна возможность взять значение lat / long и найти значение lat / long ближайшей к нему дороги.Я прочитал статью на http://econym.org.uk/gmap/snap.htm, и попытался реализовать это, но мне пришлось использовать веб-сервисы Google Maps, а не javascript (так как это приложение для Android).Когда я делаю запрос типа

maps.google.com / maps / api / directions / xml? Origin = 52.0,0 & destination = 52.0,0 & sensor = true

, он не возвращает мнесамая близкая дорога вообще!Кажется, что вышеупомянутый метод не работает с веб-сервисами.У кого-нибудь есть другие идеи о том, как решить эту проблему?

1 Ответ

4 голосов
/ 08 ноября 2011

Ваш URL, кажется, работает отлично.

Вот 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>

Это координаты, которые вы ищете. Надеюсь, это поможет.

...