-- Views
December 22, 25
スライド概要
Qt6アプリケーションでMapLibreを使う
MapLibreの由来 • Mapboxがオープンソース開発を停止した時に、それを フォークして独自進化を開始したのがMapLibre • Mapboxはカスタマイズ性の高い地図描画を武器に 地図サービスを展開している企業 • ソフトウェアの名前もMapbox • Mapboxのver.1はオープンソース開発されており、 Mapbox地図サーバへのアクセスに課金する方式 だった • 開発者ライセンスで、一定回数までは無償アクセスできた • Mapbox ver.2の開発を始める時点でオープンソース 開発と終了した • Mapboxは、カーナビゲーションなどの地図を利用し たサービスも行うようになっている
MapLibreとは • 自由なマッピングライブラリの開発と提供を目的とした プロジェクト • LFのプロジェクト同様に組織化されており、運営委員 会がある • 地図の描画エンジンだけでなく、地図データの配信 サーバ(タイルサーバ)等の開発も行っている • LibreOfficeと同じLibreなので関係があるか LibreOfficeの榎さんに聞いてみたが、自由という意味 のLibreを使っているだけで、関係はないらしい
MapLibreで何をしたかったのか? • 某コミュニティのリファレンスアプリケーションで、Mapbox を使ったカーナビゲーションぽいものを作っていた • 開発にはQtをしており、地図表示にはQt Locationの Mapboxプラグインを利用していた • Qt5からQt6になったときに、Mapboxのサポートがなく なった • 某コミュニティがQt5.15をしばらく使い続けた関係で 気づいていなかった • Qt6でもOSMプラグインが残っていたので使っていたが、 見た目がいまいち • 見た目の良いMapLibreに移行したくなった Mapboxのナビっぽいもの
MapLibre移行 • MapLibreのどのコンポーネントを使う か? • Maplibreのorgには54リポジトリが登録され ている • JavaScript向けのmaplibre-gl-js等さまざま なバリエーションがある • 元のカーナビゲーションぽいものがQt(QML) で書かれているので、それにあわせたい • 調査の結果、maplibre-native-qtを使う ことに決定
MapLibre移行 • Yocto(5.0)+Qt6.7.3でmaplibre-native- qtのビルドにチャレンジ • ビルドエラー発生し、コンパイルオプション変更 https://github.com/AGLExport/metamaplibre/blob/dev-v1/dynamic-layers/metaqt6/recipes-maplibre/maplibre-nativeqt/maplibre-native-qt_4.0.bb で対処 • ビルドはできたものの、ファイルのインストールパ スが/qmlや/pluginになってしまう問題が発生 • 原因はわかったのでissueを投げたもののなかなかな おらず • 一年経過…. • OSS仲間(Qtチョットデキル)がMapLibreにチャレンジし 始めたので、改めてトライし対応完了 • Qt Baseでsqliteやnetwork機能が無効になっていて、最初 動かなかった問題はあった… https://github.com/maplibre/maplibrenative-qt/issues/179
MapLibre移行 • Qt6用のmaplibre-native-qtは地図描画機能を提供している 地図データのダウンロード先はstyleで設定 • 地図の見た目の設定(スタイル)とダウンロードサーバを探さないといけ ない • • 日本のOpenStreetMapコミュニティがサーバを提供しいたので 使わせてもらうことにした
MapLibre移行 • QtのLocationプラグインはよくでき ているので、ちょい変更で切り替え できた • 基本これだけ • プラグインのインスタンス名を変えたの で、あと1行変更がある
Maplibre移行 • どうなったのか、現物は会場で!!!
まとめ • Qt6のアプリケーションで地図を表示するためのライブラリとして、 MapLibreにトライした • Qt6用のMapLibre実装maplibre-native-qtをインテグに成功 • 1年前にバグレポート投げたけど直してもらえてなかった不具合は、Qtチョットデ キル人がPR投げてくれた • 地図サーバはopenstreetmap.jpが提供しているものを利用 • アプリのQMLはプラグイン差し替えで良いのでちょい変で対応完了 • 今回はスタイルはopenstreetmap.jpのものをそのまま使ったので、この カスタマイズが今後の課題