2011-10-29 65 views
11

我正在使用ASP.NET MVC 3和Google Maps v3。我想在一個動作中進行地理編碼。這是傳遞一個有效的地址給谷歌和獲取經緯度回來。我所見過的所有關於地理編碼的在線樣本都涉及客戶端地理編碼。你如何在使用C#的操作中做到這一點?Google Maps v3地理編碼服務器端

回答

16

我不知道如果我理解正確,但是這是一個使用擴展方法here & Json.Net

+0

不錯 - 感謝分享。它工作正常。您的示例是否正確使用Google Maps v3? – thd

+0

不,它不是javascript api。我使用了http://code.google.com/apis/maps/documentation/geocoding/('JSON輸出格式「)中的文檔 –

+0

如果我計劃將lat和lng存儲到數據庫表中,這仍然有效嗎? – RyeNyeTheComputerScienceGuy

2

LB的解決方案工作,我這樣做(如果你有興趣)的方式

void GoogleGeoCode(string address) 
{ 
    string url = "http://maps.googleapis.com/maps/api/geocode/json?sensor=true&address="; 

    dynamic googleResults = new Uri(url + address).GetDynamicJsonObject(); 
    foreach (var result in googleResults.results) 
    { 
     Console.WriteLine("[" + result.geometry.location.lat + "," + result.geometry.location.lng + "] " + result.formatted_address); 
    } 
} 

爲了我。然而,我遇到了一些運行時綁定的問題,並必須投之前,我可以使用它們的結果

public static Dictionary<string, decimal> GoogleGeoCode(string address) 
    { 
     var latLong = new Dictionary<string, decimal>(); 

     const string url = "http://maps.googleapis.com/maps/api/geocode/json?sensor=true&address="; 

     dynamic googleResults = new Uri(url + address).GetDynamicJsonObject(); 

     foreach (var result in googleResults.results) 
     { 
      //Have to do a specific cast or we'll get a C# runtime binding exception 
      var lat = (decimal)result.geometry.location.lat; 
      var lng = (decimal) result.geometry.location.lng; 

      latLong.Add("Lat", lat); 
      latLong.Add("Lng", lng); 
     } 

     return latLong; 
    } 
相關問題