2011-10-29 10 views
11

私はASP.NET MVC 3とGoogle Maps v3を使用しています。私はアクションでジオコーディングをしたいと思います。それは有効なアドレスをGoogleに渡し、緯度と経度を戻します。私が見たジオコーディングに関するすべてのオンラインサンプルは、クライアントサイドのジオコーディングを扱っています。あなたは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; 
    }