Снова про area
Конечно, одна из основных проблем модели OSM — отсутствие типа для полигонов. В очередной блогопростыне Jochen Topf напомнил об этом, а заодно дополнил предложение типа данных небольшим комментарием про его использование:
Определим «area» аналогично объектам «way»: список ссылок на точки и набор тегов. Первая и последняя точка в списке должны совпадать. Как будет выглядеть API для редактирования подобных объектов? Пользователь отправляет запрос с bbox для редактирования. Чтобы работать с запрошенной областью, нам нужны все точки внутри этого прямоугольника, плюс как минимум по одной дополнительной точке с краёв линий. Если полигон входит целиком — хорошо, иначе потребуется знать, какая сторона внешняя, а какая внутренняя. Для этого постановим, что все точки должны быть отсортированы по часовой стрелке (можно и наоборот, но чаще сортируют так). Теперь редактор сможет нарисовать многоугольник правильно (внутри загруженной области): с учётом тегов у него будут все требуемые данные.Далее он утверждает, что если отредактированная таким образом часть полигона корректна, то и весь полигон не поломается. «У меня нет математического доказательства, но буду рад примерам обратного». В блоге, правда, отключены комментарии: интересно, а если просто отразить весь набор точек половины полигона относительно перпендикуляра к границе загруженной области?
Если просто отражать — не факт, что он замкнется в отражении.
http://ge.tt/8zXzcRS/v/0?c
Ivan, икзакли! :)
Вообще для правильной работы частичного редактирования алгоритм отбора отрезков должен быть соответствующим, а не по попаданию вершин в зону. Хотя бы по пересечению bounding box.
>алгоритм отбора отрезков должен быть соответствующим
так это и обсуждаем, Jochen просил контпример для его алгоритма — мы ему его привели.
<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.
Ivan, на *картинке* явно видно три полигона с общими точками. То, что они представлены одной цепочкой вершин без пересечений — «особенность реализации». Inkscape (а наверное и сам стандарт SVG) например вполне считает подобные фигуры валидными.
>Но не надо забывать о том, что мультиполигоны применяются и для создания областей с числом нодов более 2000.
Да в общем-то пора бы научить API отдавать линии кусками и снять ограничение на их длину.
OverQuantum, расскажите пожалуйста, что же все-таки на картинке. Мнения разделились :)