2010-07-17 6 views
4

J'écris une application Android et j'ai besoin de la possibilité de prendre une valeur lat/long et de trouver la valeur lat/long de la route la plus proche. J'ai lu l'article au http://econym.org.uk/gmap/snap.htm, et j'ai essayé de l'implémenter, mais j'ai dû utiliser les services Web Google Maps plutôt que javascript (puisque c'est une application Android). Quand je fais une demande commeSnap to Roads Android

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

il ne me renvoie pas la la route la plus proche du tout! Il semble que la méthode ci-dessus ne fonctionne pas avec les webservices. Quelqu'un at-il d'autres idées sur la façon de résoudre ce problème?

Répondre

4

Votre URL semble fonctionner parfaitement.

Voici l'AsyncTask que j'ai utilisé pour le tester.

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; 
} 

Dans la sortie logcat si vous regardez quelques lignes, vous devriez voir:

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> 

Ils sont les coordonnées que vous recherchez. J'espère que cela aide.

Questions connexes