Снова про area

Конечно, одна из основных проблем модели OSM — отсутствие типа для полигонов. В очередной блогопростыне Jochen Topf напомнил об этом, а заодно дополнил предложение типа данных небольшим комментарием про его использование:
Определим «area» аналогично объектам «way»: список ссылок на точки и набор тегов. Первая и последняя точка в списке должны совпадать. Как будет выглядеть API для редактирования подобных объектов? Пользователь отправляет запрос с bbox для редактирования. Чтобы работать с запрошенной областью, нам нужны все точки внутри этого прямоугольника, плюс как минимум по одной дополнительной точке с краёв линий. Если полигон входит целиком — хорошо, иначе потребуется знать, какая сторона внешняя, а какая внутренняя. Для этого постановим, что все точки должны быть отсортированы по часовой стрелке (можно и наоборот, но чаще сортируют так). Теперь редактор сможет нарисовать многоугольник правильно (внутри загруженной области): с учётом тегов у него будут все требуемые данные.
Далее он утверждает, что если отредактированная таким образом часть полигона корректна, то и весь полигон не поломается. «У меня нет математического доказательства, но буду рад примерам обратного». В блоге, правда, отключены комментарии: интересно, а если просто отразить весь набор точек половины полигона относительно перпендикуляра к границе загруженной области?
Поделиться
Отправить
2012   блоги

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

17 комментариев
dkiselev 2012
А дырочки как вырезать?
Ivan 2012
Если дырочки в МП и закручены в нужную сторону, то отчего ж не вырезать.
Если просто отражать — не факт, что он замкнется в отражении.
Ivan 2012
«We obviously need a lot more discussion in the community» — и комментарии отключены. Эпично.
Ivan 2012
Еще логическая ошибка у него, где он рассуждает про то, что если вносимые правки ограничены скачанным bbox, то целая area останется валидной. Это может быть не так в случае, если bbox пересекает один из сегментов area, но не содержит ни одной точки этого сегмента.
OverQuantum 2012
Отправьте ему кто-нить
http://ge.tt/8zXzcRS/v/0?c

Ivan, икзакли! :)
Ivan 2012
Уже, только свое наваял ))
Ivan 2012
Ответил, что такие линии тоже надо выгружать. Логично, кто б спорил.
Vovanium 2012
Если допустить, что степень «внутренности» может быть больше 1 (полигон в полигоне) и меньше 0 (дырка в пустом месте) то можно считать такую картинку валидной. Если не устраивает, то можно ловить сторонним валидатором, но всё равно, такой полигон сломать куда сложнее, чем его имитацию, что сейчас существует.
Ivan 2012
Это ж самопересечение. Не понял, при чем тут «степень внутренности».
fserges 2012
И тогда наконец отношения станут отношения а не «всем подряд».
Vovanium 2012
Это три полигона, два из которых с положительным направлением обхода и один с отрицательным.
Вообще для правильной работы частичного редактирования алгоритм отбора отрезков должен быть соответствующим, а не по попаданию вершин в зону. Хотя бы по пересечению bounding box.
Ivan 2012
Vovanium, о каких трех полигонах вы говорите? На картинке OverQuantum один bbox и один полигон — до и после разрушающего валидность изменения.
>алгоритм отбора отрезков должен быть соответствующим
так это и обсуждаем, Jochen просил контпример для его алгоритма — мы ему его привели.
dkiselev 2012
Вопрос лишь что дешевле, посчитать на сервере все требуемые линии, или отдать клиенту весь набор точек чтоб сам разбирался.
freeExec 2012
Ну в таком случае при аплоаде можно вернуть ошибку и заставить клиента докачать весь объект целиком.
Hind 2012
Тред не читал, но в свое время предлагал такой способ хранения и обмена для типа area:

<area>
<nd ref=«1» />
<nd ref=«2» />
<nd ref=«3» />
<nd ref=«4» />
<nd />
<nd ref=«5» />
<nd ref=«6» />
<nd ref=«7» />
<nd ref=«8» />
</area>

Вот вам и область.
Но не надо забывать о том, что мультиполигоны применяются и для создания областей с числом нодов более 2000.
Vovanium 2012
>Vovanium, о каких трех полигонах вы говорите? На картинке OverQuantum один bbox и один полигон — до и после разрушающего валидность изменения.
Ivan, на *картинке* явно видно три полигона с общими точками. То, что они представлены одной цепочкой вершин без пересечений — «особенность реализации». Inkscape (а наверное и сам стандарт SVG) например вполне считает подобные фигуры валидными.
>Но не надо забывать о том, что мультиполигоны применяются и для создания областей с числом нодов более 2000.
Да в общем-то пора бы научить API отдавать линии кусками и снять ограничение на их длину.
Ivan 2012
>Ivan, на *картинке* явно видно три полигона с общими точками
OverQuantum, расскажите пожалуйста, что же все-таки на картинке. Мнения разделились :)
Популярное