Клуб API Карт

Работа с YMapsML

Пост в архиве.

Доброго времени суток!

Я только начинаю разбираться с картами. Задача - отобразить на крате объекты компании. После небольшого погружения "в тему" посчитал, что хранение объектов в XML (а точнее, в БД) очень удобно и масштабируемо. При попытке подключить XML-файл с локального сайта (http://localhost/...) получил ошибку. Когда стал разбираться, нашел такой пост: http://clubs.ya.ru/mapsapi/replies.xml?item_no=9867 , где объясняется, что этот файл должен располагаться публично.

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

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

23 комментария
Собственно ХМЛ парсится и преобразуется в метки на карте на сервере яндекса.

Можно сделать это преобразование и своими силами на своем сервере.

Илья Ярмак
28 января 2016, 07:14
Тогда уж выгружать напрямую из БД... Правда, сам сайт на asp.net, и я не знаю пока решения, как это сделать.
Дело в том, что обработка xml происходит на наших серверах, соответственно если у них нет доступа к xml, то нет и обработки. Тут всего два варианта:
1. Открыть доступ снаружи конкретно к этому файлу.
2. Написать собственную оброботку (тут вы вольны и от YMapsML отказаться).
Илья Ярмак
28 января 2016, 07:14

Да вот! Изучаю, что можно сделать в рамках п.2.

Везде встречаю примеры по работе с БД посредством PHP. А как мне быть с моим asp.net и C# ?

Самое главное при геокодировании списка адресов - это отослать запрос http-геокодеру и затем обработать полученный xml.

С чем конкретно у вас возникла проблема?
Илья Ярмак
28 января 2016, 07:14
Проблема проста - я пока не знаю, как это делается. Спросить могу только у сообщества Яндекс Карт. А на пример еще не наткнулся, т.к. надо знать, что именно искать.
Берёте пример из примеров и на его основе генерите веб страницу. Вставляя обработанные данные из базы данных. (посмотрите код который генерирует конструктор схем проезда)

У меня большая часть логики работы с картами сосредоточенна на стороне пользователя через джаваскрипт апи.

Я почти  обработанный queryset засылаю через ajax пользователю, и с помощью джаваскрипта его отображаю.


Илья Ярмак
28 января 2016, 07:14
Я извиняюсь конечно, но можно подсказать, какой именно пример из всех предложенных тягает данные из БД? И вообще - возможно яваскриптом работать с БД?
Посмотрите на статью из нашего блога:
http://ymapsapi.ya.ru/replies.xml?item_no=81

Вы можете сделать по аналогии на c#.
Илья Ярмак
28 января 2016, 07:14

В этом примере функция :

$xml = simplexml_load_file('http://geocode-maps.yandex.ru/1.x/?geocode='.urlencode($row["address"]).'&key='.urlencode($config['apikey']).'&results=1');


 


является стандартной в PHP? Этот полученный XML содержит одну координату, в моем случае ее в этой же итерации нужно отобразить на карте, я правильно понимаю? Но вот как эту координату отобразить из кода С# - вот что я не понимаю!

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

Данный клуб посвящен вопросам по API Яндекс.Карт.
По вопросам C# вам лучше обратиться в соответствующее сообщество, либо воспользоваться справочными материалами на официальном сайте microsoft:
http://msdn.microsoft.com/ru-ru/vcsharp/aa336809.aspx
http://msdn.microsoft.com/ru-ru/library/67ef8sbd.aspx
На сервере создаете html документ.

В тэге скрипт вставляете данные из базы:

var placemark = Ymaps.Placemark(new Ymaps.GeoPoint({данные из базы}{данные из базы}))

И отправляете документ пользователю.


В примерах то как выглядит готовый документ.

PHP, АСП, Джава ЕЕ, Python(Джанго) делают одно и тоже:
рендерят шаблон.








Илья Ярмак
28 января 2016, 07:14

Т.е. пишем серверный код, который вытаскивает данные из БД.

На клиенте пишем js-код, который сформированную выборку парсит и отображает. Так? А как наиболее удобно прокинуть данные клиенту?

Реализовать на сервере аноалог вот этого сервиса:
http://api.yandex.ru/maps/tools/constructor/
То есть сгенирировать програмно похожий код как получается там на выходе.
И отдать веб документ с уже вставленным кодом.

Я успользую немного другой подход:
создаю страницу с пустой картой.
После загрузки карты делаю аякс-запрос на сервер (YMaps.Jquery.ajax)
и в колбэке этого запроса полученные данные с превращаю в линии-метки.

PS. Если делаете локально и для себя то можете написать скрипт, который будет отправлять сгенерированный файл YMapsML на ваш фтп (например на народе) 

С чем вам проще работать:
с генерацией текста,
с генерацией YMapsML или с джаваскриптом решайте сами.
Илья Ярмак
28 января 2016, 07:14

Я вроде как сочинил спецобработчик (handler), который при обращении к нему вытягивает данные из БД и в виде JSON откидывает клиенту.

Теперь ищу пример, как десериализовать JSON и полученные данные кинуть в карту. Такая вот схема.

Как-то так:
в комменте:  фрагмент json который приходит.

$.getJSON('/../get_branding/',
    {route_id:route_id},
        function(json){
// переменные
var integer = json['int'] // 'int': 10
var str = json['name'] // 'name': "Name"
// массив
var array = json['arr'] // "arr" : ['1','2','3','4']
// объект
var obj = json['obj'] // 'obj' : {'a':10,'b':20}
// массив объектов
var points = json['points'] // 'points': [{'lat':10,'lon':20},{'lat':11,'lon':21}]
// проходимся по массиву объектов и делаем что-нибудь с ними:
for (x in points) {
var = new YMaps.GeoPoint(points[x].lon,points[y].lat)
}


    }

Как-то так.

$ это YMaps.jQuery про него можно почитать на сайте jQuery
Илья Ярмак
28 января 2016, 07:14

Я пишу вот так:

var data;
function getMyData()
{
          $.getJSON('handler.ashx', null, function(response)
{
              data = eval(response);  
              $('#myLabel').html(data.Name); 
});
}

Вешаю эту функцию на кнопку. При нажатии возникает ошибка: "Предполагается наличие объекта". Где я неправ?

Илья Ярмак
28 января 2016, 07:14

Все! Разобрался, как получить данные на клиенте! Всем большое спасибо!!!

Можно небольшую статейку накатать, как подружить MS SQL 2005, Asp.Net и YMaps. Надо нет ли?

Это никогда лишним не будет. Будет здорово, если напишите.
Илья Ярмак
28 января 2016, 07:14
А куда потом девать ее?
Опубликуйте у нас в клубе, например. Тогда она точно не потеряется.
Илья Ярмак
28 января 2016, 07:14
С запозданием, но все же написал небольшую статью. Возможно, она поможет кому то на начальном этапе. Посмотреть можно здесь. Если надо, могу разместить и в клубе.
Если несложно сделайте новый топик с кратким описанием и ссылкой на вашу сайту.