Xamarin.Forms で色々な地図を表示する

4228
0
07-30-2017 05:56 PM
Labels (1)

Xamarin.Forms で色々な地図を表示する

前回の記事では Xamarin.Forms ArcGIS Runtime SDK for .NET を使用して背景地図の種類を切り替えるロジックを紹介しました。背景地図は Esri のクラウド GISArcGIS Online」のベースマップ サービスを利用しました。

今回は、ArcGIS 以外の地図配信サービスを利用して「地理院地図、OpenStreetMapBing Maps、日本シームレス地質図」などの地図を切り替えるアプリについてご紹介します。

地図配信サービス

 

今回利用した各地図配信サービスは以下の通りです。

 

地理院地図地理院地図とは、地形図、写真、標高、地形分類、災害情報など、国土地理院が捉えた日本の国土の様子を発信するウェブ地図です。地形図や地形分類、標高などの種類が扱えるため多くの用途で利用されています。

引用元:地理院ホーム「地理院地図 ヘルプ」

 

OpenStreetMapOpenStreetMapOSM)は、道路地図などの地理情報データを誰でも利用できるよう、フリーの地理情報データを作成することを目的としたプロジェクトで、ここで作成された地図を利用することができます。

引用元:OpenStreetMap Japan 自由な地図をみんなの手で

 

Bing MapsBing Maps (ビング マップ) は、マイクロソフトが提供する地図サービスで、世界各地の都市の詳細な地図を参照することができます。

引用元:Bing Maps「Wikipedia

 

日本シームレス地質図20万分の1日本シームレス地質図は、これまで出版されてきた地質図幅の図郭における境界線の不連続を日本全国統一の凡例を用いることによって解消した新しい地質図です。

引用元:20万分の1日本シームレス地質図

Xamarin での地図の表示

 

次の画面は、iOS Android で背景地図を選択している画面です。Xamarin.Forms.API を使用することで、「背景地図を切り替える」という同じ機能が提供できる地図アプリを iOS Android で開発することができます。

アプリのイメージ(iOS / Android

   

サンプルコード

 

以下のコードは、地図を切り替えるロジック部分(C#) のサンプルコードです。XAML に関しては前回の記事を参照してください。今回は C# 部分、つまり地図を切り替えるロジック部分が前回と異なっています。前回は Basemap クラスを中心に使用しましたが、今回は他のクラスも使用しています。

地理院地図は、WebTiledLayer クラスを使用しました。WebTiledLayer クラスでは Web 地図 API が対応している XYZ 方式で提供している地図を扱うことができます(地理院地図は地理院タイルとして XYZ 方式で提供しています)。

 

OpenStreetMap は、 Basemapクラスを使用することで表示が可能です。

 

Bing Maps は、BingMapsLayer クラスを使用することで扱うことができます。Bing Map の地図サービスを利用するためには、BingMapsKey と呼ばれる Bing Maps を扱うための Key を取得する必要があります。BingMapsKey は、こちらの Bing maps Dev Center のサイトから取得することができます。

 

日本シームレス地質図は、WmtsService クラスを使用しました。WMTSWeb Map Tile Service)とは Web 経由で地図画像を提供する仕組みで、Open Geospatial Consortium(OGC:地理情報システム関連技術の標準化を推進する非営利団体が定めている国際規格の1つです。ですので、日本シームレス地質図以外にも WMTSで提供している地図であれば WmtsService クラスを使用することで扱うことが可能です。

C#

private async void OnChangeBasemapButtonClicked(object sender, EventArgs e) 
{
     var selectedBasemap = await DisplayActionSheet("背景地図の選択", "キャンセル", null, titles);
     if (selectedBasemap == "Cancel")
     {
             return;
     }
     else if (selectedBasemap == "地理院地図")
     {
          var templateUri = "https://cyberjapandata.gsi.go.jp/xyz/std/{level}/{col}/{row}.png";
          var webTiledLayer = new WebTiledLayer(templateUri);
          await webTiledLayer.LoadAsync();
          if (webTiledLayer.LoadStatus == Esri.ArcGISRuntime.LoadStatus.Loaded)
          {
               MyMapView.Map.Basemap = new Basemap(webTiledLayer);
               var attribution = @"<a href=""http://maps.gsi.go.jp/development/ichiran.html"" target=""_blank"">地理院タイル</a>";
               webTiledLayer.Attribution = attribution;
          }
     }
     else if (selectedBasemap == "OpenStreetMap")
     {
          MyMapView.Map.Basemap = Basemap.CreateOpenStreetMap();
     }
     else if (selectedBasemap == "Bing Maps")
     {
          var bingKey = "AtuE9JPKhNEUj037BMaockdj546C6UQLdK_5cv59kCxOjJoGXteSxqysRWZseWlM";
          var bingMapLayer = new BingMapsLayer(bingKey, BingMapsLayerStyle.Road);
          MyMapView.Map.Basemap = new Basemap(bingMapLayer);
     }
     else if (selectedBasemap == "日本シームレス地質図")
     {
          var WmtsUrl = new System.Uri("https://gbank.gsj.jp/seamless/tilemap/basic/WMTSCapabilities.xml");
          WmtsService wmtsService = new WmtsService(WmtsUrl);
          await wmtsService.LoadAsync();
          if (wmtsService.LoadStatus == Esri.ArcGISRuntime.LoadStatus.Loaded)
          {
               WmtsServiceInfo wmtsServiceInfo = wmtsService.ServiceInfo;
               IReadOnlyList<WmtsLayerInfo> layerInfos = wmtsServiceInfo.LayerInfos;
               WmtsLayer wmtsLayer = new WmtsLayer(layerInfos[0]);
               MyMapView.Map.Basemap = new Basemap(wmtsLayer);
          }
     }
}
‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

最後に

 

今回は ArcGIS Online が提供しているサービス以外の背景地図(地理院地図、OSMBing Maps、日本シームレス地質図)を地図アプリで利用する方法を紹介しましたが、ArcGIS Runtime SDK for .NET では他にも多くの機能が備わっています。今後、3D 表示やデータの分析・解析などについても紹介していきたいと思います。

 

今回作成したサンプルアプリケーションは、ESRIジャパンの GitHub にも公開していますので、ぜひ、触ってみてください!

GitHub - EsriJapan/arcgis-samples-dotnet: ArcGIS Runtime SDK for .NET のサンプル集 

 

関連リンク

Labels (1)
Version history
Last update:
‎12-12-2021 03:47 AM
Updated by: