2012-12-22 17 views
8

Czy istnieje sposób na uzyskanie odległości między 2 adresami obliczonej przez Google Maps? Jak?Odległość między adresami

+3

Witamy w StackOverflow! Będziesz musiał podać znacznie więcej szczegółów, abyśmy mogli udzielić jakiejkolwiek pomocy. Z jakimi danymi masz do czynienia? Co próbowałeś (szczególnie, jaki rodzaj kodu napisałeś)? –

Odpowiedz

2

Można to zrobić za pomocą Google Directions API, przechodzą lokalizacje rozpoczęcia/zakończenia, API jak ciągi adresowych lub koordynuje, a Google wykona dla ciebie całą pracę nóg.

Trasy składają się z różnych legs w zależności od liczby określonych punktów trasy. W swoim scenariuszu (0 punktów drogi) powinieneś mieć tylko 1 nogę, która powinna mieć oszacowaną właściwość odległości.

17

Jeśli po prostu masz dwa adresy najpierw spróbuj uzyskać lan przez GEOCODING, a następnie istnieje wiele metod, aby uzyskać odległość pomiędzy.

LUB

jeśli nie potrzeba geokodowanie i chcesz CS ROZWIĄZANIE spróbuj tego:

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

LUB

jeśli nie chcą zadzierać z google i potrzebujących tylko AIR DISTANCE, Wypróbuj to:

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

Skąd można pobrać analizator składni JObject – user1901860

+0

Co to jest plikGetContents fonction? – user1901860

+0

Pobrałem JSon linq tutaj: http://james.newtonking.com/pages/json-net.aspx – user1901860

0

I zrobiłem to: ale zwraca pusty ciąg znaków. url = "http://maps.googleapis.com/maps/api/directions/json?origin=3320, rue de verdun, verdun & destynacja = 379, 19e aleja, La Guadeloupe, G0M 1G0 & czujnik = fałsz"

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; 
    } 
Powiązane problemy