JA:Osm2pgsql/schema
このページでは、osm2pgsqlで生成されるPostgreSQLデータベースの構造について解説します。この情報は主に、osm2pgsqlスクリプトからリバースエンジニアリングされた結果です。Stanton 22:37, 26 January 2011 (UTC)
作成されるテーブル
生成されるデータ
以下のテーブルで保持されるデータは、Mapnikがレンダリングを行う際に利用されます:
- planet_osm_line: DBにインポート対象と指定されたすべてのWayが格納されます
- planet_osm_point: DBにインポート対象と指定されたすべてのNodeが、タグ情報と共に格納されます
- planet_osm_polygon: DBにインポート対象と指定されたすべてのPolygonが格納されます。リレーション情報もここで解決されるようです
- planet_osm_roads: 低ズームレベルで利用される、`planet_osm_line`のサブセットを格納します。`planet_osm_line`は、広域の地図を作成するには含まれる情報が多すぎます。選択基準は、セットされるタグによってなされます(FIXME: highway? railway? other?)
それぞれのテーブルにはwayカラムが含まれており、選択された投影法におけるオブジェクトのジオメトリが記録されています。それぞれのテーブルには2つのインデックスが生成されます。wayカラムとosm_idカラムです。
ジオメトリはEPSG:900913(別名 G00GlE投影法)の座標で記録されており、例えば JavaScriptベースのOpenLayers などで簡単に扱うことが可能です。
注意: リレーション情報が直接DBへインポートされないことに注意してください。リレーションのメンバーとなっている wayは特殊な方法でDBへインポートされます(詳細は planet_osm_lineを参照)。また、リレーションとそのメンバーの間に関係性をもたせる方法、および、リレーション自体に付与されているタグ情報の解決は簡単に実現できません。(リレーションにウェイがメンバーとして含まれていれば解決はできます)
planet_osm_lineテーブル
このテーブルは、エリアとして閉じていないwayがインポートされます。type=routeリレーションのメンバーに対しては、追加の列が作成されます。
- それぞれのtype=routeごとに、所属しているwayが接続されている場合、適切な"チャンク"単位に連結されます
- それぞれのチャンクごとに新しく列が追加されます
- osm_idはリレーションの負の値となります
- tagカラムはリレーションで設定されている値が代入されます
リレーションには複数のチャンクが存在する可能性があるため、IDの負の値は一意である必要があります。
Column | Type | Description |
---|---|---|
osm_id | ID in OSM | |
tag | style fileで指定された値 | One column for each tag specified in the style file along with the line flag, contains the tag value |
z_order | Z order (styleファイルで指定された場合), 自動的に算出 | |
way_area | Area (styleファイルで指定された場合), 自動的に算出 | |
way | LINESTRING | Way geometry (coordinates of all points) |
planet_osm_pointテーブル
このテーブルには、すべてのNodeとそこに付与されたタグがインポートされます。タグが付与されていないNodeはインポートされません(例えば wayに含まれている位置情報のみのNodeなど)
それぞれのリレーションにおいて、リレーションのタグ情報を付与するための新しい列は所属Nodeに対しては付与されない点に注意してください。これは、現在のスキーマでは、対象のNodeに対して親リレーションのデータを付与することができないことを意味します。
Column | Type | Description |
---|---|---|
osm_id | ID in OSM | |
tag | style fileで指定された値 | One column for each tag specified in the style file along with the line flag, contains the tag value |
z_order | ||
way | POINT | Way geometry (coordinates) |
利用方法の例: 座標XとYの中に含まれるすべての都市の一覧
select name, place, ST_XMin(way), ST_YMin(way) from planet_osm_point where place='city' order by name; - name | place | st_xmin | st_ymin ---------------------+-------+------------------+------------------ Aachen | city | 677005.568925713 | 6581465.51491323 Bielefeld | city | 949707.775300959 | 6803595.76136763 Bochum | city | 803356.018491145 | 6707233.31587142 Bonn | city | 790360.302837211 | 6574460.70904846 ...
戻り値である座標の投影法はデフォルトで 900913 (G00GlE)になっており、例えば JavaScriptベースのOpenLayers などで簡単に扱うことが可能です。この検索では、`min`あるいは`max`の値は意味を持ちません。なぜならば、nodeは大きさをもたないためです。
planet_osm_polygonテーブル
このテーブルはすべてのポリゴン(閉じたウェイ)が格納されます。リレーションのメンバーとなっているポリゴンに対しては、複数の列が作成されます。1つはポリゴンオブジェクト自体の IDとタグ、もうひとつはそれぞれのリレーションメンバシップです。これら追加の列はリレーションに付与されているタグを含み、osm_idカラムにはリレーションの負の値が格納されます(1つのリレーションは複数のポリゴン(multi polygon)を含める可能性があり、負の値が一意である必要はありません)
Column | Type | Description |
---|---|---|
osm_id | ID in OSM | |
tag | style fileで指定された値 | One column for each tag specified in the style file along with the line flag, contains the tag value |
z_order | Z order (styleファイルで指定された場合), 自動的に算出 | |
way_area | Area (styleファイルで指定された場合), 自動的に算出 | |
way | GEOMETRY | Wayのジオメトリ (全てのポイントの座標) |
planet_osm_roadsテーブル
plane_osm_waysと同様、それぞれのリレーションメンバーシップに応じて追加の列が作成されます。
Column | Type | Description |
---|---|---|
osm_id | ID in OSM | |
tag | style fileで指定された値 | One column for each tag specified in the style file along with the line flag, contains the tag value |
z_order | Z order (style fileで指定された場合), 自動的に算出 | |
way_area | Area (style fileで指定された場合), 自動的に算出 | |
way | LINESTRING | Wayのジオメトリ (全てのポイントの座標) |
Intermediate tables (中間テーブル)
DBへのインポートがスリムモード(slim mode)で行われた場合、以下のテーブルが生成されるようです。これらのテーブルは、メモリの容量が少ない場合や、分単位の差分ファイルを利用する場合に必要となります。ジオメトリはOSMの形式を利用します(ノードの緯度/経度、設定された投影法(デフォルトはspherical mercator)、nodeのwayへの参照)。また、OSMフォーマットから最低限の変換のみが利用されます
- planet_osm_nodes: imported nodes in raw format
- planet_osm_rels: imported relations in raw format
- planet_osm_ways: imported ways in raw format
planet_osm_nodesテーブル
Column | Type | Description |
---|---|---|
id | ID in OSM | |
lat | projected Latitude | |
lon | projected Longitude | |
tags | Array of tags and values, format: {tag1, value1, tag2, value2, ...} |
tags のカラムは osm2pgsql の 0.94.0 以降では出力されない。
planet_osm_relsテーブル
Column | Type | Description |
---|---|---|
id | ID in OSM | |
way_off | Offset to first way id in parts | |
rel_off | Offset to first relation id in parts | |
parts | List of node IDs, way IDs and relation IDs in this relation. | |
members | Array of members and roles, format: {member1, role1, member2, role2, ...}. Members are represented by a letter denoting their type plus their ID | |
tags | Array of tags and values, format: {tag1, value1, tag2, value2, ...} | |
pending | Is an update to this row pending? Set to "t" during osmosis "minutely" update then to "f" when complete. Such updates should occur in a transaction so finding a row with "t" set should be rare. |
planet_osm_waysテーブル
Column | Type | Description |
---|---|---|
id | ID in OSM | |
nodes | Array containing the IDs of the way's nodes | |
tags | Array of tags and values, format: {tag1, value1, tag2, value2, ...} | |
pending |