Особенности обработки отношений для визуализатора

Возникла следующая проблема - после обработки XML файла получаются данные, которые при отображении выглядят не так, как бы хотелось. В частности, пока заметны 2 серьезных недостатка:

  1. Некоторые нужные вещи не рисуются. Например, вместо границ областей или государств присутствуют только отдельные их куски. Предположительная причина: один way описывает несколько разных объектов, некоторые из которых - исключительно в отношениях (сам way не имеет соответствующих тегов).
  2. Предпринятый алгоритм восстановления имен у node и way, не имеющих таковых, при котором имя заимствуется у родительского отношения, приводит к нежелательным эффектам, например, вместо номера дома отображается название улицы.

Для way и node применена общая классификация типов, определяемая в основном парой key=value, например, highway=secondary.
Основная схема алгоритма:

  1. Анализируются отношения, при этом:
  • определяется тип самого отношения (street, campus…),
  • определяется тип отношения, вычисляемый по тегам аналогично node/way,
  • для отношений составляются списки входящих узлов,
  • для отношений составляются списки входящих путей,
  • для узлов, входящих в отношения, составляются списки содержащих их отношений,
  • для путей, входящих в отношения, составляются списки содержащих их отношений,
  1. Анализируются пути, при этом:
  • исходя из тегов, определяется тип пути,
  • если сочетание тегов таково, что у отношение удовлетворяет нескольким типам, то, за исключением некоторой таблицы сочетаемости, путь дублируется как пути разных типов, проходящие по одним и тем же узлам,
  • если тип пути выявить не удалось, и он при этом входит в отношение, то на путь переносится тип (второй - в смысле node/way) отношения,
  • если у пути нет имени, и он при этом входит в отношение, ему приписывается имя отношения,
  1. Анализируются узлы, при этом:
  • узлы с нераспознанным типом отбрасываются.
  1. Если имеется объект типа building, не имеющий имени, но имеющий номер дома, в качестве имени подставляется номер дома. Если нет ни имени, ни номера дома, итакой объект (здание) отбрасывается.

При этом отношения используются ТОЛЬКО для восстановления типов и имен объектов, для которых таковые не удалось установить по собственным тегам. При этом большая часть результата анализа отношений не используется.

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