Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MAUIでMapの表示

 MAUIでMapの表示

2024/06/22(土)に開催された .NETラボ 勉強会 2024年6月( https://dotnetlab.connpass.com/event/320403/) に参加した時に当日受付LTで発表した資料です。 #dotnetlab #azuremaps

なかしょ

June 25, 2024
Tweet

More Decks by なかしょ

Other Decks in Technology

Transcript

  1. 自己紹介 • なかしょ(中島進也) @nakasho_dev • 所属:NTTテクノクロス株式会社 デジタルトランスフォーメーション事業部 • 業務:MaaS関連のスマートフォンアプリ開発担当 •

    趣味: ➢妻とモンハンデート ➢IT関連の勉強会(主にモバイル系 or アジャイル系) ➢技術コミュニティの運営スタッフ ✓eXtreme Programming Japan User Group(XPJUG) 2019〜 ✓TDD BootCamp Online (TDDBC) 2020~ ※本資料は私個人の意見であり、所属企業・部門見解を代表するものではありません。
  2. MAUIでの地図表示 4 • Maui Maps(Maui 公式の地図機能) ➢https://learn.microsoft.com/ja-jp/dotnet/maui/user-interface/controls/map • ArcGIS Maps

    SDK for .NET ➢https://www.esrij.com/products/arcgis-maps-sdk-for-dotnet/ • ThinkGeo Mobile Maps ➢https://thinkgeo.com/mobile-maps • Ignite UI for Blazor Map ➢https://jp.infragistics.com/products/ignite-ui- blazor/blazor/components/geo-map • Mapbox SDK for .NET MAUI ➢https://github.com/tuyen-vuduc/mapbox-maui • MapsUI ➢https://github.com/Mapsui/Mapsui
  3. Mapsui 5 • 様々な.NETのフレームワークに対応したMapコンポーネント ➢MAUI, WPF, Avalonia, Uno, Blazor, WinUI,

    Eto, .NET Android and .NET iOS • OpenStreeetMapの表示に対応 • SkiaSharpにより地図描画を実現 • NetTopologySuiteによる2次元線形ジオメトリをサポート • BruTileによるタイルサービスへのアクセスをサポート
  4. QuickStart で OpenStreetMapを表示 6 public MainPage() { InitializeComponent(); var mapControl

    = new Mapsui.UI.Maui.MapControl(); mapControl.Map?.Layers.Add( Mapsui.Tiling.OpenStreetMap.CreateTileLayer()); Content = mapControl; }
  5. 7

  6. 10 Azure Maps にもタイル取得のAPIはある https://atlas.microsoft.com/map/tile?api-version=2022-08- 01&tilesetId={tilesetId}&zoom={zoom}&x={x}&y={y} { "version": 8, "name":

    "Azure Maps Style", "sources": { "azure-maps": { "type": "raster", "tiles": [ "https://atlas.microsoft.com/map/tile?subscription-key=SecretKey&api-version=2022-08-01&tilesetId=microsoft.base.hybrid.road&zoom={z}&x={x}&y={y}" ], "tileSize": 256 } }, "layers": [ { "id": "azure-maps-layer", "type": "raster", "source": "azure-maps", "minzoom": 0, "maxzoom": 22 } ] } 再掲
  7. internal static class AzureMap { public static IPersistentCache<byte[]>? DefaultCache; public

    static TileLayer CreateTileLayer(string? userAgent = null) { userAgent ??= $"user-agent-of- {Path.GetFileNameWithoutExtension(System.AppDomain.CurrentDomain.FriendlyName)}"; return new TileLayer(CreateTileSource(userAgent)) { Name = "AzureMaps" }; } private static HttpTileSource CreateTileSource(string userAgent) { return new HttpTileSource(new GlobalSphericalMercator(), "https://atlas.microsoft.com/map/tile?subscription-key=xxxxx&api-version=2022-08- 01&tilesetId=microsoft.base.road&zoom={z}&x={x}&y={y}", name: "AzureMaps",userAgent: userAgent, persistentCache: DefaultCache); } }