【Xamarin.Forms】 グーグルマップと連携して検索を楽にする


はじめに

初めまして、sunn-sudoです。
青春18切符を購入して、西日本を巡っておりました。
知らない土地へ行くと、夜に泊まる漫画喫茶や近くの駅が気になって、
同じ検索ワードで3回ほど、グーグルマップで検索していました(;・∀・)

何度も同じ検索ワードをスマホで打つのは面倒くさい..

本文

開発環境

今回は、Androidアプリ開発に【Xamarin.Forms】を活用します。
【Xamarin.Forms】とは、
開発環境:Visual Studio
開発言語:C#

の構成となっています。

ソースコード

MainPage.xaml
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="AppGoogleMap.MainPage"
             Title="Native map app">
    <StackLayout Margin="10">
        <Label Text="現在地周辺のスポットを検索します。" />
        <Button Text="銭湯" Clicked="OnButtonSearch" />
        <Button Text="温泉" Clicked="OnButtonSearch" />
        <Button Text="ゲーセン" Clicked="OnButtonSearch" />
        <Button Text="ランチ" Clicked="OnButtonSearch" />
        <Button Text="漫画喫茶" Clicked="OnButtonSearch" />
    </StackLayout>
</ContentPage>
MainPage.xaml.cs
using System;
using Xamarin.Essentials;
using Xamarin.Forms;
using Plugin.Geolocator;
using Plugin.Geolocator.Abstractions;

namespace AppGoogleMap
{

    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        async void OnButtonSearch(object sender, EventArgs e)
        {
            if (Device.RuntimePlatform == Device.Android)
            {
                try
                {
                    IGeolocator locator = CrossGeolocator.Current;
                    // 1. 50mの精度に指定
                    // locator.DesiredAccuracy = 50;
                    Position position = await locator.GetPositionAsync();

                    string result = position.Latitude.ToString() + ',' + position.Longitude.ToString();
                    // タップしたボタンのテキストを取得
                    string search_text = ((Button)sender).Text;
                    // 現在地の座標を基準にグーグルマップ検索を行う
                    await Launcher.OpenAsync("geo:" + result + "?q=" + search_text);
                }
                catch
                {
                    // 位置情報権限が許可されていない場合
                    await DisplayAlert("確認", "位置情報をオンにしてください。", "OK");
                }

            }
        }
    }

}

動作内容

「銭湯」をタップすると..

グーグルマップの検索文字として扱われる。

参考

完成版はこちらです