Клуб API Карт

Кластеризация в ObjectManager не из файла json

wiki@svrt.ru
25 января 2015, 16:07

Я знаю как загрузить метки в кластеры из файла json.

А как загрузить в кластеры не из файла json, а например из базы?

Читаю метки из базы так:

                for (i = 0; i < json.markers.length; i++) {
                    var myPlacemark = new ymaps.Placemark([json.markers[i].lat,json.markers[i].lon], {
                    iconContent: json.markers[i].icontext,
                    hintContent: json.markers[i].hinttext,
                    balloonContentBody: '<a href="#" class="btn btn-warning">удалить метку</a>'
                    }, {
                    preset: json.markers[i].styleplacemark                   
                });
                myMap.geoObjects.add(myPlacemark);
И как их на этом этапе направить в кластеры?

7 комментариев
Подписаться на комментарии к посту

Менеджер принимает на вход JSON

Данные из базы можно превратить в JSON и отправить клиенту AJAX-ом

Вручную конечно можно. А вот ка это сделать автоматически не совсем понятно.

Спасибо!

Вручную? ок )

Не совсем понятно что тут может быть не совсем понятно.

Берете данные в одном формате и конвертируете их в другой. Что у вас там пэхапэ? В нем есть $json_encode. Не пэхапэ? В любой платформе есть методы/библиотеки для работы с JSON.

Все это уже мильён раз было сделано на мильёнах сайтов.

 

Я вам рекомендую читать документацию на технологии которые вы используете

То чем вы занимаетесь сейчас – склеивание кусочков из разных примеров это пустая трата времени и сил, и профит = 0

А как послать аяксом не из файла, а из базы?

В моём примере метки грузятся из файла в ObjectManager так (код из файла .js):

    objectManager.objects.options.set('preset', 'islands#greenDotIcon');
    objectManager.clusters.options.set('preset', 'islands#greenClusterIcons');
    myMap.geoObjects.add(objectManager);
    $.ajax({url: "map_g.json"}).done(function(data) {
        objectManager.add(data);
    });
А у меня теперь все метки в базе на сервере.

Если я читаю метки в цикле из базы так:
                    var myPlacemark = new ymaps.Placemark([json.markers[i].lat,json.markers[i].lon], {
                    iconContent: json.markers[i].icontext,
                    hintContent: json.markers[i].hinttext,
                    balloonContentBody: json.markers[i].balloontext                  
                    }, {
                    preset: json.markers[i].styleplacemark                   
                });
Как направить их аяксом в ObjectManager?

https://tech.yandex.ru/maps/jsbox/2.1/object_manager

вместо файла data.json у вас будет серверный скрипт, который достает метки из базы и формирует такой же json как в файле

А как сделать этот серверный скрипт?

Достать из базы могу так:
var myPlacemark = new ymaps.Placemark([json.markers[i].lat,json.markers[i].lon], {iconContent: json.markers[i].icontext, hintContent: json.markers[i].hinttext, balloonContentBody: json.markers[i].balloontext}, {preset: json.markers[i].styleplacemark});
И что сделать в этом файле, чтобы подставить его в ajax вместо json-файла?

 

Достать из базы могу так:

Вы привели тут кусок javascript-кода.

Где тут что из базы вы достаете я не вижу (где запрос в БД?).

 

Вопросы о серверном программировании выходят за рамки специфики этого клуба.

Попробуйте задать ваш вопрос на профильных ресурсах