Клуб API Карт

Как избавится от кэша в geoXml

gazelleclub
1 июня 2014, 17:23

Собственно есть php скрипт который фомирует этот geoXml там все прекрасно формируется, но вот на карте кэшируется и не выводятся новые точки или изменённые пробовал в конец урла добавлять текущие время в unix толку не какого. Выглядит это вот так вот

 

 $time =time();

var myMap;
ymaps.ready(init);
function init () {
myMap = new ymaps.Map(\"map\", {
center: [57.535086148942426, 36.07472308907133],
zoom: 13,
}, {
balloonMaxWidth: 250,
balloonMaxHeight: 450
});

ymaps.geoXml.load('http://1111.ru/index.php?ind=maps&op=print&ops=$time').then(function (res) {
myMap.geoObjects.add(res.geoObjects);
if (res.mapState) {
res.mapState.applyToMap(myMap);
}
});
}

Как избавится от этого кэша?

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

Кеширование сделано с целью снижения нагрузки на серверы, использующие АПИ.

С какой частотой и зачем вы обновляете YMapsML?

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

Сделан был аналогичный сервис но на api 1 проблем не возникало во все. Впрочем с кэшем я разобрался был косяк небольшой с урлом, но возникло несколько других вопросов

С кокой частотой яндекс обновляет кэшь?

Если к примеру сделать обновление урла только при добавлении новой точки?

Если яндекс кэширует точки у себя, то нужно ли в обще генерировать каждый раз точки при просмотре? или достаточно подсунуть пустой xml а точки все равно из кэша возьмутся?

 

 

Точки будут обновляться при каждом запросе. Если нужно сбрасывать кеш для всех пользователей после добавления точки, лучше не использовать YMapsML, отдавайте какой-нибудь GeoJSON со своего сервера и управляйте кешированием сами

Не могли бы привести пример использования GeoJSON

Допустим у меня есть файл php который выдает массив echo json_encode($points);

как мне его на карту наложить точки GeoJSON

GeoJSON можно передать в вызов ymaps.geoQuery

См. Пример 5

http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/GeoQueryResult.xml

Блин как все сложно

нашол вот кой метод

$.getJSON("11111.php",  function(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: json.markers[i].balloontext  }, {  // Опции  preset: json.markers[i].styleplacemark  });   // Добавляем метку на карту  myMap.geoObjects.add(myPlacemark);   }   });

Как вы считаете он нормальный скажем для вывода 5000 точек???

А что сложного то? Получили JSON и передали его в неизменном виде в вызов функции. Чем тот цикл что вы привели проще?

 

5000 меток это очень много и в принципе все равно как это выводить через geoXml или GeoJSON 

ИЕ врятле потянет 5000

Сложность возникает из за отсутствия понятного примера в то же песочнице, цикл как бы нашёл рабой пример вывода из файла

Чем пример в документации не годится?

ну там нет как подключить файл который генерирует массив точек, посмотреть бы уже пример в действии, а тот пример который через цикл, в чем его минусы?

Хуже тем что есть постобработка (циклы и т.п.)

А пример, как не сложно догататься будет элементарный, зачем нужен пример из 3-х строчек?

 

$.getJSON('_url_to_geo_json_', function (json) {

    ymaps.geoQuery(json).addToMap(myMap);

});

Спасбо разобрался, но вот возникла проблема с формирование из БД этого самого файла выдачи json
Сделал вот такую функцию

header('Content-Type: application/json;charset=utf-8');

echo '{
    "type": "FeatureCollection",
    "features": [
    ';
$result = $DB->query("SELECT * FROM mkp_map_zap");
            if($DB->get_num_rows($result)>0)
            {
            while ($mar = $DB->fetch_row($result))
            {
 if($mar['tip'] == "1"){$tip ="stylegazmah";}else {$tip ="stylezapcah";}
echo ",{
            \"type\": \"Feature\",
            \"geometry\": {
                \"type\": \"Point\",
                \"coordinates\": [
                  {$mar['coord_x']},
                    {$mar['coord_y']}
                ]
            },
            \"properties\": {
                \"balloonContent\": \"Только курьерская доставка\",
                \"hintContent\": \"Только курьерская доставка\"
            },
            \"options\": {
                \"preset\": \"islands#greenDotIcon\"
            }
        }
        ";
 
}
}

echo ' ]
}';

 

Всё формируется, но проблема с запятой она или в конце лишняя перед

]
}

или в начале после

{
    "type": "FeatureCollection",
    "features": [

Как обойти это ((((

Все таки цикл постобработки, чем грозит при большом количестве точек?

Не надо формировать JSON как строку в PHP.

Используйте его нативные типы и делайте им json_encode

тогда проблемы запятых сами решатся

Блин не как не могу понять к примеру вот код php

header('Content-Type: text/html; charset=utf-8');
$type = htmlspecialchars($_GET['cat']);
 
$result = mysql_query("SELECT * FROM map_zap");
if(mysql_num_rows($result)>0)
{
while ($mar = mysql_fetch_array($result))
{

$json =  array(name=>$mar['name_text'], hinttext=>$mar['time_rab'], balloontext=>$mar['description'], styleplacemark=>$stylePlacemark, lat=>$mar['coord_x'], lon=>$mar['coord_y']);
$markers[] = $json;
}
 
}
$points = array(markers=>$markers);
echo json_encode($points);

 

как мне его привести в формат JSON?? выводится просто массив