RU:Overpass API/Augmented Diffs

From OpenStreetMap Wiki
Jump to navigation Jump to search
Overpass API logo.svg
edit
Overpass API · Language reference · Language guide · Technical terms · Areas · Query examples · Sparse Editing · Permanent ID · FAQ · больше (русский) · Web site
Servers status · Versions · Development · Technical design · Installation · XAPI compatibility layer · Public transport sketch lines · Приложения · Source code and issues
Overpass turbo · Wizard · Overpass turbo shortcuts · MapCSS stylesheets · Export to GeoJSON · больше (русский) · Development · Source code and issues · Web site
Overpass Ultra · Overpass Ultra extensions · MapLibre stylesheets ·больше (русский) · Source code and issues · Web site

Дополненные диффы расширяют обычные минутные диффы. Они позволяют поддерживать ежеминутную актуальность даже для специализированных баз. Идея высказывалась Matt Amos, позже поддержана Frederik Ramm в его докладе на немецком.

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

Вы можете загрузить дополненные диффы со страницы http://overpass-api.de/augmented_diffs/.

Описание

Дополненные диффы содержат три типа данных:

  • новые данные, как в обычных минутных диффах;
  • старые данные, которые были заменены или удалены;
  • контекст: линии и отношения, которые содержали изменённые объекты, а также все точки для затронутых линий.

Это позволяет, в частности, такие применения:

  • правильные ежеминутные обновления для фрагмента базы данных, ограниченного заданной областью;
  • механизм отката: можно взять планету и последовательно отматывать время назад, а не идти вперёд, как обычно.

Первое довольно очевидно, второе требует разъяснения: несколько примеров из вышеприведённых докладов упоминают, к примеру, приложение для подсчёта объектов, которому нужно знать, что именно было удалено, для уменьшения значения счётчика.

Содержимое

Каждый дифф состоит из трёх разделов, по одному для каждого типа объектов. Внутри каждого раздела объекты отсортированы по идентификатору. Если объект встречается несколько раз в разных версиях, эти версии отсортированы по номеру. Каждый объект обёрнут в erase, keep, insert, в зависимости от того, был объект добавлен (только insert), удалён (только erase), изменён (erase со старой версией и insert с новой) или не тронут (только keep).

В заголовке записано время завершения перечисленных изменений.

<?xml version="1.0" encoding="UTF-8"?>
<osmAugmentedDiff version="0.6" generator="Overpass API">
<note>... </note>
<meta osm_base="2012-08-26T20\:24\:02Z"/>

  <!-- Элементы расположены так: сначала точки, затем линии, затем отношения.
       Внутри каждого типа элементы отсортированы по идентификатору. -->

<erase>
  <node ... />
  <!-- содержит либо явно удалённые точки, либо старые версии, заменённые новыми. -->
</erase>
<keep>
  <node ... />
  <!-- содержит точки, принадлежащие изменённым линиям, включая линии, которые не изменились, но содержат изменившиеся точки. -->
</keep>
<insert>
  <node ... />
  <!-- содержит последние версии изменившихся точек. -->
</insert>

<erase>
  <way ... />
  <!-- содержит либо явно удалённые линии, либо старые версии, заменённые новыми. -->
</erase>
<keep>
  <way ... />
  <!-- содержит нетронутые линии, в которых изменились точки. -->
</keep>
<insert>
  <way ... />
  <!-- содержит последние версии изменившихся линий. -->
</insert>

<erase>
  <relation ... />
  <!-- содержит либо явно удалённые отношения, либо старые версии, заменённые новыми. -->
</erase>
<keep>
  <relation ... />
  <!-- содержит отношения, в которых изменилась точка или линия (включая нетронутые линии с изменившимися точками). -->
</keep>
<insert>
  <relation ... />
  <!-- содержит последние версии изменившихся отношений. -->
</insert>

</osmAugmentedDiff>

Нумерация и временной срез

Если коротко, дополненный дифф создаётся раз в минуту, как и ежеминутные диффы. Как и последние, один дифф может включать изменения, произошедшие раньше, чем минуту назад, чтобы дать серверу нагнать планету. Далее, минутные и дополненные диффы не могут быть сопоставлены один к одному. Дополненный дифф может включать больший отрезок времени, нежели минутный, но минутный дифф никогда не разбивается на несколько дополненных диффов.

Дополненные диффы нумеруются примерно так же, как минутные, но имеют собственный счётчик.