Имам зона на карта на Google, за която маршрутът е недефиниран. Това е кампусът на моя университет. Искам да има още две сгради към него и няколко полилинии, за да определят пътищата, тъй като пътищата не са показани на картата. След това ще приложа алгоритъм A*, за да намеря най-краткия маршрут между една полилиния до другата. Картата ще бъде достъпна за Android приложение за мобилни устройства. В основното си състояние приложението актуализира местоположението на потребителя. Потребителят може да поиска например да отиде във факултета по инженерство. Сега как ще разбера къде е той, имам предвид кой е източникът на маршрута, най-близката полилиния? Така ли се правят нещата? Благодаря ти.
Персонализирано маршрутизиране на картата на Google
Отговори (3)
Използвайте данни от OpenStreetMap; можете да се присъедините към OSM като сътрудник и да добавите сгради, пътища и други неща към картата. OpenStreetMap е нещо като Wikipedia, но с карти, а не енциклопедични статии.
Изтеглете и обработете данните на OpenStreetMap за вашия кампус: вземете всички полилинии, които могат да се използват като маршрути; сортирайте техните точки; идентифицират точки, общи за повече от една полилиния - те са възли; създайте насочена графа от дъги, свързващи тези възли.
Приложете алгоритъма A*, като използвате насочената графа. A* определено е най-добрият алгоритъм за използване; бързо, коректно и добре документирано.
Използвайте GPS устройство (на което работи вашият код), за да разберете къде е вашият потребител. GPS дава позиции в ширина/дължина; Данните на OpenStreetMap също са в ширина/дължина; така че трябва да работи добре.
Това естествено ще включва известно проучване и упорита работа. Гарантирам, че ще направи това, което искате, защото аз самият го направих (комерсиално - няма да се свържа с моя продукт, защото бях потупан по кокалчетата за това; но естествено твърдя, че правенето на нещо комерсиално налага определена дисциплина) . Има много софтуер с отворен код, който да помогне с тези неща. По-специално, алгоритъмът A* е обяснен много добре в Wikipedia.
Не мисля, че алгоритъмът A* е правилният алгоритъм. За най-краткия път алгоритъмът на dijkestra е по-добър. Според wikipedia A* е само по-бърз, но има същия резултат. Всичко останало изглежда много разумно.
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 }
за възел.
Ако вашият проблем е да намерите местоположението на потребителя, тогава можете да използвате GPS. Относно получаването на най-краткия маршрут: A* е по-бързо от dijkestra, така че е добър избор, но получаването на резултата вероятно трябва да бъде от възлите на полилиниите, а не от една полилиния към другата