Слияние карт

В процессе разработки программы, реализующей сабж, столкнулся с небольшой проблемкой:

  • как следует поступать при обнаружении на разных картах тега с одинаковым id (и одинаковой версии) вида abc и dbe соответственно (одинаковыми буквами обозначены одинаковые фрагменты, разными - разные).
    ситуация abcde и bfceg однозначно разруливается как abfcdeg. А вот что в первом случаен - непонятно.

Могу предложить 4 варианта:

  1. Все объединяется в произвольном порядке (IMHO подходит для отношений и категорически не подходит для путей).
  2. Берется тот тег, который длиннее (понятно, что это не лучше, чем брать более короткий - но все от жадности).
  3. Оба пропускаются.
  4. Включаются оба тега, причем у одного из них id меняется на фиктивный (ну и если этот тег входит в отношение, то в это отношение добавляется номер фиктивного тега).

Так что оптимальнее с учетом накопленного сообществом опыта?

Начнем с того, что… кгхм… с того, что у тегов нет id :3

Строго говоря, в xml это называется элементом. Но беда в том, что у слова элемент есть и другие значения. Кроме того, зачастую тегом называют все, что заключено между угловыми скобками, включая атрибуты. Один из последних называется id:

  <node id="27497545" version="5" timestamp="2009-03-14T10:43:28Z" uid="34428" user="usm78-gis" changeset="807970" lat="57.9489438" lon="33.3252665"/>

“У тега “node” атрибут “id”.”
Так вот, выше приведен элемент, не содержащий дочерних элементов, а если последние присутствуют, то нередки случаи, когда в разных фрагментах карты у элементов с одинаковым id имеются различные наборы дочерних элементов. Именно обработка этой ситуации меня и интересует.
Теперь понятнее?

andriano, именно для этого (optimistic locking) там есть атрибут version.

Втрое предложение в первом посте - версии тоже совпадают.
Предположение, что путь или отношение режутся по границе и в каждый из фрагментов карты они попадают лишь частично. Вот вопрос в том и заключается, как их объединить при слиянии фрагментов.

Никак. Эвристикой.
При обрезке, случай, когда вей / нода / релейшен не соответствует тому, что было в исходном файле, однозначно является ошибкой реализации обрезчика. И надо пинать тех, кто предоставляет такие обрезки.

То есть gis-lab?

Вообще-то у меня складывается впечатление, что это повсеместная практика. Т.е. одно из двух - либо это глюк API или утилиты, которой пользуются для обрезки (osmosis), либо это - наиболее разумный вариант решения. (другими словами, остальные варианты еще хуже).
Но надежды на то, что хоть где-то удастся раздобыть файлы без таких “дефектов” у меня практически нет. Если я не прав, поделитесь ссылочкой. Интересуют карты РФ и Украины. (и именно их мне и нужно сливать)

Panet.osm?

Если никто не может “хорошо” отрезать, бери целиком?

Кто-нибудь в курсе, сколько это сегодня весит в развернутом виде? Год назад, вроде, было около 130 Гбайт.
Боюсь, я до этого пока не созрел.

160 гиг. Все обрезки делаются все равно из него, на гис-лаб тоже.

Режут-то не для того что бы потом объединять. И если из вея при обрезке выкинуты ноды которые лежат вне полигона обрезки, это только правильно :smiley:

Ну вот и противоположная оценка факта “однозначной ошибки реализации обрезчика”

А я пока надеюсь, что склеить РФ с Украиной будет проще, чем вырезать их вместе из Планеты.
А насчет того, что “Режут-то не для того что бы потом объединять”, позволь усомниться. РФ режут на маленькие кусочки, которые потом как раз пытаются объединить, притом, с переменным успехом.

gis-lab не надо пинать, к нему надо обратиться с дарами и он ответит :slight_smile:

все резки на гислабе (кроме одной) делаются с completeways=yes, то есть, если вылезает линия за полигон обрезки, она попадает в вырезку целиком.

единственная вырезка которая делается без completeways=yes, но с clipIncompleteEntities=true это вырезка генерального дампа (все страны), который вырезается в самом начале и который в свою очередь режется на регионы. Т.е. если вы попали на границу общего полигона обрезки, можете и вправду быть отрезаны.

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

Зачем ? O_o

//gis-lab не надо пинать, к нему надо обратиться с дарами и он ответит

подношения клянчите? :))

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

Увы, практика опровергает это утверждение: факт, что вырезках РФ и Украины присутствуют объекты под одним id и с совпадающей версией, но различные по содержимому. Причем, это различие сводится к тому, что с КАЖДОЙ стороны выброшенной оказывается часть ссылок на входящие объекты (т.е. на узлы в пути или узлы и пути в отношении). Если бы полигон в файле РФ всегда содержал в себе все точки полигона Украины, можно было бы предположить, что это кто-то другой режет полигоны, но ситуация симметрична, следовательно и в вырезках gis-lab встречаются порезанные полигоны.

Увы, это последнее предположение, как мне кажется, не соответствует действительности (но здесь я могу ошибаться - требуется более детальный анализ). Я ведь могу отследить нарушение целостности объекта лишь по единственному признаку - в другом фрагменте карты содержится его аналог с “дополнительными” дочерними объектами. Если разные фрагменты карты режутся без разрезания объектов на части из одного куска, такое в принципе невозможно.
Правда, следует уточнить, что такое “все страны”. Если Украина в них не входит, то делать столь однозначный вывод, конечно, нельзя.
Так что такое “все страны”? Входит ли в их число Украина? И можно ли этот кусок скачать откуда-то целиком без разрезания на отдельные страны?

Ну, я осмосисом не пользуюсь, поэтому писать по этому поводу багрепорты считаю себя не вправе.
Хотя, думаю, разобраться в причинах такого “странного” поведения все-таки следовало бы.
Могу при необходимости выслать пару osm-файлов, содержащих ТОЛЬКО несовпадающие объеты. Могу провести по ним еще какую-либо статистику. Только все это не раньше понедельника. Если что нужно - спрашивайте.

Сам удивляюсь.
Но все мои попытки найти, скажем, РФ в *.МР одним куском так и не увенчались успехом.

adriano, про вырезки украины ничего сказать не могу, пока мы их не делаем.

про РФ, достаточно будет ID обрезанного объекта, дальше попробую глянуть, почему он обрезался, когда не должен был.

ОК
В понедельник доберусь до компа, на котором это все анализируется, и тогда сообщу. Правда, я скачиваю новую версию карт 1-2 раза в месяц, так что данные не очень свежие, но, думаю, если приведу несколько id, то среди них обязательно окажется и тот, чья версия не изменилась.

PS. Да, что, все-таки, такое “все страны” и есть ли возможность утянуть эту вырезку целиком? (5 га - не 160 га, если это то, о чем я думаю)

Все страны перечисленные здесь:
http://gis-lab.info/projects/osm-export.html

Ссылка для скачивания общего дампа, того что режется с clipIncompleteEntities=true
http://gis-lab.info/data/osm/full.osm.bz2

То есть по внешним границам этих стран?
Ну, тогда Украина как раз попадает за внешнюю границу и часть объектов вдоль этой границы может быть порезана.
Кстати, я посмотрел в http://gis-lab.info/data/osm/ есть папочка, посвященная Украине. Только, увы, пустая :(.
За ссылку спасибо, будем посмотреть.