なか日記

一度きりの人生、楽しく生きよう。

C#で住所から緯度経度情報を取得する

住所から緯度・経度といった地理座標を取得する場合、WebAPIを使うのがお手軽です。

Google Geocoding API

Googleが提供しているAPIです。

注意点

次のような制限があるので注意が必要です。

Google Geocoding API 使用時のクエリ制限として、1 日あたりの位置情報リクエストが 2,500 回に制限されています(Google Maps API for Business をご利用の場合は、1 日あたり 100,000 件までリクエストを実行できます)。

サンプル

var url = string.Format("http://maps.google.com/maps/api/geocode/json?address={0}",
    HttpUtility.UrlEncode("松山市二番町2丁目9-1エフショコラビル2階"));

byte[] result;
using (var wc = new WebClient())
{
    result = wc.DownloadData(url);
}

var jsonString = Encoding.UTF8.GetString(result);

var placeInfo = DynamicJson.Parse(jsonString);
if (placeInfo.status == "OK")
{
    var location = placeInfo.results[0].geometry.location;
    Console.WriteLine(location.lat.ToString());
    Console.WriteLine(location.lng.ToString());
}
//コンソールには「33.8401915」と「132.7707142」が表示される

Yahoo!ジオコーダAPI

Yahoo!が提供しているWebAPIです。

注意点

事前に Yahoo!デベロッパーネットワーク でアプリケーションを登録してAPIキーを取得する必要があります。

サンプル

var url = string.Format("http://geo.search.olp.yahooapis.jp/OpenLocalPlatform/V1/geoCoder?appid={0}&query={1}&output=json",
                            "{APIキー}",
                            HttpUtility.UrlEncode("松山市二番町2丁目9-1エフショコラビル2階"));

byte[] result;
using (var wc = new WebClient())
{
    result = wc.DownloadData(url);
}

var jsonString = Encoding.UTF8.GetString(result);

var placeInfo = DynamicJson.Parse(jsonString);
if (placeInfo.ResultInfo.Count > 0)
{
    var location = placeInfo.Feature[0].Geometry;
    Console.WriteLine(location.Coordinates);
}
//コンソールには「132.77070764,33.84025979」が表示される