この記事は [OpenStreetMap Advent Calendar 2019] (https://qiita.com/advent-calendar/2019/osmjp) 4日目に参加しています。
#はじめに
OpenStreetMapのマッピングしてて、チェーン店のタグいちいち入れるのは結構大変。
JOSMにはTsuhiさん作のJA:Naming Sampleというありがたいプリセット(よく使うタグのセット)が用意されてるけど、全国のチェーン店が盛りだくさんで北海道のマッピングで使う店は限られてたり、もうちょっと細かい情報を入れたいなあということがあったりします。
そこでごうだまりぽさん作のJOSMプラグイン、EasyPresets。
JOSMのプリセットは自分でもXMLこつこつ書いて作れるけどなかなか大変なので、それをGUIでぽちぽちっと作ってしまおうという素晴らしいツールです。
インストールは 設定→プラグイン
から数クリックでできるよ!(雑な説明)
詳しい使い方は作者さんのReadmeを読んでね!
#セイコマプリセット作るべ
##プリセット作成画面へ
とあるセイコーマートに一通りの情報を入れてアップロード済です。
ご存じない方に説明すると、セイコーマートとはほとんど北海道内にしか店舗がないけど道内は離島まで網羅しているという、北海道最強のコンビニチェーンです。
この元となるセイコーマートを選択した状態で、 プリセット→プリセットを作成する
をクリック。
「選択中のオブジェクトに含まれるタグを元にしてカスタムプリセットを作成・編集します」とのポップアップが出てますね。
元となるセイコーマートのタグを全て引用した状態で、プリセット編集ウィンドウが出てきます。
ここから自分が入力しやすいように編集していきます。
##プリセットの属性設定
###プリセットの名前
作成中のプリセットの名称です。
自分用カスタムプリセットだから自分がわかりやすければいいので、普通に「セイコーマート」とします。
略したければ「セコマ」でも「セイコマ」でもお好きなように。(道東民の筆者はセイコマ派)
###アイコンを選択
既存プリセットのアイコンから選ぶ画面が出てくるので、JOSMでコンビニに使われている買い物かごのアイコンを選択しておきます。
アイコン本体ファイルが格納されているフォルダを見つけてそこにセイコーマートのロゴマークをSVG形式で保存すれば、自分のPC上限定でセイコマのロゴが使えそうな気もするけど、どうなんでしょうね。
###適用対象
OSMオブジェクトの種類、ノード、ウェイ、エリア、リレーション、マルチポリゴンのどれにこのプリセットを適用させるかの設定です。
北海道(の田舎)ではコンビニは独立した店舗になっていることが多いので、建物自体にコンビニのタグ付けをするため、 閉じたウェイ(=エリア)
をチェックします。
建物が中庭付きだったりする可能性もないとは言えないので、一応 マルチポリゴン
もチェックしておきます。
テナントとしてビルの一部分にコンビニがある場合も想定して、 ノード
もチェックし、ノードに対してもこのプリセットが使えるようにしておきます。
道路や柵にコンビニのタグを使うことはありえないので、 ウェイ
は選びません。
マルチポリゴン以外のリレーションにコンビニのタグを使うことも考えにくいので、 リレーション
も選択から外します。
既存ウェイを選択した状態でウェイが対象になっていないプリセットを使おうとすると、「プリセット xxx は適切ではないため適用できません。」というエラー表示が出るようになっています。
###参考URL
プリセットにおける 参考URL
は、完成したプリセットにおいて この地物・機能の詳細情報
として出てくるリンク先になるので、OSM Wikiのコンビニのページを入力します。
セイコマの公式サイトについては後述。
##タグの編集
プリセット作成ボタンをクリックした直後は、元オブジェクトのタグがキー(タグ名称)のabc順に並び、全て 固定値
が選択された状態で表示されているので、1個ずつ編集しつつ右側の↑↓ボタンで自分が使いやすいように順番を入れ替えます。
###固定値
コンビニを定義する shop=convenience
、セイコーマートの名称やウェブサイトは全店舗に共通情報を入れたい項目なので、固定値とします。
このプリセットを適用しても詳細入力画面にこれらのタグは出てきませんが、きちんと入力されます。
セイコーマートの公式ウェブサイトは、ここで website
タグを使って入力します。
name:en
(英語名称)、 name:ja-Hira
(ひらがな表記)、 name:ja-Latn
(ローマ字表記)を都度入れるのに手間がかかるので、ここを定型化することでスムーズなマッピングを狙っています。
###テキストボックス
店舗名(例:北見すえひろ店)、住所など、自由入力したいタグはテキストボックスとします。
ここに予め入力しておいた文字列が既定として表示されることを期待しているのですが、うまく表示されない(空白で出てくる)原因は調べていません。
私はほぼ北海道のマッピングしかしていないので、都道府県名は既定で「北海道」と出てきて、道外の場合だけ手打ちで修正するという挙動にしたいのですが。
###選択
セイコーマートは全てが24時間営業ではなく、早朝から深夜までという店舗が結構あります。
24時間を原則とするセブンやローソンでも、病院内店舗やオフィスビル内店舗などは24時間ではないところがありそうですね。
ここは24時間年中無休を意味する 24/7
と、夜間閉店する場合の営業時間の例として 06:00-24:00
の2つを選択する方式にしました。
もっと田舎に行けば07:00-22:00なんていう店舗もありそうですが、これは一旦06:00-24:00を選択した後に手動で修正できます。
wheelchair
(車椅子)はJOSMの標準で「はい、いいえ、制限」の3つから選択するようになっているので、カスタムプリセットでもこれにならって yes
no
limited
の3つの選択肢と空白を用意しておきます。
コンビニは、段差がなく売場内は車椅子で入れるけれどトイレが車椅子対応ではなかったり、段差がなくても入口が自動ドアではなく車椅子利用者でも自力で開けられるかどうかは個人差があったりするので、 limited
(制限)を選ぶことが多いかもしれません。
###チェックボックス
atm
は、あるかないかの二択です。
チェックボックスとすることで、チェックを入れれば yes
、一旦入れたチェックを外せば no
が入力されます。
プリセットを開いた時にこのチェックボックスに触らなければ、atm
タグは入力されません。
###使用しないタグのチェックを外す
元オブジェクトに入力されていたタグのうち、ソースと建物に関するものはこのカスタムプリセットでは不要です。
ソースはその時によって異なるし、エリア(建物全体)とノード(建物の中に置いた点)の両方にコンビニのタグ付けをすることが想定されるからです。
これらは左端の 使用
のチェックボックスを外しておくと、編集を保存した時に消えます。
##カスタムプリセットの完成
ここまでの変更を保存して、セイコーマートのカスタムプリセットが完成です。
(スクロールバーがおかしいのは、3枚の画像を貼り合わせたためです)
任意のノードまたはエリアを選択した状態でメニューバーの プリセット→カスタムプリセット
をクリックすると、今作成したプリセットが選択できます。
このセイコーマート店舗は最近移転オープンしたばかりなので、元あった建物が解体されたものを削除して、建物を描いたばかりです。
プリセットの入力ウィンドウはこんな感じになります。
編集時に固定値としたものは表示されていません。
このプリセットを適用できるオブジェクトの種類がアイコンで表示されていますが、その隣の+が3つのアイコンにポインタを置くと、固定値に設定したので隠れているタグが表示されます。
building
タグと source
タグを手入力するだけで、あっという間にこれだけのタグが入力できてしまいます。
これで北見中のセイコマ入力が捗りますね!(・∀・)
##プリセットの複製
私の活動範囲のコンビニといえば、セイコーマートとセブンイレブンとローソンの三択です。
札幌あたりに行けばファミリーマートも見かけますが、都会のマッピングは私がやらなくても誰かがやるだろうということで見なかったことにします。
カスタムプリセットの管理
で今作ったプリセットを必要数コピーします。
チェーン店のname値の実例を参照しながら、プリセット自体の名称と固定値としている各コンビニの名称やウェブサイトの項目を、セブンイレブンとローソンのものに書き換えて保存。
カスタムプリセットの一覧はJOSM自体を再起動しないと更新されませんが、これで私がマッピングする可能性のあるコンビニは全て網羅できました。
これで北見中の全コンビニのマッピングが捗りますね!(・∀・)
#さらに応用
##他業種も北海道カスタム
こんな感じで、金融機関、ドラッグストア、スーパーのプリセットも作りました。
例えばドラッグストアなら普通ATMはないけど、調剤薬局の機能の有無を表す dispensing=yes/no
を選択できるようにしています。
金融機関は各店舗が参照記号という3桁数字のコードを持っていて、通帳や公式サイトの店舗情報で確認できるので、 ref
に入力するようにしています。
##多国語名称やふりがな・ローマ字表記の入力
最近のマッピングでは、日本語名称しか入っていない既存地物への英語名称入力、住所情報の入力などを心がけています。
Androidのオフライン地図アプリOsmAnd上で、漢字が日本語読みではなく中国語読みされてしまうことに気付いて、ちょっと火がつきました。
非日本語圏の人に地域の地図がどのように見えてるのだろうと思ってOsmAndを英語に切り替えてみたら、英語名称を入力してない地物の漢字が全て中国語読みのアルファベットに変換されてやな感じになった。
— 北光社 (@Hokko_sha) 2018年12月7日
みんなname:en入力しようぜ。 #osmjp pic.twitter.com/hvbzdOMYZP
英語名称や住所情報を入力するためのプリセットも作成しました。
右上の青いピンをぽちっとすると、JOSMのツールバー上にピン留めされて、オブジェクトを選択した状態から1クリックで任意のプリセットの入力ウィンドウが開きます。(これはEasyPresetsではなくJOSM本体の機能)
一番右端のアイコンがこのプリセットを直接開けるボタンです。
道路名なども英語名称を追加していきたいので、このプリセットはノード・ウェイ・エリア全ての地物に適用できるようにしています。
主に既存のオブジェクトに名称や住所を追加したり、JOSM既定のプリセットから amenity
や shop
などの基本的なタグを入力しただけのオブジェクトに、更に詳しく名称等を追加するときに使っています。
アプリやサービスによっては日本語など2バイト文字が表示できない環境でローマ字表記を参照したり、音声出力するためにふりがなが必要だったりすることもあるようなので、ひらがな name:ja-Hira
とローマ字 name:ja-Latn
も入力するようにしています。
JOSM本体はまだ古いタグ name:ja_kana
name:ja_rm
に対応しているようで現在のタグが既定のプリセットからは参照できないので、カスタムプリセットで対応することでとても楽になりました。
毎回これらを手打ちで入れてた時は大変でした。
人によっては中国語やドイツ語の名称をたくさん入れなければならないこともあると思いますが、そんな時こそカスタムプリセット。
日本のマッピングでは基本的に name
と name:ja
は同一の文字列が入るので、コピペしやすいようにこの2つを並べています。
name:en
と name:ja-Latn
は同一になるか、長音の表記(ローマ字では ちゅうおう=Chūō
とマクロン付の母音を用いる)など一部を修正するだけで済むことが多いので、この2つも並べています。
##Wikipedia連携
OSMとWikipediaの連携について耳にすることが最近増えました。
Wikipediaに掲載されている地物をマッピングするときに wikipedia
タグの入力は以前から心がけていましたが、Wikipedia側でOSMのデータを利用して地物の位置やルート(道路や河川など)を表示するためには wikidata
タグも入っているとスムーズだと教えていただきました。(←詳しくわかってないです…(;´∀`)
Wikipediaの各項目ページ左側のメニューから「ウィキデータ項目」というリンクを開くと、その項目のwikidataの Qxxxxxxxx
(xは数字)というIDがわかるので、これを wikidata
タグに入力します。
コンビニなどの各店舗ごとにWikipediaへリンクする必要はないと思うので、各チェーン店のカスタムプリセットには入れていませんが、道路、特に道道などに wikipedia
wikidata
を入れるようにしているので、このカスタムプリセットに加えました。
##住所の入力
JA:Key:addr/日本の住所表記を参照して、建物などの住所を持っている地物にはできるだけ入力しています。
addr:city
とか addr:quarter
とか、住所入力用のタグは到底覚えきれないし、一旦入力してしまうとJOSMのタグウィンドウではタグ名のabc順にソートされてしまうのでわけがわからなくなります。
対象のオブジェクトを選択してこのプリセットを開くことで、都道府県名から順に地番・枝番までという日本流の並び順で見ることができるので、入力も修正も楽になります。
#エクスポート
EasyPresetsにはエクスポート機能があり、自分で作成したカスタムプリセットをXMLに書き出してバックアップしたり公開することができます。
2018年12月現在階層構造には対応していないとのことで、複数のカスタムプリセットをまとめて出力するとずらーっと並んでしまうため、JOSM既定プリセットのようにカスタムプリセットを階層化したい場合は自力でXMLファイルを編集する必要があるようです。
北海道カスタム→コンビニ→セイコーマート みたいに選択できると楽ですよね。
もっと高度なことをしたいぜ!という人は、基本となるプリセットをEasyPresetsで作成しエクスポートしてから
JOSM Wiki/Tagging Presets(英語)
LearnOSM/JOSM/独自プリセットの作成
などを参照してぽちぽちとXMLを編集し、改めて新規プリセットとして読み込みましょう。
##セイコーマート
例にあげたセイコーマートのプリセットをエクスポートするとこのようになります。
このコードをテキストエディタにコピペして .xml
の拡張子で保存し、JOSMのプリセット設定画面からインポートすることもできます。
(セイコーマートなんで道外の方にはほぼ需要はないと思いますが、自分用のカスタムプリセットを作成する際のテンプレにはなるかも…)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<presets xmlns="http://josm.openstreetmap.de/tagging-preset-1.0" author="" description="" shortdescription="" version="">
<!--
このファイルはプラグイン "EasyPresets" によって生成されました。
https://github.com/maripo/JOSM_easypresets/blob/master/README.md
サポートされているのはごく一部のタグです。
他のユーザとプリセットを共有することを検討されている場合、公式のドキュメントも参考にしてください。
* https://josm.openstreetmap.de/wiki/TaggingPresets
* https://wiki.openstreetmap.org/wiki/Customising_JOSM_Presets
-->
<item icon="presets/shop/convenience.svg" name="セイコーマート" type="node,closedway,multipolygon">
<label text="セイコーマート"/>
<key key="name" value="セイコーマート"/>
<key key="name:en" value="Seicomart"/>
<key key="name:ja" value="セイコーマート"/>
<key key="name:ja-Hira" value="せいこーまーと"/>
<key key="name:ja-Latn" value="Seikōmāto"/>
<key key="brand" value="Seicomart"/>
<key key="shop" value="convenience"/>
<key key="website" value="https://www.seicomart.co.jp/"/>
<text default="" key="branch" text="店舗名"/>
<combo key="opening_hours" text="営業時間" values="06:00-24:00,24/7"/>
<text default="" key="addr:postcode" text="郵便番号"/>
<text default="北海道" key="addr:province" text="都道府県"/>
<text default="" key="addr:county" text="郡*"/>
<text default="" key="addr:city" text="市町村"/>
<text default="" key="addr:quarter" text="大字/町*"/>
<text default="" key="addr:neighbourhood" text="小字・丁目*"/>
<text default="" key="addr:block_number" text="番/番地*"/>
<text default="" key="addr:housenumber" text="枝番*"/>
<text default="+81" key="phone" text="電話番号(+81から)"/>
<check key="atm" text="ATM"/>
<combo key="wheelchair" text="車椅子" values="no,yes,limited"/>
<link href="https://wiki.openstreetmap.org/wiki/JA:Tag:shop%3Dconvenience"/>
</item>
</presets>
##多国語名称等
多国語名称・住所等のプリセットも公開しておきます。
項目や並び順の好みが分かれるところだと思いますが、参考になりましたら幸いです。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<presets xmlns="http://josm.openstreetmap.de/tagging-preset-1.0" author="" description="" shortdescription="" version="">
<!--
このファイルはプラグイン "EasyPresets" によって生成されました。
https://github.com/maripo/JOSM_easypresets/blob/master/README.md
サポートされているのはごく一部のタグです。
他のユーザとプリセットを共有することを検討されている場合、公式のドキュメントも参考にしてください。
* https://josm.openstreetmap.de/wiki/TaggingPresets
* https://wiki.openstreetmap.org/wiki/Customising_JOSM_Presets
-->
<item icon="presets/misc/name.svg" name="多国語名称・住所等入力用" type="node,way,relation,closedway,multipolygon">
<text default="" key="name" text="名前"/>
<text default="" key="name:ja" text="名前(日本語)"/>
<text default="" key="name:ja-Hira" text="ひらがな"/>
<text default="" key="name:en" text="名前(英語)"/>
<text default="" key="name:ja-Latn" text="ローマ字"/>
<text default="" key="website" text="Website"/>
<text default="" key="wikipedia" text="Wikipedia(ja:項目名)"/>
<text default="" key="wikidata" text="Wikidata(Qxxx)"/>
<combo key="opening_hours" text="営業時間" values="06:00-24:00,10:00-21:00,24/7,Mo-Fr 09:00-15:00,"/>
<combo key="wheelchair" text="車椅子" values="no,yes,limited,"/>
<text default="" key="addr:postcode" text="郵便番号"/>
<text default="" key="addr:province" text="都道府県"/>
<text default="" key="addr:county" text="郡*"/>
<text default="" key="addr:city" text="市町村"/>
<text default="" key="addr:quarter" text="大字"/>
<text default="" key="addr:neighbourhood" text="小字・丁目*"/>
<text default="" key="addr:block_number" text="番地/番*"/>
<text default="" key="addr:housenumber" text="枝番*"/>
<text default="" key="phone" text="電話番号(+81から)"/>
</item>
</presets>
#バックアップ
違うPCにJOSMをインストールして、カスタムプリセットもそのまま移行したい、さあどうする。
作成済みプリセットが使えればいいだけで編集不要なら、前項のエクスポートでいいのですが、移行先でまだ編集したい場合です。
JOSM 設定ディレクトリー (Windowsなら、
%APPDATA%/JOSM
、UnixやMacOS X なら~/.josm/plugins/
)
とありますが、私の環境(Ubuntu20.04LTS)では書かれている場所ではなく、~/.local/share/JOSM/plugins/
にありました。
このplugins
フォルダと並んでJOSM設定フォルダの直下にあるEasyPresets.xml
が作成済みカスタムプリセットの本体です。
移行先PCにJOSMとEasyPresetsプラグインをインストールした状態で、同じ場所にこのファイルをコピーすれば、プリセットの並び順やアイコンなど全て同じものが復元されます。
環境によりフォルダ構成は異なると思いますが、各自探してみてください。
#おわりに
すばらしいプラグインを作成・公開してくださった ごうだまりぽさんに改めて感謝申し上げます。