RU:Osm2pgsql/schema

From OpenStreetMap Wiki
Jump to navigation Jump to search

broom

Help (89606) - The Noun Project.svg

Эта страница описывает структуру базы данных PostgreSQL, создаваемой osm2pgsql. Информация в основном добыта реверс-инженерингом скрипта osm2pgsql пользователем Stanton 22:37, 26 January 2011 (UTC)

Создаваемые таблицы

Обрабатываемые данные

Эти таблицы содержат данные, которые Mapnik использует для рендеринга:

  • planet_osm_line: содержит все импортированные линии
  • planet_osm_point: содержит все импортированные точки, имеющие теги
  • planet_osm_polygon: содержит все импортированные полигоны. Отношения для этого должны быть решены.
  • planet_osm_roads: содержит подмножество `planet_osm_line`, предназначенное для рендеринга на низких уровнях зума. `planet_osm_line` имеет слишком много элементов для рендеринга на обзорных картах. Выборка производится по определённым тегам (FIXME: highway? railway? other?)

Каждая таблица имеет столбец way, содержащий геометрию для объекта в выбранной проекции. Для каждой таблицы созданы два индекса: один для столбца way и один - для osm_id. Геометрия использует координаты в EPSG:900913, также известной как проекция G00GlE, и легко может использоваться, например, в OpenLayers на JavaScript.

Заметьте, что отношения не импортируются напрямую. Линии, являющиеся участниками отношений, импортируются особым образом (смотрите описание для planet_osm_line), но нет простого пути установить связи между отношением и его участниками, или найти теги, принадлежащие отношению (unless they have ways as members).

planet_osm_line

Эта таблица содержит все импортированные незамкнутые линии. Дополнительные строки создаются для линий, являющихся участниками отношений:

  • В каждом отношении линии делятся на "части" непрерывных линий
  • Для каждой части создаётся строка (одна и более для каждого отношения, имеющего в себе линии в качестве участников)
  • osm_id это отрицательный ID отношения
  • Столбцы тегов заполняются тегами отношения

Получается, что может быть несколько частей для отношения, отрицательные ID не обязательно уникальны.

Столбец Тип Описание
osm_id ID в OSM
tag тот, что указан в файле стиля Один столбец на каждый тег, указанный в файле стиля вместе в флагом line, содержит значение тега
z_order порядок по оси Z (если указан в файле стиля), рассчитывается автоматически
way_area Область (если указан в файле стиля), рассчитывается автоматически
way LINESTRING Геометрия линии (координаты всех точек)

planet_osm_point

Эта таблица содержит все импортированные точки, имеющие теги. Точки без тегов (их единственная цель - обозначение позиции линии) не импортируются.

Учтите, что механизм создания дополнительных строк для каждого участника отношения, с тегами отношения, не применяется к точкам. Поэтому, в данной схеме, нет способа найти родительское отношение для данной точки.

Столбец Тип Описание
osm_id ID в OSM
tag тот, что указан в файле стиля Один столбец на каждый тег, указанный в файле стиля вместе в флагом line, содержит значение тега
z_order
way POINT Геометрия линии (координаты)

Пример использования: список всех городов между указанными координатами:

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) проекции и легко могут быть использованы, например, в OpenLayers на JavaScript. `min` или `max` в этом случае безразлично, поскольку точки не имеют размеров.

planet_osm_polygon

Эта таблица содержит все импортированные полигоны (замкнутые линии). Для полигонов, состоящих в одном и более отношениях, создадутся несколько строк: одна для собственных ID и тегов полигона, другие для каждого его отношения. Данные дополнительные строки содержат теги отношения и отрицательный ID отношения в столбце osm_id (поскольку одно отношение может включать в себя несколько полигонов, отрицательные ID необязательно уникальны).

Столбец Тип Описание
osm_id ID в OSM
tag тот, что указан в файле стиля Один столбец на каждый тег, указанный в файле стиля вместе в флагом line, содержит значение тега
z_order порядок по оси Z (если указан в файле стиля), рассчитывается автоматически
way_area Область (если указан в файле стиля), рассчитывается автоматически
way GEOMETRY Геометрия линии (координаты всех точек)

planet_osm_roads

Как и в planet_osm_ways, для каждого участия в отношении будут созданы дополнительные строки.

Столбец Тип Описание
osm_id ID в OSM
tag тот, что указан в файле стиля Один столбец на каждый тег, указанный в файле стиля вместе в флагом line, содержит значение тега
z_order порядок по оси Z (если указан в файле стиля), рассчитывается автоматически
way_area Область (если указан в файле стиля), рассчитывается автоматически
way LINESTRING Геометрия линии (координаты всех точек)

Промежуточные таблицы

Я заметил, что эти таблицы присутствуют после импорта в режиме slim. Видимо, они нужны на первом этапе импорта; геометрия по прежнему в формате OSM (lat/lon для точек, node references for ways) и присутствует минимальная конвертация из формата OSM.

  • planet_osm_nodes: импортированные точки в сыром виде
  • planet_osm_rels: импортированные отношения в сыром виде
  • planet_osm_ways: импортированные линии в сыром виде

planet_osm_nodes

Столбец Тип Описание
id ID в OSM
lat Широта
lon Долгота
tags Массив тегов и значений, формат: {tag1, value1, tag2, value2, ...}

planet_osm_rels

Столбец Тип Описание
id ID в OSM
way_off Смещение первого id линии в частях
rel_off Смещение первого id отношения в частях
parts Список ID точек, линий и отношений для данного отношения.
members Массив участников и ролей, формат: {member1, role1, member2, role2, ...}. Участники представлены буквой, указывающей на тип плюс их ID
tags Массив тегов и значений, формат: {tag1, value1, tag2, value2, ...}
pending Ожидание обновления данной строки? Принимает значение "t", пока osmosis выполняет ежеминутное обновление, и значение "f" при завершении. Такие обновления должны проходить в транзакции, так что отловить строку с "t" должно быть непросто.

planet_osm_ways

Столбец Тип Описание
id ID в OSM
nodes Массив, содержащий ID точек линии
tags Массив тегов и значений, формат: {tag1, value1, tag2, value2, ...}
pending