JA:Osm2pgsql/schema

From OpenStreetMap Wiki
Jump to navigation Jump to search

このページでは、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