Let’s start
OpenStreetMap
Developing
OpenStreetMap Foundation Japan
OpenStreetMap 北陸

宇野泰行
地図タイルについて
こんな URL でタイル画像にアクセス出来ます。
http://tile.openstreetmap.org/{z}/{x}/{y}.png
z( ズームレベルは 0 ~ 18? 19? までです。 )
x,y は緯度経度ではなく、そのズームレベルでのタイルの並び順。

z=0
x=0,y=0

z=1
z=1
x=0,y=0 x=1,y=0
ズームが 1 上がる
毎に 4 分割

z=1
z=1
x=0,y=1 x=1,y=1
地図タイルの取得
x,y は緯度・経度ではないので、
緯度・経度からタイルを取得したい場合には計算しよう。
【 AS3 で計算した例】
var xf: Number = (lon + 180) / 360 * Math.pow(2, zoom);
var yf: Number = (1 - Math.log(Math.tan(lat * Math.PI / 180) + 1 /
Math.cos(lat * Math.PI / 180)) / Math.PI) / 2 * Math.pow(2, zoom);
var xx: Number = Math.floor(xf);
var yy: Number = Math.floor(yf);
trace("X:" + xx + " Y:" + yy);
地図タイルについて
地図タイルは OSM のデータベースに更新がある度に都度更新され
ている。
あくまでも画像なので、言語ごとにタイル画像が必要。
例えば、店舗名や道路名など、 name:ja( 日本語 ) タグを参照してあ
れば表示、無ければ name( 現地語 ) を表示。
同様にフランス語で地図表示するなら name:fr を参照して・・・
地図タイルまとめ
1 言語につき 1 画像のため、全ての言語をカバーするにはタイル
サーバーに大量の画像を保持する必要がある。よってなかなか
表示言語の切替って難しい。
→ クライアントで osm ファイルからレンダリングすれば簡単に切
り替えられそう。

多言語地図ビューアの開発
とかどうでしょう
API について
多言語地図ビューアを作るにしても OSM データを取得する必要が
ある。
OSM のデータを取得する API

データ取得 更新

速度

Overpass API

可

不可

高速

API v0.6

可

可
Overpass API について
Overpass API は JSON もしくは XML 形式で
OSM データを取得できる。
Overpass API の中でも
・ OverpassXML
・ OverpassQL
の 2 つがある。
リクエストは URL にクエリや XML をくっつけ
て GET リクエストでいいです。
Overpass API
OverpassXML はその名の通り、 XML 形式でク
エリを記述する。
Overpass turbo(http://overpass-turbo.eu/) にて
OverpassQL と相互変換することも可能
で、 OverpassQL では一部サポートされてい
ない機能もあるので XML のほうをオススメ
します。
指定した緯度経度ボックス内の地物を取得した
り、指定した緯度経度から半径○ m の地物を
取得できます。もちろんタグでフィルタリン
グできる。
Overpass API でできないこと
例)
指定した緯度経度から半径○ m で取得すること
は出来るものの、取得したデータを近い順に
並べるなどは出来ない。
指定した 2 点間の距離を取るなどは出来ない。
→ このあたりは自力で計算?
API v0.6
REST API
GET や POST ではなく、主に PUT と DELETE
リクエストを使います。 (GPX のアップロー
ドのみ POST)
PUT や DELETE がサポートされていない言語
の場合にはヘッダを偽装すれば大丈夫。
【 AS3 での偽装例】
urlRequest.requestHeaders.push(new URLRequestHeader("X-HTTP-MethodOverride", "PUT"));
API v0.6
PUT や DELETE のパラメータに XML を使う場合が非
常に多いので、あなたが使う言語での XML 操作を確
認しておきましょう。
認証はベーシック認証でいいです。

データ更新するときの基本としては
1. チェンジセット作成のリクエストを投げる
2. データアップロードのリクエストを投げる
3. チェンジセットクローズのリクエストを投げ
る
API の実行例
Overpass API, API v0.6 共に、 AS3 の例を以前ブログに
書いたのでそちらを参照して下さい。
http://jmsnews.blog38.fc2.com/blog-entry-46.html

上のブログでは Overpass API は OverpassQL になってま
すが、 OverpassXML の場合には XML を改行無しで
URL にくっつけて流せばいいだけです。
Android 用 OSM エディタ
iOS には Pushpin OSM という凄く使いやすいア
プリがあるが、 Android には vespucci ぐら
い?
Vespucci は Pushpin より多様なことが出来る反
面、使いずらい。
Pushpin は確かに使いやすいが、一部タグが入
力出来ない。そもそもキーとして入力出来な
かったり、バリューがリストになかった
り・・・
Android 用 OSM エディタ
使用言語
AIR for Android
要はフラッシュのアプリ版
地図表示ライブラリ
Modest Maps
Android 用 OSM エディタ
ということで Pushpin ライクな
Android エディタ開発してます。
日本の OSM に特化!
・ name:ja_rm, name:ja_kana を
デフォで埋める。
・郵便番号から住所へ変換など
OSM ファイルの構造
<?xml version='1.0' encoding='UTF-8'?>
<osm version='0.6' upload='true' generator='JOSMImportAssistant'>
<node id='-1' action='modify' visible='true' lat='35.943302' lon='136.188187'>
<tag k='source' v='Sabae City 2012' />
<tag k='source_ref' v='http://www.city.sabae.fukui.jp/users/tutujibus/web-api/01.html' />
<tag k='attribution' v='Sabae City' />
<tag k='highway' v='bus_stop' />
新規オブジェクトの場合
<tag k='bus' v='yes' />
にはマイナスのユニーク
な ID を振っておけばサー
<tag k='public_transport' v='platform' />
バで処理してくれる
<tag k='name' v='JR 鯖江駅(1番のりば) ' />
</node>
</osm>
API v0.6 でデータ更新する
時には、 XML 操作してタ
グを追加したり、削除し
たりしよう!
JOSM プラグイン
JOSM プラグイン開発
ほしいもの
・郵便番号から住所への変換プラグイン
・ name から name:ja_kana や name:ja_rm をデ
フォ埋め機能
参考:
http://josm.openstreetmap.de/wiki/DevelopersGuide/DevelopingPlugins
JOSM プラグイン
・郵便番号から住所への変換プラグイン
については HelloWorld レベルまでは
10/12 の金沢もくもくで完成。
まとめ
主に
・ JOSM プラグイン
・エディタ
・クライアント側での地図ビューア
の開発を進めています。
一緒に開発しよう!
OpenStreetMap 北陸
https://www.facebook.com/groups/OSMHokuriku/
次回の OSM もくもく勉強会 in 北陸は、
1 泊 2 日の合宿とかにしようかなと思っています。

始めよう!OpenStreetMap Developing

Editor's Notes