ぴーさんログ

だいたいXamarin.Formsのブログ

Xamarin.Forms向けのMap機能拡張ライブラリを作ってます

https://github.com/P3PPP/MapExtensions

コンセプトはXamarin.Forms 2.1.0で追加されたEffectsを利用して、Mapコントロールを継承することなく機能を追加するというもの。 つまり、従来のカスタムMapにも適用可能。

NuGetにもすでに上がってます。

https://nuget.org/packages/Xam.MapExtensions.Forms.Plugin/

現状は地図のクリックイベントをハンドルする機能が使えます。(iOSAndroid、UWPに対応)

var map = new Xamarin.Forms.Maps.Map();
var clickBehavior = new MapExtensions.Forms.Plugin.ClickBehavior();
map.Behaviors.Add(clickBehavior);

var page = new ContentPage
{
    Content = map,
};

clickBehavior.MapClicked += (s, e) =>
    page.DisplayAlert("MapClickd", $"{e.Position.Latitude}, {e.Position.Longitude}", "OK");

clickBehavior.MapLongClicked += (s, e) =>
    page.DisplayAlert("MapLongClicked", $"{e.Position.Latitude}, {e.Position.Longitude}", "OK");

clickBehavior.MapClidkedCommand = new Command<MapExtensions.Forms.Plugin.MapClickedEventArgs>(e =>
    page.DisplayAlert("MapClickdCommand", $"{e.Position.Latitude}, {e.Position.Longitude}", "OK"));

clickBehavior.MapLongClidkedCommand = new Command<MapExtensions.Forms.Plugin.MapClickedEventArgs>(e =>
    page.DisplayAlert("MapLongClickedCommand", $"{e.Position.Latitude}, {e.Position.Longitude}", "OK"));

使い方:

  • Xamarin.Forms.Maps.MapMapExtensions.Forms.Plugin.ClickBehavior を追加。
  • ClickBehavior 経由でクリックイベントをハンドルします。
  • MapClickedEventArgs にクリックした地図上の座標が入っているのでよしなに(ピンを立てたり)。

次は座標のコレクションを渡したらPolylineをオーバーレイしてくれるような機能を追加する予定。

(まだ機能とかちゃんと煮詰めてないのにうっかりver. 1.0でリリースしちゃったよ...)