2022年冬、野外調査アプリが群雄割拠しています。DXの掛け声のもと、仕事で使う野外調査アプリを探していた私は、四角い車輪を再発明したのでした。
これはFOSS4G Advent Calendar 2022の記事です。
野外調査の必須アイテムと言えば、紙の野帳と図面、GPS、デジカメでした。スマホの普及とともに、数々の野外調査アプリがそれに取って代わろうと、しのぎを削っています。アプリの使い勝手は一長一短、淘汰されるものもあるでしょうが、多様性があることは健全です。
Mergin Maps Input
- github: https://github.com/MerginMaps/input
- ドキュメント: https://merginmaps.com/docs/
- 開発フレームワーク: Qt(C++、QML)
QField
- github: https://github.com/opengisch/qfield
- ドキュメント: https://qfield.org/docs/ja/
- 開発フレームワーク: Qt(C++、QML)
SMASH
- github: https://github.com/geopaparazzi/smash
- ドキュメント: https://www.geopaparazzi.org/smash/
- 開発フレームワーク: Flutter(Dart)
FOSS4GのAdventCalendarなので、オープンソースのものをピックアップしました。どのアプリも現在進行形で開発が進んでいます。
注目ポイントは、利用している開発フレームワークです。Mergin Maps Input とQFieldは「Qt」、SMASHは「Flutter」です。採用しているフレームワークでどれぐらい開発効率やアプリのパフォーマンスが違うのか気になるところです。
DXの掛け声のもと、野外調査アプリの導入を検討していたつもりが...
突然ですが、既存のものを自前で作り直すことを車輪の再発明と言います。さらに作ったものが役に立たない場合は、四角い車輪と揶揄されます。
これだけ野外調査アプリがある中、素人が似たようなものを作るのは、四角い車輪の再発明に他ならないかもしれません。
でも、まあいいか、スペアタイヤのつもりで自前の野外調査アプリを作ってみました。名前は「EcorisMap」です。React Native Mapsを利用していて、アプリもオープンソースです。
EcorisMap
- ホームページ: https://ecoris-map.web.app
- github: https://github.com/ecorismap/ecorismap
- ドキュメント: https://ecoris-map.web.app/manual_ja.html
- 開発フレームワーク: React Native(TypeScript)
まずは、アプリをインストールしましょう。iOS、Android、Web版があります。
操作は直感で分かるように、それっぽいアイコンになっています。直感で分かると言っておきながらボタンの説明をします。上から、ヘディングアップ切り替え、ズーム、GPS、下にいって左から、地図選択、トラックログの記録、レイヤ表示、データ追加、各種設定になってます。
データをインポートして確認する方法を説明します。
1.レイヤ表示ボタンを押して、2.レイヤ一覧の画面になったら、3.左下のデータ読み込みボタンを押して、4.スマホに保存されているGeoJSONやGPXのデータを指定するとインポートできるので、5.レイヤ一覧からレイヤを選択したあと、6.データ一覧からデータを選択して、7.左下の飛行機ボタンを押すとデータの場所にジャンプするので、8.読み込んだデータを確認します。
言葉だと上手く言えないけど思いは伝えました。色とかラベルも設定できます。
現地が圏外の場合は、ネット環境がある場所で事前に地図をダウンロードしておきます。地図選択画面でダウンロードボタンを押して、必要な範囲を選択してダウンロードします。
地図は自前のタイル地図も登録できます。例えばドローンから作成したオルソ画像をQGISでタイル地図にして、それをGitHubにあげてURLを登録すると読み込めます。
現地ではGPSをオンにして目的地にでかけます。素敵なお花を見つけたら現在地にポイントを落とします。お花の写真を上手に撮ったら、その名前と写真を入力します。入力したい項目は、レイヤの設定で変更できます。トラックをオンにしておけば、花の種をこぼして帰らなくても歩いた軌跡を残せます。
エクスポートしたいデータを選択して、エクスポートボタンを押すとzipファイルが作成されます。スマホ内に保存したり、Google Driveに保存したり、Slackで飛ばしたりすると便利です。でもGmailはzipファイルをブロックするから使えません。
必要な操作はスマホで全部できますが、データの準備はパソコンからWeb版を利用すると簡単です。Web版で、調査に必要なデータをインポートして、色やラベルを設定しておきます。設定画面で「データをファイルに保存」とすると拡張子ecorismapの設定ファイルを書き出します(中身はデータと設定をzipで保存したもの)。このecorismapファイルをスマホに送って設定画面から「データファイルを読み込み」とすると、そっくりそのまま開きます。あら便利。
Web版のセキュリティが気になるかもしれませんが、データはすべてブラウザ側だけで処理してます。サーバーにデータを送ってません。でも、今後はクラウド対応も考えてたり。
React Native
EcorisMapの開発に利用しているフレームワークは、React Nativeです。React Nativeは、Meta(旧Facebook)とコミュニティによって開発されているモバイル用のフレームワークで、ReactでネイティブコードをラップすることでTypeScript(JavaScript)でAndroidとiOSのアプリ開発ができます。最近は、Flutterに人気が押されがちでMetaさんも元気がないので、ちょっと心配です。ソースコードは、基本的にはTypeScriptなので、JavaScriptになじみがあれば、始めやすいかも(?)
React Native Maps
GoogleのMaps SDK for Android ・iOSと、AppleのMapKitをラップしてReact Nativeで使えるようにしたライブラリです。EcorisMapでは、MapKitは使わずに、Android版、iOS版ともにMaps SDKでGoogle Mapsの地図を利用しています。モバイル用だとGoogle Mapsの地図データや衛星データを無課金で利用できるのでありがたいです。
EcorisMapのWeb版
Web版は、React Native for Webを利用してスマホ用のコードからWeb版を生成しています。もともとWebの技術であったReactをNativeに適用して、それをまたWebに戻すという加工貿易的なイメージ?の技術です。ただ、Web版はスマホ版と少しコードが違う部分があって、地図ライブラリにMapLibreを使っています。その関係で、デフォルトの地図はGoogle Mapsではなく、MapTilerの地図と地形データを読み込んでいます。そのためMapTilerの無料枠を超えると地図が表示されなくなるかもしれません...という意味で現在Web版はお試し中です。MapLibreも3Dの地形表示ができるようになったのでコミュニティーに感謝です。(MapBoxも嫌いじゃないよ)
国際化
一応、国際化してあります。現時点では、日本語と(つたない)英語です。世界中のみんなが使ってくれる妄想を抱きながら作業しました。現時点のダウンロード数は36人です(笑
今後やりたいことをリストアップしてみました。
地図データはネット経由のタイルの読み込みだけ対応してるので、ローカルで持っているGeoTIFFとかMBTilesとかGeoPDFを読み込めるようにできたら便利かなーと思ってます。
ラインの編集は今も一応できますが、いまいちです。お絵描きアプリみたいに、さら、さら、さらーと描けるようにしたいです。ポリゴンにも対応したいです。できることならトポロジーも考慮して。
Firebaseを利用したクラウド対応は、社内用のテストアプリでは実装済みで、すでに利用しています。でも、みんなが使うサービスとして公開するにはセキュリティの面でハードルが高いなーと怖気付いてます。
当然のことながら仕事で扱う位置情報は、漏洩したらタダじゃ済まないものばかりです。アプリとFirebase間をEnd to Endで暗号できるVirgil SecurityのE3Kitを導入してますが、利用人数増えたらお安くないし、暗号化するとアプリの輸出制限に引っかかって、アプリを公開するには色々と手続きが必要になり大変そうです。
Mergin MapsやQFieldはクラウドサービスもありますが、そのあたりどう考えてるのか気になります(利用者側も)。クラウドのサーバー側もオープンソースで公開してるので、気になる人は自分でサーバー立ててねってことですかね。
課金ねぇ......先立つものは必要ですよね.....
スマホを出して現在地を確認するのは面倒なので、スマートウォッチで確認できるようにしたいです。スマートウォッチは持ってません。
サンタさんにお願いするスマートウォッチの画像を張っておきます。
最後になりましたが、バグは色々あると思いますので、不具合、ご要望があれば以下に書き込むなり、Pull Requestを送るなり、よろしくお願い致します。
我が家のクリスマスケーキ