2012-12-22 31 views
8

C'è un modo per avere una distanza tra 2 indirizzi calcolati da Google Maps? Come?Distanza tra gli indirizzi

+3

Benvenuti in StackOverflow! Dovrai fornire molti più dettagli per consentirci di fornire qualsiasi tipo di aiuto. Che tipo di dati hai a che fare? Che cosa hai provato (in particolare, che tipo di codice hai scritto)? –

risposta

2

È possibile farlo utilizzando la Google Directions API, si passa le posizioni di inizio/fine alle API come stringhe di indirizzo o coordinate e Google farà tutto il lavoro per le gambe per voi.

I percorsi sono costituiti da vari legs in base al numero di punti di passaggio specificato. Nel tuo scenario (punti a 0 punti) dovresti avere solo una gamba che dovrebbe avere una proprietà di distanza stimata.

17

Se si dispone solo di due indirizzi, provare prima a ottenere lat lan entro GEOCODING e quindi ci sono molti metodi per ottenere una distanza intermedia.

O

se non avete bisogno geocoding e vogliono un CS SOLUZIONE provare questo:

public int getDistance(string origin, string destination) 
{ 
    System.Threading.Thread.Sleep(1000); 
    int distance = 0; 
    //string from = origin.Text; 
    //string to = destination.Text; 
    string url = "http://maps.googleapis.com/maps/api/directions/json?origin=" + origin + "&destination=" + destination + "&sensor=false"; 
    string requesturl = url; 
    //string requesturl = @"http://maps.googleapis.com/maps/api/directions/json?origin=" + from + "&alternatives=false&units=imperial&destination=" + to + "&sensor=false"; 
    string content = fileGetContents(requesturl); 
    JObject o = JObject.Parse(content); 
    try 
    { 
     distance = (int)o.SelectToken("routes[0].legs[0].distance.value"); 
     return distance; 
    } 
    catch 
    { 
     return distance; 
    } 
    return distance; 
    //ResultingDistance.Text = distance; 
} 

    protected string fileGetContents(string fileName) 
    { 
     string sContents = string.Empty; 
     string me = string.Empty; 
     try 
     { 
      if (fileName.ToLower().IndexOf("http:") > -1) 
      { 
       System.Net.WebClient wc = new System.Net.WebClient(); 
       byte[] response = wc.DownloadData(fileName); 
       sContents = System.Text.Encoding.ASCII.GetString(response); 

      } 
      else 
      { 
       System.IO.StreamReader sr = new System.IO.StreamReader(fileName); 
       sContents = sr.ReadToEnd(); 
       sr.Close(); 
      } 
     } 
     catch { sContents = "unable to connect to server "; } 
     return sContents; 
    } 

O

se non volete pasticciare con google e necessità solo DISTANZA ARIA, Prova questo:

public decimal calcDistance(decimal latA, decimal longA, decimal latB, decimal longB) 
{ 

    double theDistance = (Math.Sin(DegreesToRadians(latA)) * 
      Math.Sin(DegreesToRadians(latB)) + 
      Math.Cos(DegreesToRadians(latA)) * 
      Math.Cos(DegreesToRadians(latB)) * 
      Math.Cos(DegreesToRadians(longA - longB))); 

    return Convert.ToDecimal((RadiansToDegrees(Math.Acos(theDistance)))) * 69.09M * 1.6093M; 
} 
+0

Dove trovo il parser JObject – user1901860

+0

E qual è la funzione fileGetContents? – user1901860

+0

Ho scaricato il linq JSon qui: http://james.newtonking.com/pages/json-net.aspx – user1901860

0

E ho fatto questo: ma restituisce una stringa vuota. url = "http://maps.googleapis.com/maps/api/directions/json?origin=3320, rue de verdun, verdun & destinazione = 379, 19e avenue, La Guadalupa, G0M 1G0 & sensore = falso"

public string fileGetContents(string url) 
    { 
     string text = ""; 
     var webRequest = HttpWebRequest.Create(url); 
     IAsyncResult asyncResult = null; 
     asyncResult = webRequest.BeginGetResponse(
      state => 
      { 
       var response = webRequest.EndGetResponse(asyncResult); 
       using (var sr = new StreamReader(response.GetResponseStream())) 
       { 
        text = sr.ReadToEnd(); 
       } 
      }, null 
      ); 
     return text; 
    } 
Problemi correlati