Персонализирано маршрутизиране на картата на Google

Имам зона на карта на Google, за която маршрутът е недефиниран. Това е кампусът на моя университет. Искам да има още две сгради към него и няколко полилинии, за да определят пътищата, тъй като пътищата не са показани на картата. След това ще приложа алгоритъм A*, за да намеря най-краткия маршрут между една полилиния до другата. Картата ще бъде достъпна за Android приложение за мобилни устройства. В основното си състояние приложението актуализира местоположението на потребителя. Потребителят може да поиска например да отиде във факултета по инженерство. Сега как ще разбера къде е той, имам предвид кой е източникът на маршрута, най-близката полилиния? Така ли се правят нещата? Благодаря ти.


person user1066429    schedule 26.11.2011    source източник


Отговори (3)


  1. Използвайте данни от OpenStreetMap; можете да се присъедините към OSM като сътрудник и да добавите сгради, пътища и други неща към картата. OpenStreetMap е нещо като Wikipedia, но с карти, а не енциклопедични статии.

  2. Изтеглете и обработете данните на OpenStreetMap за вашия кампус: вземете всички полилинии, които могат да се използват като маршрути; сортирайте техните точки; идентифицират точки, общи за повече от една полилиния - те са възли; създайте насочена графа от дъги, свързващи тези възли.

  3. Приложете алгоритъма A*, като използвате насочената графа. A* определено е най-добрият алгоритъм за използване; бързо, коректно и добре документирано.

  4. Използвайте GPS устройство (на което работи вашият код), за да разберете къде е вашият потребител. GPS дава позиции в ширина/дължина; Данните на OpenStreetMap също са в ширина/дължина; така че трябва да работи добре.

Това естествено ще включва известно проучване и упорита работа. Гарантирам, че ще направи това, което искате, защото аз самият го направих (комерсиално - няма да се свържа с моя продукт, защото бях потупан по кокалчетата за това; но естествено твърдя, че правенето на нещо комерсиално налага определена дисциплина) . Има много софтуер с отворен код, който да помогне с тези неща. По-специално, алгоритъмът A* е обяснен много добре в Wikipedia.

person Graham Asher    schedule 23.09.2012

Не мисля, че алгоритъмът A* е правилният алгоритъм. За най-краткия път алгоритъмът на dijkestra е по-добър. Според wikipedia A* е само по-бърз, но има същия резултат. Всичко останало изглежда много разумно.

person Gigamegs    schedule 26.11.2011
comment
Оценявам отговора ви, но знаете ли какъв алгоритъм се използва за получаване на най-близката полилиния? Това ще бъде източникът за моя алгоритъм на Дейкистра - person user1066429; 27.11.2011
comment
require('./functions.js')

Това не прави нищо, тъй като не експортирате нищо. Това, което очаквате е, че testFunction е глобално достъпен, по същество същият като

global.testFunction = function() {
    return 1;
}

Просто не можете да заобиколите механизма за експорт/глобални данни. Това е начинът, по който възелът е проектиран. Няма косвен глобален споделен контекст (като window в браузър). Всяка "глобална" променлива в модул е ​​хваната в своя контекст.

Трябва да използвате module.exports. Ако възнамерявате да споделите този файл със среда на браузър, има начини да го направите съвместим. За бърз хак просто направете window.module = {}; jQuery.extend(window, module.exports) в браузъра или if (typeof exports !== 'undefined'){ exports.testFunction = testFunction } за възел.

- person Gigamegs; 27.11.2011

Ако вашият проблем е да намерите местоположението на потребителя, тогава можете да използвате GPS. Относно получаването на най-краткия маршрут: A* е по-бързо от dijkestra, така че е добър избор, но получаването на резултата вероятно трябва да бъде от възлите на полилиниите, а не от една полилиния към другата

person zeacuss    schedule 09.04.2012