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/
現状は地図のクリックイベントをハンドルする機能が使えます。(iOS、Android、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.Map
にMapExtensions.Forms.Plugin.ClickBehavior
を追加。ClickBehavior
経由でクリックイベントをハンドルします。MapClickedEventArgs
にクリックした地図上の座標が入っているのでよしなに(ピンを立てたり)。
次は座標のコレクションを渡したらPolylineをオーバーレイしてくれるような機能を追加する予定。
(まだ機能とかちゃんと煮詰めてないのにうっかりver. 1.0でリリースしちゃったよ...)