Клуб API Карт

Маршруты из БД

eLevn1989
9 января 2011, 01:34

Здраствуйте! Такая проблема, на диплом делаю что-то типа GPS-навигации с использованием Яндекс-карт. Так вот реализовал добавление маршрута, путем рисования ломаной на Яндекс-карте, координаты заносятся в БД.

Но как реализовать так, чтобы при просмотре маршрута высвечивалась карта и рядом список моих маршрутов, чтобы я нажал на одном - и он по данным из БД нарисовался на карте.

17 комментариев
Подписаться на комментарии к посту
Можно использовать YMapsML
Посмотрите еще этот пример.
В нем из YMapsML приходят плэйсмарки, в вашем случае будут ломаные.
Вариант  в общем один:
ajax запрос на сервер и обработчик ответа рисующий маршрут.
То, что предложил Лунный программист, работает по этой схеме.
 // Загрузка YMapsML
            var ml = new YMaps.YMapsML("http://api.yandex.ru/maps/ymapsml/examples/xml/menufromymapsml.xml");

Какой адрес мне писать?
мои данные храняться у меня в БД, как мне сгенерить xml-файл, чтобы обращаться к нему не на вашем сервере а на своем!
ymapsml-файл должен быть доступен для яндекса, локальный адрес не прокатит.
у меня есть файл.php который как-бы формирует xml, его надо выложить не внешний сервер?
на любой хостинг с поддержкой php и доступом к нему по http
выложил, теперь выдает ошибку format is not racognized: application/octer-stream

уже незнаю что делать, из-за чего она выскакиевает
мой пхп обращаеться к БД, может БД нужно тоже на хостинг переносить?
как он с ней свяжеться, если она у меня на компе
мой пхп обращаеться к БД, может БД нужно тоже на хостинг переносить?
как он с ней свяжеться, если она у меня на компе


Ну без БД откуда данные в xml попадут?


выложил, теперь выдает ошибку format is not racognized: application/octer-stream

Нужно выставить правильный http-заголовок
header('Content-Type: text/xml');
Изначально Вы не упомянули что разрабатываетесь локально,
а не на публичном хостинге, тогда вариант с YMapsML я бы не предлагал.

Как вариант, вместо YMapsML, Вы можете сгенерить из php javascript-массив,
в котором будете передавать данные для АПИ:
названия/идентификатор трека (для ссылки),
строку c закодированными вершинами ломаной
и уровни видимости.

примерно такой:

[
{
    id: 'track1',
    points: "6qE9AjZzUgN1-v__v_X__x_1__-dBgAA",
    levels: 'AAA'
},
{
    id: 'track2',
    points: "6qE9AjZzUgN1-v__v_X__x_1__-dBgAA" ,
    levels: 'AAA'
},
{
    id: 'track3',
    points: "6qE9AjZzUgN1-v__v_X__x_1__-dBgAA" ,
    levels: 'AAA'
},
]

В javascript по нему итерироваться и создавать меню для добавления ломаных на карту
Подробно о том как кодировать вершины ломаной написано в документации
ничего не понял) но спасибо
зачем мне кодировать вершины, мне просто нужно чтобы на карте нарисовались ломаные по координатам из моей БД, и чтобы я выбирал отображение только одной ломаной из нескольких десятков.
но спасибо
зачем мне кодировать вершины, мне просто нужно чтобы на карте  нарисовались ломаные по координатам из моей БД, и чтобы я выбирал  отображение только одной ломаной из нескольких десятков.


Ты конечно можешь из php генерить js-код создающий ломаные обычным способом.

Через конструктор
YMaps.Polyline([
new YMaps.GeoPoint(...),
new YMaps.GeoPoint(...),
new YMaps.GeoPoint(...),
_и_еще_500_таких_new YMaps.GeoPoint(...),
]);

Но представь сколько это будет кода.

А можешь сгенерить строку из 50-100 символов и скормить ее YMaps.Polyline.fromEncodedPoints

И потом кодированные вершины в объекте ты сможешь получить ajax-ом,
а как ты передашь вызовы конструкторов? будешь eval-ить?
с Аяксом вообще не знаком, а как сгенерить такой js-код?,
 сколько кода мне неважно. Главное что-бы работало, у меня линий будет отсилы 50-100.

В итоге мне нужно получить Карту и справа список маршрутов, я кликаю на одном - он рисуется, на другом кликаю и он рисуеться. Кликаю еще раз он пропадат.

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

а что именно не получается?
Мы же не знаем как ты хранишь ломаные в базе.
Вот так я сохраняю координаты ломаной в базу:
http://www.w3.org/1999/xhtml">

    API Яндекс.Карт - рисуем полилинию и сохраняем в БД MySQL
   
   


 


 
 
   
   
   

    
   

     
   

    

Посмотреть





База следующего вида:
CREATE  TABLE `userslineymap` (
`id_line` int(20) NOT NULL auto_increment,
`colour` varchar(10) NOT NULL,
`width` int(10) NOT NULL,
`users` varchar(255) NOT NULL,
`coordinats` text NOT NULL,
PRIMARY KEY   (`id_line`)
)
Для начала напишите скрипт, который возвращает данные по вашим маршрутам в формате json или в виде javascript.

Сделать это несложно. Создаете скрипт get-data.php примерно со следующего вида:

    header('Content-type: application/json'); // Нужные заголовки
   
    // Сформируйте данные и закодируйте их в json функцией json_encode
    // или любым другим способом
    $arr = array ('route 1'=>'35,55;56,34','route 2'=>'36,54;35,57;35.5,56.5'); 
    echo json_encode($arr);
?>

В javascript'е необходимо получить эти данные и построить меню:

YMaps.jQuery.post("get-data.php", function (response) {
   // строите здесь меню
});

Меню строить можно по аналогии с примером из документации.