「Dotspatial」を利用して、WMTSレイヤーを表示する
前回は、GISサーバー側でWMTSレイヤーを表示させましたが、今回はクライアントである「Dotspatial」からWMTSレイヤーを表示させます。
WMTSレイヤーを表示させるには、タイル表示用のライブラリ「BruTile」があるので「Dotspatial」に導入しておきます。
使用したソフトウェアは以下の通りです。
・Dotspatial2.0
・BruTile2.0
・DotSpatial.Plugins.BruTileLayer2.0
1.BruTileの導入
タイルレイヤーを自前で構築するのは難易度が高いので、タイル表示用のライブラリ「BruTile」を使用します。
「SharpMap」でも「BruTile」が使用されいるので、C#のGISライブラリではメジャーなようです。
あと、同ライブラリのプラグインも提供されているので、これもプロジェクトに入れておきます。
2.WMTSレイヤーの作成
「BruTile」では、WMTSレイヤーが提供されている のですが、前回構築した、GeoserverのWMTSレイヤーは表示されませんでした。
ちょっと変更が必要になります。タイル画像を取得する際の、GeoserverにアクセスするURLが想定外だったようでエラーが発生していました。なので、URLを変更してアクセスさせます。
ほとんどの内容は、GeoserverからのGetCapabilitiesからの情報でレイヤー情報を作成しますが、一部URLを変更します。
今回は手っ取り早く表示させるだけなので、DotSpatial.Plugins.BruTileLayerの内容を編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
var url = "http://g02-redmine:8080/geoserver/gwc/service/wmts?REQUEST=GetCapabilities"; var tileSources = WmtsLayerConfiguration.GetTileSources(new Uri(url)).ToList(); var tileSource = tileSources[4]; var tileSchema = (WmtsTileSchema)tileSource.Schema; var resourceUrls = new List() { new ResourceUrl() { Format = "image/png", ResourceType = URLTemplateTypeResourceType.tile, Template = "http://g02-redmine:8080/geoserver/gwc/service/wmts?layer=WS_37208%3AContour&style=&tilematrixset=EPSG%3A2446&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image%2Fpng&TileMatrix={TileMatrix}&TileCol={TileCol}&TileRow={TileRow}" } }; var wmtsRequest = new WmtsRequest(resourceUrls); var tileSource2 = new TileSource(new HttpTileProvider(wmtsRequest), tileSchema); var wconf = new WmtsLayerConfiguration(null, tileSource.Name, tileSource2); var layer = new BruTileLayer(conf); layer.LegendText = pname; layer.Reproject(this.App.Map.Projection); this.App.Map.Layers.Insert(0, layer); |
以下、表示したWMTSレイヤーイメージです。shapeの時は表示が遅かったのですが、背景描画が速くなりました。