от
Я всегда был заинтригован маршрутной карте, но я не нашел каких-либо хороший вводный (или даже продвинутый!) учебники уровня на нем. У кого-нибудь есть какие-нибудь советы, подсказки и т. д.? Обновление: я в первую очередь ищу указатели, как система карт (структуры данных, алгоритмы и т. д.).

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

10 Ответы

0 голосов
от
Я всегда был заинтригован маршрутной карте, но я не нашел каких-либо хороший вводный (или даже продвинутый!) учебники уровня на нем. У кого-нибудь есть какие-нибудь советы, подсказки и т. д.? Обновление: я в первую очередь ищу указатели, как система карт (структуры данных, алгоритмы и т. д.).
0 голосов
от
Взгляните на проект открытые уличные Карты, чтобы увидеть, как подобные вещи решаются в действительно проект свободного программного обеспечения, используя только поставляемую пользователей и лицензированные материалы и Вики-содержащих материалов вы можете найти интересные. Несколько лет назад ребята, где довольно легко собирается и ответил на многочисленные вопросы, которые я имел, поэтому я не вижу причин, почему они до сих пор не приятный букет.
0 голосов
от
Барри Brumitt, один из инженеров карт функция Google поиска маршрутов, написал пост на тему, которая может быть интересна: Дорога к лучший путь-найти 11/06/2007 03:47:00 вечера
0 голосов
от
* Это на самом деле гораздо ближе к алгоритмам сопоставления производства. Она требует совсем немного меньше разведки по сравнению с оригинальным алгоритмом Dijikstra по.
0 голосов
от
По маршрутной карте, вы имеете в виду поиск кратчайшего пути по дорожной сети? Алгоритм Дейкстры поиска кратчайшего пути является самым известным. В Википедии есть не плохое интро: http://en.wikipedia.org/wiki/Dijkstra's_algorithm Здесь апплета Java, где вы можете увидеть его в действии: http://www.dgp.toronto.edu/people/JamesStewart/270/9798s/Laffra/DijkstraApplet.html и Google, вы привести исходный код в любой язык. Реальные реализации для создания автомобильных маршрутов будет включать в себя совсем немного данных на улично-дорожной сети, которая описывает издержки ассоциируют с пересечения одной и узлы дорог иерархии сети, средняя скорость, приоритет перекрестка, сигнал светофора ссылок, запрещенных поворотов и т. д.
0 голосов
от
Вместо Апис обучения для каждого поставщика услуг карты ( как gmaps, достаточно, Ymaps API), который его хорошо учиться Mapstraction "Mapstraction-это библиотека, которая предоставляет единый API для различных API-интерфейсов отображение на JavaScript" Я хотел бы предложить вам перейти к URL-адресу и узнать общее API. Есть хорошее количество инструкции тоже.
0 голосов
от
Я еще, чтобы найти хороший учебник по маршрутизации, но есть много код для чтения: Есть ГПЛ маршрутизации приложений, использующих данные OpenStreetMap, например, Gosmore, который работает на Windows ( мобильные) и Linux. Есть ряд интересных [приложения, используя те же данные, но gosmore есть некоторые интересные, например, используется интерфейс с веб-сайтов. Самая большая проблема с маршрутизацией-это неверные данные, и вам никогда не получить достаточно хорошие данные. Так что если вы хотите попробовать сохранить ваш тест очень местным, так что вы можете контролировать данные лучше.
0 голосов
от
С концептуальной точки зрения, представьте себе, падая камнем в воду и смотреть на круги. Маршруты будут представлять пруд и камень ваша стартовая позиция. Конечно, алгоритм нужно будет искать какой-то доле из N^2 пути как расстояние n увеличивается. Вы бы взяли вы исходное положение и проверить все доступные пути от этой точки. Затем рекурсивный вызов для пунктов в конце этих путей и так далее. Вы можете увеличить производительность, не двойной бэк на пути, не повторной проверки маршрутов в точке, если она уже покрыта и отказываться от путей, которые выполняются слишком долго. Альтернативный способ заключается в использовании феромонов подход муравейник, где муравьи случайно от начальной точки и оставить след, который строит больше муравьев пересекают заданной траектории. Если вы посылаете (достаточно) муравьи с точки начальную и конечную точки, то в конце концов путь с сильным запахом будет самым коротким. Это ведь самый короткий путь, побывал еще раз в данный период времени, учитывая, что Муравьев ходьбы в равномерном темпе. Редактировать @ Spikie В качестве дальнейшего объяснения, как реализовать алгоритм пруд - потенциал структур данных выделены: Вам необходимо хранить карту в сети. Это просто набор
nodes
и
edges
между ними. Набор
nodes
представляют собой
route
. Ребро соединяет две вершины (возможно, и тот же узел) и имеет соответствующий
cost
, таких как
distance
или
time
, чтобы пройти по краю. Ребро может либо быть двунаправленным или однонаправленным. Думаю, что проще просто иметь однонаправленный и дважды два способ путешествия между узлами (т. е. одно ребро из A в B, а другой для B в A). К примеру представьте себе трех вокзалов расположенных в равносторонний треугольник, направленный вверх. Есть также еще трех станций каждый на полпути между ними. Края соединить все соседние участки вместе, в окончательной схеме будет иметь перевернутый треугольник, сидит внутри большего треугольника. Обозначить узлы, начиная с нижней левой, идя слева направо и вверх, как A,B,С,D,Е,F (Ф вверху). Предположим, края можно двигаться в любом направлении. Каждое ребро имеет стоимость 1 км. Итак, мы желаем маршрут от нижней левой к верхней станции Ф. Существует несколько возможных маршрутов, в том числе те, которые еще на себя, например, ABCEBDEF. У нас есть рутина сказать,
NextNode
, который принимает
node
и
cost
и вызывает сама себя для каждого узла он может поехать. Очевидно, если мы позволим такому распорядку работать она будет в конечном итоге открыть все маршруты, в том числе те, которые являются потенциально бесконечной в длину (например, ABABABAB и т. д.). Мы остановить это происходит путем проверки против
cost
. Всякий раз, когда мы посещаем узел, который не посещал до этого, мы поставили оба стоимость и узел мы пришли от этого узла. Если узел был посещен прежде чем мы проверяем в отношении существующей стоимости и если у нас дешевле, то мы обновляем узел и нести на (рекурсией). Если у нас дороже, то мы пропустить узел. Если все узлы пропускаются затем мы выходим из рутины. Если мы ударим нашей целевой узел, то мы тоже выходим из рутины. Таким образом, все жизнеспособные маршруты проверены, но исключительно только тех, с наименьшими затратами. По окончании процесса каждый узел будет иметь самую низкую стоимость, чтобы добраться до этого узла, в том числе и наш целевой узел. Чтобы узнать маршрут мы будем работать в обратном направлении от целевого узла. Так как мы оставили узел, мы пришли вместе со стоимостью, мы просто запрыгнуть задом построения маршрута. Для нашего примера мы бы в конечном итоге с чем-то вроде: Узел - (Общая) Стоимость 0 - От Узла Нет Узел B - Стоимость 1 - От Узла A Узел C - Стоимость 2 - От Узла B Узел D - Стоимость 1 - От Узла A Узел е - Стоимость 2 - от узла д / Цена 2 - от узла B (это исключение, так как есть равной стоимости) Узел F - Стоимость 2 - От Узла D Поэтому кратчайший маршрут АДФ.
0 голосов
от
Из моего опыта работы в этой области,* делает работу очень хорошо. Это (как говорилось выше) быстрее, чем алгоритм Дейкстры, но все-таки достаточно простой для обычно грамотный программист для реализации и понимания. Построение маршрутной сети-это самая трудная часть, но это может быть разбита на ряд простых шагов: вам все дороги; отсортировать точки в порядке; составлять группы из одинаковых точек на разных дорогах, в пересечениях (узлах); добавить дугами в обоих направлениях, где узлы подключения (или только в одном направлении по односторонней дороге). Сам алгоритм поиска a* хорошо описана в Википедии. Ключевое место для оптимизации является выбор лучшей узел из открытого списка, для которых нужна высокая производительность приоритетной очереди. Если вы используете c , вы можете использовать priority_queue адаптер стл. Настройка алгоритма маршрутизации на различных участках сети (например, пешеходов, автомобилей, общественного транспорта и т. д.) в пользу скорости, расстояния или других критериев довольно легко. Нужно писать фильтры, чтобы контролировать, какие сегменты маршрута доступны, при построении сети, и которых вес присваивается каждой.
0 голосов
от
Еще одна мысль приходит в голову о стоимости каждого перемещения, но увеличивает время и вычислительную мощность, достаточную для вычисления. Пример: есть 3 способа, я могу взять (где я живу), чтобы перейти из точки А в точку Б, по Гуглмапсе. Garmin единиц предлагаем каждому из этих 3 путей в расчет
Quickest
маршрут. После прохождения каждого из этих маршрутов много раз и усреднять (очевидно, что будут ошибки в зависимости от времени суток, количество кофеина и т. д.), Я чувствую, что алгоритмы могут учитывать количество изгибов дороги на высокий уровень точности, например, прямая дорога на 1 км будет быстрее, чем 1 км дороги с крутыми поворотами в нем. Не практическое предложение, но, безусловно, один я использую, чтобы улучшить результат моих ежедневных поездок.
...