プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

OpenStreetMap のタイルサーバー立ててみました

OpenStreetMap をテスト的に利用するなら、OpenStreetMap が提供するタイルサーバーを使うこともできます(こちらなどをご参考にしてください)。 ですが、アプリで利用したり、本格的に利用するにあたっては、タイルサーバーを自分で用意しないといけません。

JA:タイル利用規約 - OpenStreetMap Wiki

(原文はこちらかな)

Tile Usage Policy

というわけで、自宅に余っていたサーバーを使って、タイルサーバーをセットアップしてみたので、メモを残しておきます。

サーバーの準備

サーバーは自宅に余っていた Dell の T105 を使います。 これ、昔 ESXi 4 とかでVM動かしていたやつなんですが、最近、VM使うときは作業PC上のVirtualBox使うし、常時稼働していたVPNサーバーは、QNAP上のVMに移したので、しばらく使っていませんでした。

でも、160GBぐらいのHDDついてるし、メモリも8GBあるので、タイルサーバーのお試しにはいいかな、という感じです。スペック書いておきます。

  • Dell T105
  • CPU: Opteron 3182 (Quad Core)
  • メモリ: 8GB
  • HDD: 160GB (ハードウェアミラーリングあり)

Ubuntu のインストール

まず最初に、Ubuntuをインストールします。 実は、このPC、少しでも安く買おうとしたので、CD/DVDドライブがついていないんですよね。なので、USBメモリにISOイメージを焼いて、それから起動させてセットアップします。

USBメモリにISOイメージを焼くのには Rufus を使いました。

Rufus - Create bootable USB drives the easy way

ISO イメージは、手元にあった ubuntuサーバー (64bit版) の16.04.02 を使いました(作業のタイミングで 16.04.3 が出てましたけどダウンロードするのに時間がかかったのでやめました)。

Ubuntuのセットアップは、特に問題ないので省略します。USBメモリ指して、PCの電源入れて、画面の指示に従えばokです。 あと、セットアップ画面では、

  • standard utilities
  • Open SSH Server

のみを選択しました。

あとはお決まりの

sudo apt-get update
sudo apt-get upgrade

をしておきます。 この時点で、 16.04.3 になってました。

タイルサーバーのセットアップ

さて、OSのセットアップが終わったので、早速タイルサーバーのセットアップを始めます。

最初、こちらの記事に従って、インストールしようとしたのですが、16.04では、お手軽にインストールできないようです。 12.04での方法のようですね(14.04なら同じ方法でできたという記事もありました)。

[https://qiita.com/nyampire/items/13ed805ac3ccaff3baf9:embed:cite]

16.04でのタイルサーバーの構築をどうするんだろうか? と、調べてみると、そのものずばりの記事がありました。

[https://switch2osm.org/manually-building-a-tile-server-16-04-2-lts/:title]

ちなみに、ほぼ上記の記事通りの手順を日本語で説明してくれてる記事もありました。こちらも参考になりました。

[http://hinoshita.hatenadiary.com/entry/2017/08/18/065522:title]

今回は上記の記事(主に英文のほう)を参考にインストールします。

ちなみに、上記以外にもインストール例はありましたので、そちらも参考にされるといいかもしれません(今回は試してないですが)。 リンクだけ貼っておきます。

[http://www.keizoh.com/index.php/2016/08/22/openstreetmap-tile-server-1/:title]

インストール

さて、タイルサーバーのインストールとセットアップですが、上記の手順に従えば特に問題もなかったです。 一応、気になったポイントだけ書いておきます。

インストールした各種パッケージについて

上記の日本語のほうの記事では、セットアップの際、libpng12 の関係でパッケージリポジトリを追加したとありますが、今回試したときは特になにもしなくてもOKでした。 あと、postgresのバージョンも postgresql-9.5-postgis-2.2 のままとしました(警告メッセージ出てなかったような・・・私が気づいてないだけかな?)。

posgresql /potgis のインストール

手順通りにやれば問題なかったです。 日本語の説明記事では、データベースを作成する際の所有者(オーナー、 -O オプション)が既に作成されている前提で書かれていますが、英文の記事にあるようにこの時点ではまだ作成されていなくでも大丈夫でした。

今回は、 osm という名前にすることにしました。また、データベース名も英文記事で使っている gis としています。

mor@map:/etc$ sudo -u postgres -i
[sudo] mor のパスワード: 
postgres@map:~$ createuser osm
postgres@map:~$ createdb -E UTF8 -O osm gis
postgres@map:~$ psql
psql (9.5.10)
Type "help" for help.

postgres=# \c gis
You are now connected to database "gis" as user "postgres".
gis=# CREATE EXTENSION postgis;
CREATE EXTENSION
gis=# CREATE EXTENSION hstore;
CREATE EXTENSION
gis=# ALTER TABLE geometry_columns OWNER TO osm;
ALTER TABLE
gis=# ALTER TABLE spatial_ref_sys OWNER TO osm;
ALTER TABLE
gis=# \q
postgres@map:~$ exit
ログアウト
mor@map:/etc$ 

こんな感じです。 データベース作成後に osm というユーザーを作成すればOKです。

mor@map:/etc$ sudo useradd -m osm
mor@map:/etc$ sudo passwd osm
新しい UNIX パスワードを入力してください: 
新しい UNIX パスワードを再入力してください: 
passwd: password updated successfully
mor@map:/etc$ 
OSMデータのダウンロードとデータ投入

こちらは先ほどの日本語の記事を参考に、下記のように日本のデータをダウンロードしました。

wget http://download.geofabrik.de/asia/japan-latest.osm.pbf

osm2pgsqlを使ってデータ投入をするのですが、キャッシュとコア数のオプションは、手元のPCに合わせて、-Cオプション(キャッシュ)は 7GB、 --number-processes (コア数)は 3 を指定しました。

osm@map:~$ osm2pgsql -d gis --create --slim  -G --hstore --tag-transform-script ~/src/openstreetmap-carto/openstreetmap-carto.lua -C 7000 --number-processes 3 -S ~/src/openstreetmap-carto/openstreetmap-carto.style ~/data/japan-latest.osm.pbf

このデータの投入にかなり時間がかかると思っていたのですが、今回の場合は2時間弱(105分だったかな)で終わりました。思ってたよりは早かったですね。

ちなみに、このデータ投入作業を実行するアカウントが、postgres の gis データベース(作成したデータベース)のオーナーのユーザーアカウントである必要がありました。 今回の場合、osmというユーザー名にしていたので、

mor@map:~$ su - osm

で osm ユーザーに切り替え後に実行しました。さらに、ここまでの作業を最初にログインしたユーザーでやってしまっていたので、

osm@map:~$ cp -p /homr/mor/data ~/
osm@map:~$ cp -p /home/mor/src ~/

のように、 osm ユーザーのホームにコピーしておきました。 その意味では、各種セットアップ作業も、osmアカウントで実行したほうが素直だったかもしれません(自分のユーザーアカウントでやってました)。もっとも、sudo 使えるように sudoers 触るのもどうかとちょっと嫌なので痛しかゆしかな。

シェイプファイルのダウンロード

シェイプファイルのダウンロードにもかなり時間がかかりました(約117分)。こっちのほうが、OSMのデータの投入より時間がかかってましたね。 ダウンロードは、 osm ユーザーの環境で実行しています。

これは、手順通りに作業を進めていると、スタイルシート(openstreetmap-carto)のインストールで、 mapnik.xml を作っていると思いますが、この内部にシェイプファイルのダウンロードで取得したファイル名が記載されています。シェイプファイルは、ダウンロードを実行したユーザーの ~/src/openstreetmap-carto/data 以下に保存されるようなので、 mapnik.xml を持っているユーザーとシェイプファイルのダウンロードユーザーが同じ必要がある、というわけです。

セットアップ

手順通りにすれば特に問題ありませんでした。

/usr/local/etc/renderd.conf の内容を示しておきます。XML= で mapnik.xml を持っているユーザー名の部分だけ書き換えています。

osm@map:~$ cat /usr/local/etc/renderd.conf
[renderd]
num_threads=4
tile_dir=/var/lib/mod_tile
stats_file=/var/run/renderd/renderd.stats

[mapnik]
plugins_dir=/usr/lib/mapnik/3.0/input
font_dir=/usr/share/fonts/truetype
font_dir_recurse=1

[ajt]
URI=/hot/
TILEDIR=/var/lib/mod_tile
XML=/home/osm/src/openstreetmap-carto/mapnik.xml
HOST=localhost
TILESIZE=256
MAXZOOM=20

osm@map:~$ 

動作確認

動作確認してみます。まず、ユーザーをosmに変更してから、renderd を対話で起動します。

mor@map:~$ su - osm
パスワード: 
osm@map:~$ 
osm@map:~$ renderd -f -c /usr/local/etc/renderd.conf
renderd[11573]: Rendering daemon started
renderd[11573]: Initiating request_queue
(後略)

ブラウザからアクセスしてみても何も表示されません。 コンソールを確認すると、

(前略)
renderd[11573]: Using web mercator projection settings
renderd[11573]: DEBUG: Got incoming connection, fd 8, number 1
renderd[11573]: DEBUG: Got incoming request with protocol version 2
renderd[11573]: DEBUG: Got command RenderPrio fd(8) xml(ajt), z(0), x(0), y(0), mime(image/png), options()
renderd[11573]: DEBUG: START TILE ajt 0 0-0 0-0, new metatile
renderd[11573]: Rendering projected coordinates 0 0 0 -> -20037508.342800|-20037508.342800 20037508.342800|20037508.342800 to a 1 x 1 tile
renderd[11573]: DEBUG: Connection 0, fd 8 closed, now 0 left
renderd[11573]: DEBUG: DONE TILE ajt 0 0-0 0-0 in 31.158 seconds
debug: Creating and writing a metatile to /var/lib/mod_tile/ajt/0/0/0/0/0/0.meta

DEBUG: DONE TILE とあるので、レンダリングには成功しています。でも、レンダリングに 31秒かかってますね。 ひょっとしたら、タイムアウトになっているのかもしれません。 ということで、ブラウザでリロードすると問題なく、画像が表示されました。やった!

f:id:junichim:20171228094157p:plain

renderd の自動起動設定

これも手順通りに行えば、特に問題ありません。 一度、サーバーを再起動して、再度ブラウザから接続して、地図が表示されることを確認しておきます。

まとめ

手順通りにやれば、時間はかかりますが、タイルサーバーの立ち上げそのものはそんなに難しくなかったです。 ただ、実際に地図を表示させてみると、なかなか重くて表示されないです。当面、試験的に使ってみていろいろと試したいと思います。

あと、せっかくタイルサーバーが立ち上がったので、

  • docker file にまとめる
  • OSM データが更新されたらそれを自動で反映する
  • 公開サーバーとする

あたりをやれればいいな、と思います。

マウス選び

半年ほど前だったかな?しばらくメインに使っていた ELECOM の マウス (M-XG2UB) が壊れました。

エレコム 有線マウス BlueLED 5ボタン Lサイズ ブラック M-XG2UBBK

エレコム 有線マウス BlueLED 5ボタン Lサイズ ブラック M-XG2UBBK

そんなに使い勝手も悪くなかったんですが、もっといいのを探してみよう!と思ったのが、運の尽き。

しばらく、マウスに悩まされることになってしまいました。 先日、知り合いからの紹介でやっと落ち着いたので、そこまでの顛末を自分のメモとしてまとめておきます。

ご注意

いろいろ書いていますが、あくまでも個人の感想です。特に、マウスのような人がダイレクトに操作するものの使い勝手の良し悪しは、その人の使い方とか好みに大きく影響されると思いますので、マウスそのものが悪いというよりは、私と相性が悪かったというふうに理解してください(なので、別の人の場合は全く当てはまらないことも多々あると思います)。

1台目

さて、マウスが壊れてしまっては、仕事にならないので、近所の電気屋に買いに走りました。 そこで、買ったのは、サンワサプライの エルゴブルーLEDマウス (MA-ERG7) というやつ。

サンワサプライ エルゴブルーLEDマウス MA-ERG7

サンワサプライ エルゴブルーLEDマウス MA-ERG7

手首に負担のかからないデザインだったかな?そんな感じのうたい文句に惹かれて決めました。昔、ワイヤレスマウスを使って、反応が悪いという苦い思い出があったので、今回も有線を選びました。

f:id:junichim:20171203230728j:plain

f:id:junichim:20171203230750j:plain

しかし、これが自分の使い方にあわないのなんの・・・

1日使っただけで、これは仕事にならん、となりました。 エルゴノミクスデザインって書いてあったの、期待してたんだけどなー。どうも自分には合いませんでした。

2台目

で、このままではらちが明かないので、数日後また近所の電気屋へ。 でも、地方都市の悲しさか、マウスの種類の少なさもありますが、マウスが売ってても、触って試せないんですよね。 なので、パッケージだけで判断しないといけないのが辛いところ。

あれこれ悩んだ末に選んだのが、 Buffalo の プレミアムフィット (BSMBW500L)というマウスでした。 有線でもよかったのですが、1台目を有線で買ったばかりというのと、まあ昔とは違うだろうとワイヤレスを試してみることにしました。

(上はMサイズ、実際買ったのはLサイズ)

手に取って試せなかったので、若干の不安が残りつつも、使い始めてみると、そんなに悪くない感じ。

f:id:junichim:20171203230817j:plain

これは行けるかな?と思いきや、サイドボタンが非常に押しづらい。 誤操作を防止するためのサイドボタン、ということのようですが、これが自分には合わなかったようです。 とはいえ、サイドボタンはそんなに頻繁に使うほうではないので、しばらく使ってみることにしました。

しばらく使ってみましたが、どうにも使いにくい。サイズをLサイズにしたこともあるようですが、自分の使い方だと、ボタンを軽く押すことができないようで、長時間仕事していると手が痛くなってきます。

困ったぞ、これは。

ちょっと考えてみる

マウス選びにこんなに悩むとは初めての経験でした。

PCを本格的に使い始めたのは、今や懐かしい、Windows95 の時代です。でも、キーボードもマウスもだいたい、会社で支給されたものやPCを買ったときの付属品でなんの過不足もなく使っていた派でした。なので、BTOとかでPC買うときも、だいたい一番安いマウスを選んでおいて問題ない、という感じでした。

まあ、手で使う道具は好みもあるから、世の中にはマウス選びで悩んでいる人も多くいることだろうと思って、調べてみると、

matome.naver.jp

のように、いろいろと見つかりました。

マウスの持ち方には大別して3種類あるそうです。

自分の場合は、この『つかみ持ち』に近い感じのようです。しかも、自分のマウスの使い方を観察していると、マウスの後ろ側(ボタンのない側)に手を置く感じで、ボタンも先端ではなく後ろ側に近い側で押す癖があるようです。 そう考えると2台目に試したマウスなどはマウスの先端を押すと快適にクリックできます(でも、自分のスタイルじゃないので、継続して使えないんですけどね)。

さて、使い方のスタイルが分かっても、じゃあ具体的にどの商品が良いんだ?ということはわからないままです。 ということで、使いにくいマウスを使いながら、以前使っていたやつを買いなおすか、また新しいのを試すか(でも地方なので試してから買えないので外したらどうしよう・・・)というのを日々感じながら、時間が経っていきました。

3台目

そんな日々だったのですが、先日名古屋であった FOSS4G というイベントに参加する機会がありました。

peatix.com

たまたま、早めに名古屋につくことができたので、これはチャンスとばかり、名古屋駅前のビックカメラへ。 マウス売り場を見て、愕然。お試しのできるマウスの数のなんと多いことか!

昔、関東に住んでいたころは何かあるとすぐ都内に出ていたのでこれが当たり前だったんだよなー、と過去を振り返りつつ、改めてこれが地方と都会の差か、と思い知らされつつ、お目当てのマウスを探します。

実は、この少し前に、私がマウス選びに難儀しているということを知った友人から、Logicool の M705 がおすすめだよ、ということを聞いていたので、それを試してみるのが第一の目的でした。

Logicool ロジクール ワイヤレスマラソンマウス M705t

Logicool ロジクール ワイヤレスマラソンマウス M705t

で、触った第一印象は、これいい感じ!というもの。何がって、ボタンを軽く押せる感じが気に入りました。 あれこれ迷ってる暇もなく、即決です。

家に帰ってきてから、早速使い始めたのですが、快適ですねー。サイドボタンも快適に押せます。 数日使ってますが、今のところ何の不満も出てきません。

このマウス買った話をしたら、別の友人もこれ使っていたそうで、ある意味定番の商品の一つだったようです(店員さんもそんなこと言ってました)。 なんにしても、これで、しばらくマウスに悩まされることもなくなりそうです。

マウス選びにはまらないようにご注意ください。

マッピングパーティを開催しました

先日(といっても一か月以上前になりますが)9/29(土)に『伊勢河崎でマッピングパーティ』と題して、三重県伊勢市の河崎地区を舞台にマッピングパーティを開催しました。 せっかく開催したイベントなので、当日を振り返りながら、あれこれとメモをまとめておきます。

connpass.com

オリエンテーション

当日は、ファシリテータとして @kudarisenmon さんをお迎えして、小学生を含む8名の方が参加しました。

ほとんどの方が初めて OpenStreetMap に触れるという事情もあり、最初にファシリテータの方から OpenStreetMap とは何かという説明からしていただきました。 続いて、マッピングパーティについてのお話や、各地の事例、イベント当日の流れなどの説明を頂きました。

f:id:junichim:20171029235045j:plain

フィールドワーク

オリエンテーションのあとは、実際に外に出て、フィールドワークです。実は、今回のイベントを企画するまではフィールドワークといっても漠然と単に歩くだけだと思ってましたが、結構準備することも多かったので、簡単にまとめておきます。

準備編

一応、フィールドワーク前に、事前に実際に歩いて、どのあたりをイベントで歩くと面白そうかな?という事前ロケをしています。これを元に、当日歩くルートを決めました。

実際に作成したルートは下記になります。

フルスクリーン表示

uMapというサービスを使ってます。

フィールドワークのやり方もいろいろあるようです。

  • 紙の地図を使って、自分たちで歩いて、気になるところをメモ
  • Mapillary などのアプリを使い記録

Mapillary はスマホを持って歩くと、一定秒数ごとに写真を撮ってくれます。それをあとからアップロードすると撮影時の位置情報を元に、地図と写真を紐づけてくれるようなサービスです。 例えば、今回の河崎付近だと、こんな感じで見ることができます。

今回は前者の紙でメモしながらのマッピングをメインにしました(当日は、 Mapillary に挑戦した方もいらっしゃいましたよ)。 紙の地図も参加者に渡す必要があるので、事前に印刷しておきます。OpenStreetMapだと印刷できるんですよ!印刷が! 今回は、FieldPaper を使って河崎近辺を印刷しました。

当日編

さて、準備の話はこれぐらいにして、実際のフィールドワークの際にメモする気になるところは人によってまちまちですが、例えば、

  • お店などの情報
  • 郵便ポスト
  • バス停
  • 石碑
  • 神社
  • 駐車場
  • 説明版
  • その他いろいろ

などなど、何でもOKです。ただ、個人の住居などは除いておきます。また、メモと一緒に、あとからマッピングする際の参考になるよう、写真も撮っていきます。

自分のメモした紙はこんな感じになってました。 f:id:junichim:20171107003202j:plain

他人が見たらわかんないですねw 自分も今見たらわかんないですwww

あれこれ見ながら歩いていると、予定の2時間があっという間に迫ってきました。 最後のほうは少し駆け足になってしまいましたが、なんとか調査を終えて、集合場所の会場に戻りました。

マッピング

さて、いよいよマッピングですが、その前に差し入れのお菓子とお茶を食べて飲みつつ一休憩です(差し入れありがとうございました!)。

参加者の方には事前に OpenStreetMapのユーザー登録を済ませておいてもらいましました。 PCを立ち上げて、ログインして、早速編集開始です。

マッピングでは、先ほどフィールドワークで調べたメモを元に、 OpenStreetMap に情報を入力していきます。 情報の入力、といってもピンとこないかもしれませんが、OpenStreetMap では地図上のすべてのモノが、個別の図形(四角形や多角形、線やそれらがつながったもの)として表現されています。 OpenStreetMap にログインして、編集モードに入ると、これらの図形を操作することができます。

f:id:junichim:20171107004526p:plain

こんな感じです。後ろの画像(航空写真)のうえに、白い線や、赤い半透明の四角形などがあると思いますが、これらが前述の図形になります。

マッピングでは、新たにこのような図形自体を登録したり、既存の図形にお店の名前や営業時間などの情報を追加したりしていきます。

具体的な入力方法については、@kudarisenmon さんや経験者の方から手ほどきを受けつつ、進めました。 もし、興味を持たれた方がいましたら、iDエディタ などを参考にトライしてみてください!

当日は実際にマッピングを行う時間が足りなくなったこともあり、それぞれが何点かマッピングするところまでで時間切れとなりました。

成果?

イベントだけの成果というわけではありませんが、後日、イベント前後のマップを比べると、

マッピングパーティ前 f:id:junichim:20171026153659p:plain

マッピングパーティ後 f:id:junichim:20171029234237p:plain

と一目でわかるように、ずいぶんと情報が充実しました。

伊勢だとメジャーな場所もまだまだ空白のままというところも多いので、この調子でどんどんと情報が充実していくといいですね。

さいごに

自分自身が今までマッピングパーティに参加したことがなかったので、イベントの主催をやりながら参加もするという立場でした。 経験がないということで、いろいろと不安もありましたが、いざ当日を迎えてやってみると、予想以上に楽しかったです。

イベントの相談・企画・広報・開催など、多くの方々にご協力頂き、ありがとうございました。

次は違う内容(違う場所を対象)にして、また開催したいと思います。

ところで、地方だと同じ活動をしている人たちがどれぐらいいるのか気になりませんか?ひょっとして自分だけだったら寂しいなー、とふと思うときがあります。 OpenStreetMap だと、自分と同じ地域て活動しているユーザーについて教えてくれるTwitterのbotがあるんですね!

twitter.com

これを知ってから、地方にもマッパーがいることがわかり、いろいろと心強いです。

なかなか万人受けしないかもしれませんが、少しでもマッピングパーティが広がるといいかなと思っています。