QtLocation の OpenStreetMap プロバイダーの提供について

Published Wednesday April 5th, 2017
Leave a comment
Posted in Qt | Tags: ,

この記事は The Qt BlogProvisioning OpenStreetMap providers in QtLocation を翻訳したものです。
執筆: Paolo Angelelli, 2017年3月9日

背景

この記事は Qt 5.6.2 の QtLocationOpenStreetMap プラグインに対して行った振る舞いに関わる変更を明らかにするためのものです。これらの変更には紛らわしい側面もあったため、改めて説明したいとおもいます。

この OSM プラグインにはタイル用のサーバーの URL がハードコードされていて、その中に含まれる様々なタイプの地図が利用できるようになっていました。利用頻度の高いメインの(道路)地図と衛星地図のタイルは元々はは open.mapquest.com から取得していました。2016年7月に、MapQuest がこのサービスを 廃止した ため、世の中の Qt 5.6.1 以前と 5.7.0 の QtLocation の OSM プラグインを利用した地図は、以下のような MapQuest のウェブサイトとサービスの購入のお知らせのタイルが表示されるようになってしまいました。

MapQuest ceasing open access

Qt 5.6.2 未満の MapViewer がひどい見た目に

解決方法

また同じような状況に陥らないように、ワンクッション挟むようにこの問題を修正することにしました。OSM プラグインを地図のタイプのためのプロバイダーの定義ファイルを maps-redirect.qt.io から取得するように変更しました。このファイルの形式は一般的に用いられる形式(TileJSON など)にかなり近いもので、Qt 用に特別な拡張をしています。具体的なフォーマットについては こちらのファイル(の195行目あたり)に記載がされています。これにより地図のタイプに応じたタイルのソースの変更が可能になり、もし同じような対応が必要になっても、Qt のアップデートやアプリケーションのビルドをしなおす必要がなくなりました。

これらのプロバイダーはサーバー側で Enabled プロパティを false に設定することで一時的に無効化することもできるようになっています。前述のようにあるサービスが本物以外のタイルを提供したりその代替が見つからない際に利用するかもしれません。このプラグインにはネットワーク的に繋がらない場合に備えてバックアップ用の情報がハードコードされています。

残念ながら現時点では良い解像度の衛星画像をオープンに提供しているサービスが見つけられていません。このため、OSM プラグインは最初は(衛星画像も含めた)7つのタイプの地図を提供していますが、ネットワーク経由でプロバイダーの定義ファイルを取得しパースする処理が完了した後は6つに減ります。

以下のスクリーンショットで違いを確認してください。

Mapviewer before and after resolution

MapViewer アプリの MapType メニューのプロバイダー情報の取得前後の違いを表示しています。

このアプローチで今回直面した問題は解決できましたが、これが必ずしも望ましい解決方法ではない場合もありえるでしょう。そういった場合に備えて、これを無効化する方法を二つ用意してあります。1つ目はプラグインの osm.mapping.providersrepository.disabled パラメーターを true に設定することです。これにより、プラグインはネットワーク経由でプロバイダーの情報を取得せずに、ハードコードされた情報のみを利用します。この手法だけでは当初の問題が解決できないため、もう一つのパラメーターを用意しました。osm.mapping.providersrepository.address はデフォルトの URL、5.6.2 と 5.7.1 向けの http://maps-redirect.qt.io/osm/5.6/と 5.8.0 以降向けの http://maps-redirect.qt.io/osm/5.8/ を上書きするためのパラメーターです。street, satellite, cycle, transit, night-transit, terrain, hiking に対応するプロバイダーの定義がかかれているファイルを用意し、参照する URL に書き換えることが可能です。URL を file:///qrc:/ にすることでローカルのファイルの使用も可能になるので、定義ファイルをアプリケーションにバンドルして配布することも可能になっています。

最後に、この方法でも100%はフェイルセーフではないことを心に留めておいてください。地図サービスは The Qt Company とは契約関係にないサードバーティによって提供されているものです。もっと確かな方法が必要な場合は様々なプラグインの中から我々がサポートが可能な商用サービス向けのプラグインを検討してみてください。

Do you like this? Share it
Share on LinkedInGoogle+Share on FacebookTweet about this on Twitter

Posted in Qt | Tags: ,

Leave a Reply

Your email address will not be published.

Get started today with Qt Download now