大阪 京都 神戸近辺が変更された際、 そのコメントを @osmjp_santo という twitter アカウントに tweet する仕組みを 以前、ある方が構築されていた。
誰が何のためにどこをどう編集したかがわかることによって、
・共同作業時の排他制御の参考にしたりとか
・あの人頑張ってるなぁ、、、とか
・へへへ、最北端、先に行ったもんね とか
といった情報共有、モチベーションの向上につながっていた。
その他、
・他の地図からコピーしたらアカンやん
という不正の検出にも役立つことがあった。
ところが、12/11/10 を最後に
@osmjp_santo
が何らかの事情で止まってしまった。
管理者の方に連絡を取ったりしたのだが、
残念ながら復旧の見込みが無く、寂しく残念な思いをしていた。
そこで技術的興味から、自分で作ってみることにした。
更には、全ての編集を把握できることから、
都道府県ごとの編集数/編集者数の集計を各 twitter アカウントに、
全国集計を
@osmjp_stats
に流している。
更に更にその集計結果は
@kudarisenmon
さんにより、
・過去1か月間の推移
・2週間の都道府県ランキング
としてビジュアル化もされている。
・近所の編集の参考にしたり、
・共同作業時の排他制御の参考にしたり
とか、必要に応じて活用いただきたい。
昔から、この手のテキスト処理は Unix の得意分野である。
まぁ XML など複数行に渡る処理は結構苦手なのだが、、、
以下、シェルスクリプトの解説
OpenStreetMap の左上の方にある「履歴」ボタンを押した時に使用されるAPIを使用して、 日本を含む領域を編集した Changeset を取得する。
ただ、この API は矩形しか指定できず、
一つの矩形で日本全土をカバーしようとすると、
朝鮮半島や中国本土のデータまで取得してしまい、
無駄なデータの取得/不要なトラフィック、負荷を発生してしまう。
そこで、
・北海道/東北/関東甲信越
・東海/北陸/近畿/中国/四国
・九州
という3つのブロックに分けて Changeset を取得している。
各都道府県境、国境が矩形だったら、どれだけ楽だったことか(笑
ここで最大の手抜き(良く言えば効率化)をしている。
各 Changeset には、複数のノード、ウェイ、リレーションが含まれる。
Changeset に含まれる全ノードの都道府県を判定すれば確実なのだが、
大量のノードが含まれる場合はその判定コストは膨大となる。
そこで、考えたのが、四隅だけを判定する方法。
Chengeset に複数のノードが含まれる場合、
このように
その領域が矩形で表される。
その右上/右下/左上/左下の4ヶ所を判定することによって
一つの Changeset につき最大4ヶ所の判定だけで済むようにして
判定コストを抑えている。
この手抜きには色々弊害もあって
まぁ、これほど大規模でなくても、県境付近で編集すると、 いずれかの隅が隣の都道府県になることがある。
また、都道府県判定には、
農研機構の簡易逆ジオコーディングサービス
を使わせて頂いているが、
このサービスは、海上はどの都道府県に属していないと判定するようで、
例えば
島の編集
はどの都道府県にも属さないという残念な結果になる
なお、このサービスが停止されると osmjp_都道府県 は欠落してしまう。
当初、Changeset への URL をそのまま短縮してツィートしていたのだが、
それだと Twitter で
"OpenStreetMap" を検索した時
に大量にヒットするという苦情が来て、致し方なく
私のサイトにスタブを作ってその URL を使うことにした。
URL の短縮には Google URL Shortener を使わせて頂いている。
Google URL Shortener が止まっているときは、スタブの URL をそのまま使う。
といっても、私の知識では twitter に直接ツィートすることはできず、
メールを使ってツィートするサービス
yabmin
を使わせて頂いている。
時々、twitter へアクセスできなかったというエラーが帰ってきている。
その場合は、Changeset の tweet はできていないが、集計はできている。
上記、4隅判定のため、
・編集されているのにカウントされていない場合
・編集されていないのにカウントされている場合
がある。
なお、1つの Changeset が複数の都道府県と判定した場合は、 それぞれの都道府県でカウントする。
集計は、0時過ぎに実行しているが、 月累計、年累計は(前日までではなく) その集計時点までの累計をとっているため、 0時から集計時点までの編集までをカウントしてしまい 前日までの累計+前日の集計とは合わなくなることがある
「概略集計」としている所以である。
一つの Chageest が複数の都道府県と判定した場合は、 編集数はその都道府県の数となるので、 一つの Chageest (編集)が最大4編集とカウントすることがある。
累計については、上記都道府県別集計と同じ。
「概略集計」としている所以である。
編集者は、uniq をとっているので、 一つの Chageest (編集)を4編集とカウントしたとしても 編集者数は1とカウントする。
というわけで、色々「仕様」があって、厳密ではない。
あくまで「概略集計」ということで、参考にしていただければと思う。
上記の通り、
@kudarisenmon
さんには生データを活用して
・過去1か月間の推移
・2週間の都道府県ランキング
としてビジュアル化していただいている。
← 西陣杉坂線バイパスロギング、他、気になる所マッピング |
山下康成の きばらないブログ |
→ 京都腐道530号、707号、府道53号久住バイパス |
Copyright (C) 2003-2017 Yasunari Yamashita. All Rights Reserved.
yasunari @ yamasita.jp 山下康成@京都府向日市