Клуб API Карт

Как правильно передать обекты из php в js и разместить их на карте?

Пост в архиве.
nvkurganova
29 мая 2013, 13:49

Появился вопрос: можно ли добавлять таким образом точки, которые собираются в json в ajax_geo.php?

(Смысл проблемы: в php есть возможность собрать информацию по объектам, которые необходимо отобразить на карте, вопрос, как правильно передать эту информацию js и затем вывести ее на карте (объектов может быть достаточно много - 1000+))
 

$.ajax({
    type: "POST",
    url: "/ajax/ajax_geo.php",
    data: "action=get_geo_info&id=" + 1,
    async: false,
    success: function (data) {
        if (data) {
            var res = JSON.parse(data);
            myMap.geoObjects.add(res.response.GeoObjectCollection);
        }
    }
});

 

Или прежде чем сделать myMap.geoObjects.add(res.response.GeoObjectCollection);, нужно еще как-то обработать полученную информацию? Сейчас такой код не работает, подскажите, как правильно лучше использовать связку js+php в данном случае?

7 комментариев

Если я правильно понял вопрос, то в $.ajax указываем dataType: "script" и собственно всё :)

 

что это даст?
ajax результатом выдает json:

{"response":
{"GeoObjectCollection":{"metaDataProperty":{"GeocoderResponseMetaData":{"request":"Новос
ибирск, Подорожник","found":"6","results":"10"}},
"featureMember":
[{"GeoObject":{"metaDataProperty":{"GeocoderMetaData"
:{"kind":"locality","text":"Россия, Новосибирская область, Новосибирск","precision":"other","AddressDetails":{"Country":{"AddressLine":"Новосибирская область, Новосибирск","CountryNameCode":"RU","CountryName":"Россия","AdministrativeArea":{"AdministrativeAreaName":"Новосибирская область","Locality":{"LocalityName":"Новосибирск"}}}}}},"description":"Новосибирская область, Россия","name":"Новосибирск","boundedBy":{"Envelope":{"lowerCorner":"82.751106 54.803927","upperCorner":"83.16063 55.199686"}},"Point":{"pos":"82.906928 55.028739"}}},
{"GeoObject":{"metaDataProperty":{"GeocoderMetaData":{"kind":"area","text"
:"Россия, Новосибирская область, городской округ Новосибирск","precision":"other","AddressDetails":{"Country":{"AddressLine":"Новосибирская область, городской округ Новосибирск","CountryNameCode":"RU","CountryName":"Россия","AdministrativeArea":{"AdministrativeAreaName":"Новосибирская область","SubAdministrativeArea":{"SubAdministrativeAreaName":"городской округ Новосибирск"}}}}}},"description":"Новосибирская область, Россия","name":"городской округ Новосибирск","boundedBy":{"Envelope":{"lowerCorner":"82.739096 54.810382","upperCorner":"83.153794 55.236997"}},"Point":{"pos":"82.946445 55.024259"}}},
{"GeoObject":
{"metaDataProperty":{"GeocoderMetaData":{"kind":"railway","text":"Россия, Новосибирская область, Новосибирск, вокзал Новосибирск-Восточный","precision":"other","AddressDetails":{"Country":{"AddressLine":"Новосибирская область, Новосибирск, вокзал Новосибирск-Восточный","CountryNameCode":"RU","CountryName":"Россия","AdministrativeArea":{"AdministrativeAreaName":"Новосибирская область","Locality":{"LocalityName":"Новосибирск","Premise":{"PremiseName":"вокзал Новосибирск-Восточный"}}}}}}},"description":"Новосибирск, Новосибирская область, Россия","name":"вокзал Новосибирск-Восточный","boundedBy":{"Envelope":{"lowerCorner":"82.974239 55.067319","upperCorner":"82.974859 55.06768"}},"Point":{"pos":"82.974544 55.067499"}}},
]}}}

можно ли использовав его, добавить из него объекты на карту? если да, то как это правильно сделать?

 

vadim.zhiltsov
30 мая 2013, 00:00

Почитайте как работать с json в javascript. Это должно быть как-то так. (могу не точно указать у вас много награмождений)

 

$.post("/ajax/ajax_geo.php", {action:get_geo_info, id:1}, function(data){

  $.each(data.response.GeoObjectCollection.featureMember, function(index, value){

myMap.add(new ymaps.Placemark(split(value.GeoObject.point.pos, " ")))

});

}, "json");

 

посмотреть, что происходит можно здесь
http://geo-test.iconweb.ru/

 

эм... ajax не выдаёт. Выдаёт, как я понял, скрипт на php (ajax_geo.php).

Собственно в нём и формируйте всё, что Вам надо. При указании "dataType: "script" подразумевается, что Ваш скрипт на php будет в ответе возвращать js, что вам и надо. Т.е. ответом от php скрипта надо делать не json, а прямо объявление геообъектов.

как-то типа того:

if (mysql_num_rows($sqlres)>0)

{

 while ($addr=mysql_fetch_assoc($sqlres))

 {

  print 'var placemark = new ymaps.Placemark(['.$addr["geo_y"].', '.$addr["geo_x"].'],

  {

   iconContent: "'.$addr["tittle"].'"

  },{

   preset: "twirl#greenStretchyIcon"

  });';

  print 'col.add(placemark);';

 }

 

print 'MyMap.geoObjects.add(col);';

спасибо, поняла в каком направлении двигаться)