Как получить радиус кривой в симуляции трафика?

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

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

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

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

2 ответа

Решение

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

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

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

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

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

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

Другие вопросы по тегам