В процессе разработки программы, реализующей сабж, столкнулся с небольшой проблемкой:
как следует поступать при обнаружении на разных картах тега с одинаковым id (и одинаковой версии) вида abc и dbe соответственно (одинаковыми буквами обозначены одинаковые фрагменты, разными - разные).
ситуация abcde и bfceg однозначно разруливается как abfcdeg. А вот что в первом случаен - непонятно.
Могу предложить 4 варианта:
Все объединяется в произвольном порядке (IMHO подходит для отношений и категорически не подходит для путей).
Берется тот тег, который длиннее (понятно, что это не лучше, чем брать более короткий - но все от жадности).
Оба пропускаются.
Включаются оба тега, причем у одного из них id меняется на фиктивный (ну и если этот тег входит в отношение, то в это отношение добавляется номер фиктивного тега).
Так что оптимальнее с учетом накопленного сообществом опыта?
Строго говоря, в xml это называется элементом. Но беда в том, что у слова элемент есть и другие значения. Кроме того, зачастую тегом называют все, что заключено между угловыми скобками, включая атрибуты. Один из последних называется id:
“У тега “node” атрибут “id”.”
Так вот, выше приведен элемент, не содержащий дочерних элементов, а если последние присутствуют, то нередки случаи, когда в разных фрагментах карты у элементов с одинаковым id имеются различные наборы дочерних элементов. Именно обработка этой ситуации меня и интересует.
Теперь понятнее?
Втрое предложение в первом посте - версии тоже совпадают.
Предположение, что путь или отношение режутся по границе и в каждый из фрагментов карты они попадают лишь частично. Вот вопрос в том и заключается, как их объединить при слиянии фрагментов.
Никак. Эвристикой.
При обрезке, случай, когда вей / нода / релейшен не соответствует тому, что было в исходном файле, однозначно является ошибкой реализации обрезчика. И надо пинать тех, кто предоставляет такие обрезки.
Вообще-то у меня складывается впечатление, что это повсеместная практика. Т.е. одно из двух - либо это глюк API или утилиты, которой пользуются для обрезки (osmosis), либо это - наиболее разумный вариант решения. (другими словами, остальные варианты еще хуже).
Но надежды на то, что хоть где-то удастся раздобыть файлы без таких “дефектов” у меня практически нет. Если я не прав, поделитесь ссылочкой. Интересуют карты РФ и Украины. (и именно их мне и нужно сливать)
Ну вот и противоположная оценка факта “однозначной ошибки реализации обрезчика”
А я пока надеюсь, что склеить РФ с Украиной будет проще, чем вырезать их вместе из Планеты.
А насчет того, что “Режут-то не для того что бы потом объединять”, позволь усомниться. РФ режут на маленькие кусочки, которые потом как раз пытаются объединить, притом, с переменным успехом.
gis-lab не надо пинать, к нему надо обратиться с дарами и он ответит
все резки на гислабе (кроме одной) делаются с completeways=yes, то есть, если вылезает линия за полигон обрезки, она попадает в вырезку целиком.
единственная вырезка которая делается без completeways=yes, но с clipIncompleteEntities=true это вырезка генерального дампа (все страны), который вырезается в самом начале и который в свою очередь режется на регионы. Т.е. если вы попали на границу общего полигона обрезки, можете и вправду быть отрезаны.
Тем не менее, мною неоднократно были встречены и отрепорчены баги в осмосисе (которым все режется), так что глюки могут быть. О них стоит сообщать.
Ну, обвинять gis-lab вряд ли возможно хотя бы потому, что у Украины, скачанной из другого источника, проблемы те же.
Что же касается даров, то я не спонсор, так что единственное, что могу предложить - это свое участие в каком-либо проекте.
Увы, практика опровергает это утверждение: факт, что вырезках РФ и Украины присутствуют объекты под одним id и с совпадающей версией, но различные по содержимому. Причем, это различие сводится к тому, что с КАЖДОЙ стороны выброшенной оказывается часть ссылок на входящие объекты (т.е. на узлы в пути или узлы и пути в отношении). Если бы полигон в файле РФ всегда содержал в себе все точки полигона Украины, можно было бы предположить, что это кто-то другой режет полигоны, но ситуация симметрична, следовательно и в вырезках gis-lab встречаются порезанные полигоны.
Увы, это последнее предположение, как мне кажется, не соответствует действительности (но здесь я могу ошибаться - требуется более детальный анализ). Я ведь могу отследить нарушение целостности объекта лишь по единственному признаку - в другом фрагменте карты содержится его аналог с “дополнительными” дочерними объектами. Если разные фрагменты карты режутся без разрезания объектов на части из одного куска, такое в принципе невозможно.
Правда, следует уточнить, что такое “все страны”. Если Украина в них не входит, то делать столь однозначный вывод, конечно, нельзя.
Так что такое “все страны”? Входит ли в их число Украина? И можно ли этот кусок скачать откуда-то целиком без разрезания на отдельные страны?
Ну, я осмосисом не пользуюсь, поэтому писать по этому поводу багрепорты считаю себя не вправе.
Хотя, думаю, разобраться в причинах такого “странного” поведения все-таки следовало бы.
Могу при необходимости выслать пару osm-файлов, содержащих ТОЛЬКО несовпадающие объеты. Могу провести по ним еще какую-либо статистику. Только все это не раньше понедельника. Если что нужно - спрашивайте.
ОК
В понедельник доберусь до компа, на котором это все анализируется, и тогда сообщу. Правда, я скачиваю новую версию карт 1-2 раза в месяц, так что данные не очень свежие, но, думаю, если приведу несколько id, то среди них обязательно окажется и тот, чья версия не изменилась.
PS. Да, что, все-таки, такое “все страны” и есть ли возможность утянуть эту вырезку целиком? (5 га - не 160 га, если это то, о чем я думаю)
То есть по внешним границам этих стран?
Ну, тогда Украина как раз попадает за внешнюю границу и часть объектов вдоль этой границы может быть порезана.
Кстати, я посмотрел в http://gis-lab.info/data/osm/ есть папочка, посвященная Украине. Только, увы, пустая :(.
За ссылку спасибо, будем посмотреть.