Определить объекты с одной и с другой стороны дороги
-
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 07 окт 2012, 17:31
- Репутация: 0
Определить объекты с одной и с другой стороны дороги
Добрый день!
Подскажите, пожалуйста, в какую сторону копать?
У меня есть база(postgis), в которой много разных объектов с координатми (точками). Как правило, объекты расположены вдоль дорог (polylines). Мне нужно каким-то образом определять объекты, которые с одной и с другой стороны дороги. Причём "область допуска" нужно иметь возможность регулировать. Т.е. есть линия дороги и хочу получить список объектов справа от дороги и слева (считаем линию улицы направленной и право и лево определить можно).
Эту задачу можно свести к получению из линии многоугольника в форме полосы с одной стороны дороги и с другой нужной ширины. Система у меня написана на ruby, но это не принципиально, если это просто делается другими средствами, можно и что-то другоe использовать попробовать.
На данный момент я вижу некрасивое решение. Т.к. всё это будет относительно локально (улица вряд ли больше, скажем, 10км), то все эти рассчёты можно производить просто в неугловых координатах - погрешности будут весьма не большими (как я могу судить) и для моих задач несущественными. Однако, это, конечно, велосипед с костылём, но пока не нашёл примеров как можно такие расчёты реализовать на угловых gps-координатах. Вернее, если засесть и вспоминать чему учили в инстутите, рано или поздно, я это осилю, но боюсь это будет слишком дорогое решение. Наверняка есть библиотеки, реализующие эту логику.
Заранее большое всем спасибо за советы!
Подскажите, пожалуйста, в какую сторону копать?
У меня есть база(postgis), в которой много разных объектов с координатми (точками). Как правило, объекты расположены вдоль дорог (polylines). Мне нужно каким-то образом определять объекты, которые с одной и с другой стороны дороги. Причём "область допуска" нужно иметь возможность регулировать. Т.е. есть линия дороги и хочу получить список объектов справа от дороги и слева (считаем линию улицы направленной и право и лево определить можно).
Эту задачу можно свести к получению из линии многоугольника в форме полосы с одной стороны дороги и с другой нужной ширины. Система у меня написана на ruby, но это не принципиально, если это просто делается другими средствами, можно и что-то другоe использовать попробовать.
На данный момент я вижу некрасивое решение. Т.к. всё это будет относительно локально (улица вряд ли больше, скажем, 10км), то все эти рассчёты можно производить просто в неугловых координатах - погрешности будут весьма не большими (как я могу судить) и для моих задач несущественными. Однако, это, конечно, велосипед с костылём, но пока не нашёл примеров как можно такие расчёты реализовать на угловых gps-координатах. Вернее, если засесть и вспоминать чему учили в инстутите, рано или поздно, я это осилю, но боюсь это будет слишком дорогое решение. Наверняка есть библиотеки, реализующие эту логику.
Заранее большое всем спасибо за советы!
-
- Гуру
- Сообщения: 5298
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Определить объекты с одной и с другой стороны дороги
Нужна линейная система координат
Берёшь первые две точки из дороги, первая точка - начало координат, по второй определяешь поворот. В этой новой СК определяешь координаты целевых точек, если X>больше длины сегмента - переходишь к следующему сегменту, знак Y определяет положение относительно дороги.
Это можно реализовать и на SQL', в виде хранимой функции, а результат возвращать как point
Берёшь первые две точки из дороги, первая точка - начало координат, по второй определяешь поворот. В этой новой СК определяешь координаты целевых точек, если X>больше длины сегмента - переходишь к следующему сегменту, знак Y определяет положение относительно дороги.
Это можно реализовать и на SQL', в виде хранимой функции, а результат возвращать как point
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 793
- Ваше звание: званий не имею
- Откуда: Москва
Re: Определить объекты с одной и с другой стороны дороги
А почему бы не использовать встроенные функции PostGIS?
Идея, может быть, дурацкая, но всё же:
-- строим вокруг линии и всех точек общую выпуклую оболочку (ST_ConvexHull);
-- режем полигон на две части линией (ST_Split ??), назначаем получившимся двум полигонам сторону (левый/правый);
-- выбираем точки, попадающие в "левый" или "правый" от дороги полигоны (ST_Contains ??)
Идея, может быть, дурацкая, но всё же:
-- строим вокруг линии и всех точек общую выпуклую оболочку (ST_ConvexHull);
-- режем полигон на две части линией (ST_Split ??), назначаем получившимся двум полигонам сторону (левый/правый);
-- выбираем точки, попадающие в "левый" или "правый" от дороги полигоны (ST_Contains ??)
Редактор материалов, модератор форума
- rhot
- Гуру
- Сообщения: 1727
- Зарегистрирован: 25 янв 2011, 17:50
- Репутация: 194
- Ваше звание: доктор
- Откуда: Архангельск
Re: Определить объекты с одной и с другой стороны дороги
amuriy, какая функция будет отвечать за назначение сторон полигонам?
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 793
- Ваше звание: званий не имею
- Откуда: Москва
Re: Определить объекты с одной и с другой стороны дороги
Мозг Очень может быть, что я чего-то недопонял в исходной задаче.rhot писал(а):amuriy, какая функция будет отвечать за назначение сторон полигонам?
Редактор материалов, модератор форума
- rhot
- Гуру
- Сообщения: 1727
- Зарегистрирован: 25 янв 2011, 17:50
- Репутация: 194
- Ваше звание: доктор
- Откуда: Архангельск
Re: Определить объекты с одной и с другой стороны дороги
а серьёзно: если найти эту функцию, то проблема была бы решена...
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
-
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 07 окт 2012, 17:31
- Репутация: 0
Re: Определить объекты с одной и с другой стороны дороги
Вероятно, я не очень хорошо описал задачу.
Попробую уточнить. Вот набросал схему:
Итак, у нас есть какая-то исходная линия (улица) ABCD, мы знаем, что A - начало, D - конец улицы. Нам нужно получить два полигона - слева от линии и справа (если смотреть из первой точки A в сторону второй B). Т.е. получается, что левый полигон это ABCDD1C1B1A1 и правый - ABCDD2C2B2A2.
Эту задачу можно свести к задаче получения точек B1/B2, имея точки A, B, С и направления (лево/право). Слева получаем B1, справа - B2. Эту задачу я почти знаю, как решить, если всё это делать в обычной системе координат. Как я предполагаю, абстрагироватся от угловой системы при таких масштабах (десяток км) можно без больших погрешностей - я прав или ошибаюсь?
Ну и почему-то мне кажется, что вся эта математика уже реализована и неразумно писать велосипед, хотелось бы её использовать.
Я может быть не совсем верно понял ваши ответы, тогда был бы весьма признателен за комментарии, но как я понял, это несколько не то. Думаю, после моего пояснения моя задача стала яснее.
Огромное спасибо за ответы!
Попробую уточнить. Вот набросал схему:
Итак, у нас есть какая-то исходная линия (улица) ABCD, мы знаем, что A - начало, D - конец улицы. Нам нужно получить два полигона - слева от линии и справа (если смотреть из первой точки A в сторону второй B). Т.е. получается, что левый полигон это ABCDD1C1B1A1 и правый - ABCDD2C2B2A2.
Эту задачу можно свести к задаче получения точек B1/B2, имея точки A, B, С и направления (лево/право). Слева получаем B1, справа - B2. Эту задачу я почти знаю, как решить, если всё это делать в обычной системе координат. Как я предполагаю, абстрагироватся от угловой системы при таких масштабах (десяток км) можно без больших погрешностей - я прав или ошибаюсь?
Ну и почему-то мне кажется, что вся эта математика уже реализована и неразумно писать велосипед, хотелось бы её использовать.
Я может быть не совсем верно понял ваши ответы, тогда был бы весьма признателен за комментарии, но как я понял, это несколько не то. Думаю, после моего пояснения моя задача стала яснее.
Огромное спасибо за ответы!
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: Определить объекты с одной и с другой стороны дороги
с математической точки зрения "право" и "лево" у линии не бывает. может быть выше и ниже или правее и левее относительно каких-то осей. в вашем случае - если предположить, что направление вы знаете и оно идет слева в вверх на право, то правое будет иметь сумму координат оси "восток" больше, чем лево. я бы сказал вместо "восток" - X, но я же не могу угадать к какой "синагоге" вы принадлежите - к ГИС или к геодезистам.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя