[UWP][MapControl] 住所から緯度と経度を求める

スポンサーリンク

MapLocationFinderResultクラスのFindLocationAsyncメソッドを使用すると、住所から緯度と経度を求めることができます。

住所から緯度と経度を求めることをジオコーディングと呼びます。

今回のコードを実行する前に、MainPage.xamlを以下のように編集します。

画面上部には、検索する住所を入力できるTextBox、検索を開始するためButton、求めた緯度と経度を表示するTextBlockを配置します。

また、画面上にMapControlを1つ配置します。

<StackPanel Orientation="Vertical">

    <StackPanel Orientation="Horizontal">
        <TextBox x:Name="txtAddress" TextWrapping="Wrap" Text="" Width="381"/>
        <Button x:Name="btnGetLocation" Content="現在値の取得"
		    HorizontalAlignment="Left" VerticalAlignment="Stretch"
		    Width="120" Click="btnGetLocation_Click"	/>
        <TextBlock x:Name="txbPos" TextWrapping="Wrap" Text=""/>
    </StackPanel>
    
    <Maps:MapControl x:Name="mapControl1" HorizontalAlignment="Left" VerticalAlignment="Top"
		Margin="0"
		Width="500"
		Height="500"    
		ZoomInteractionMode="GestureAndControl"
		TiltInteractionMode="GestureAndControl" 
		MapServiceToken="取得済みのキー" 
                 />

</StackPanel>

続いて、Buttonが押されたときに、TextBoxに入力されている住所から緯度と経度を求めるコードを入力します。

private async void btnGetLocation_Click(object sender, RoutedEventArgs e)
{
    // ①TextBoxに入力されている住所を取得
    string addressToGeocode = txtAddress.Text;
    
    // ②現在 MapControlの中心に表示されている緯度と経度を取得しGeoPointを作成する
    BasicGeoposition queryHint = new BasicGeoposition();
    queryHint.Latitude = mapControl1.Center.Position.Latitude;
    queryHint.Longitude = mapControl1.Center.Position.Longitude;
    Geopoint hintPoint = new Geopoint(queryHint);

    // ③住所を元に緯度と経度を求める
    MapLocationFinderResult result =
          await MapLocationFinder.FindLocationsAsync(
                            addressToGeocode,
                            hintPoint,
                            3);

    // ④住所から緯度と経度の取得が成功したか
    if (result.Status == MapLocationFinderStatus.Success)
    {
        // TextBlockに検索結果の緯度と経度を表示する
        txbPos.Text = "result = (" +
              result.Locations[0].Point.Position.Latitude.ToString() + "," +
              result.Locations[0].Point.Position.Longitude.ToString() + ")";

        // ⑤MapControlの中心を、検索結果の位置に設定する
        mapControl1.Center = result.Locations[0].Point;
    }
}

①は、TextBoxに入力されている住所を変数に格納しています。

②は、MapControlの現在の中心位置の緯度と経度を取得しています。個々で取得した緯度と経度は、検索時の起点となる位置とします(③で使用します)。

③はFindLocationAsyncメソッドを使用して、住所から位置情報を取得します。第1引数は住所を表す文字列を、第2引数は検索を開始する地理的な場所をセットします(②で作成した位置)、第3引数は返される位置情報の最大数です。

④は、検索が成功したかどうかをチェックしています。取得結果はresul.Locationsで取得することができます。ここからLatitudeとLongtitudeを取得します。

⑤は、検索した緯度と経度を、MapControlの中心に設定しています。

 

以下に、東京都庁の住所を入力して検索をしてみた実行例を示します。

実行例

Please follow and like us:

コメント

タイトルとURLをコピーしました