2014-05-15 3 views
2

Я собираюсь внедрить моделирование трафика. Для модели дороги я использую данные из OpenStreetMap. Это означает, что дорога состоит из нескольких секций, которые нанизаны вместе. Из этих разделов известны начальные и конечные точки. Транспортное средство перемещается по вектору, который указывает от начала до конечной точки. Кривые моделируются несколькими векторами, натянутыми вместе.Как получить радиус кривой в моделировании трафика?

Для того чтобы сделать симуляцию максимально реалистичной, мне нужна концепция обнаружения кривых, чтобы транспортные средства могли реагировать на это (ускорить/замедлить). Также следует определить, в какой момент начинается кривая, которая разрезает/точки, принадлежащие изгибу, и точку, в которой она заканчивается.

Как я могу определить кривые, даже если они содержат произвольное количество небольших отдельных предметов?

Спасибо за каждый намек!

+1

Вы также можете посмотреть на симулятор [eWorld] (http://eworld.sf.net) и как они осознают эту задачу. – MaM

ответ

0

Прежде всего, убедитесь, что вы понимаете базовый 0MOSM. Есть Узлы, пути и Отношения. Вы можете пропустить отношения, потому что они не содержат геометрии (кроме multipolygons, которые не используются для определения дорог).

Ways определены двумя или более nodes. Каждый путь имеет ссылку на все узлы, к которым он принадлежит. Каждый узел имеет координаты и ссылку на все пути, к которым он принадлежит. Это означает, что узел может принадлежать более чем одному пути. Например, если он находится в конце пути, то он будет принадлежать всем предыдущим путям, а также ко всем следующим путям. Или это где-то посередине пути, где он ссылается на все пересекающиеся пути, потому что путь не обязательно должен заканчиваться на перекрестке.

Следовательно, кривая может состоять из одного или нескольких способов. Поэтому, чтобы обнаруживать кривые, вы должны одновременно смотреть на последовательные узлы и последовательные пути. Вам придется вычислять сегменты дороги между каждыми двумя последовательными узлами. Расстояние между последовательными узлами и углом между последовательными сегментами дороги является основой для определения, является ли это кривой или прямой.

2

Дорога OSM из сегментов вместо кривых вы не можете получить радиус кривой.

Конечно, вы можете «угадать» кривые, основанные на наборе дорожных сегментов, но вы обнаружите, что универсального способа сделать это не существует, т. Е. В вашем списке предположений всегда будет много кривых, и ни один из них не будет действительно доказано, что существует.

Вы не можете даже рассчитывать на толщину дороги, чтобы описать поверхность, на которой двигаются транспортные средства, поскольку я сомневаюсь, что это содержится в данных OSM. (Обновление: см. Комментарий пользователя scai ниже).

+0

.. и, конечно же, поскольку OSM берет свои данные из * аналога * Real World: если вы не моделируете Нью-Йорк Сити, улицы не могут быть «прямыми» и «(регулярно) изогнутыми». – usr2564301

+1

Фактически OSM * имеет * [width] (https://wiki.openstreetmap.org/wiki/Key:width) информацию, но только [разреженно] (https://taginfo.openstreetmap.org/keys/?key=width). – scai

+1

Я думаю, что это хороший способ рассчитать ширину улицы, умножив количество дорожек на коэффициент ширины улицы. Это не так реалистично, но это достаточно точно для моей модели. – Saranto

 Смежные вопросы

  • Нет связанных вопросов^_^