ジオコーディングと逆ジオコーディングの実行

[Windows 10 の UWP アプリ向けに更新。 Windows 8.x の記事については、アーカイブをご覧ください ]

住所から地理的な位置への変換 (ジオコーディング) や地理的な位置から住所への変換 (逆ジオコーディング) を行うには、Windows.Services.Maps 名前空間の MapLocationFinder クラスのメソッドを呼び出します。

ヒント アプリで地図を使う方法について詳しくは、GitHub の Windows-universal-samples リポジトリから次のサンプルをダウンロードしてください。

ジオコーディングや逆ジオコーディング用のクラスがどのように関連するかを次に示します。

重要 マップ サービスを使用する前に、マップ認証キーを指定する必要があります。 詳しくは、「マップ認証キーの要求」をご覧ください。

位置情報の取得 (ジオコーディング)

住所や地名を地理的な位置に変換する (ジオコーディング) には、次に示している手順を実行します。

  1. MapLocationFinder クラスの FindLocationsAsync メソッドのいずれかのオーバーロードを呼び出します。
  2. FindLocationsAsync メソッドは、一致する MapLocation オブジェクトのコレクションを含む MapLocationFinderResult オブジェクトを返します。
  3. MapLocationFinderResultLocations プロパティを通じてこのコレクションにアクセスします。
using Windows.Services.Maps;
using Windows.Devices.Geolocation;
...
private async void geocodeButton_Click(object sender, RoutedEventArgs e)
{
   // The address or business to geocode.
   string addressToGeocode = "Microsoft";

   // The nearby location to use as a query hint.
   BasicGeoposition queryHint = new BasicGeoposition();
   queryHint.Latitude = 47.643;
   queryHint.Longitude = -122.131;
   Geopoint hintPoint = new Geopoint(queryHint);

   // Geocode the specified address, using the specified reference point
   // as a query hint. Return no more than 3 results.
   MapLocationFinderResult result =
         await MapLocationFinder.FindLocationsAsync(
                           addressToGeocode,
                           hintPoint,
                           3);

   // If the query returns results, display the coordinates
   // of the first result.
   if (result.Status == MapLocationFinderStatus.Success)
   {
      tbOutputText.Text = "result = (" +
            result.Locations[0].Point.Position.Latitude.ToString() + "," +
            result.Locations[0].Point.Position.Longitude.ToString() + ")";
   }
}

このコードでは、tbOutputText テキスト ボックスに次の結果が表示されます。

result = (47.6406099647284,-122.129339994863)

住所の取得 (逆ジオコーディング)

地理的な位置を住所に変換する (逆ジオコーディング) には、次に示している手順を実行します。

  1. MapLocationFinder クラスの FindLocationsAtAsync メソッドを呼び出します。
  2. FindLocationsAtAsync メソッドは、一致する MapLocation オブジェクトのコレクションを含む MapLocationFinderResult オブジェクトを返します。
  3. MapLocationFinderResultLocations プロパティを通じてこのコレクションにアクセスします。
  4. MapLocationAddress プロパティを通じて MapAddress オブジェクトにアクセスします。
using Windows.Services.Maps;
using Windows.Devices.Geolocation;
...
private async void reverseGeocodeButton_Click(object sender, RoutedEventArgs e)
{
   // The location to reverse geocode.
   BasicGeoposition location = new BasicGeoposition();
   location.Latitude = 47.643;
   location.Longitude = -122.131;
   Geopoint pointToReverseGeocode = new Geopoint(location);

   // Reverse geocode the specified geographic location.
   MapLocationFinderResult result =
         await MapLocationFinder.FindLocationsAtAsync(pointToReverseGeocode);

   // If the query returns results, display the name of the town
   // contained in the address of the first result.
   if (result.Status == MapLocationFinderStatus.Success)
   {
      tbOutputText.Text = "town = " +
            result.Locations[0].Address.Town;
   }
}

このコードでは、tbOutputText テキスト ボックスに次の結果が表示されます。

town = Redmond