Клуб API Карт

php api 2.0

a1212121.1
28 января 2014, 12:41

подскажите пожалуйста возможно как то отправить запрос на геокодирование на php для api 2.0

все примеры которые попадаются только 1.0

спасибо.

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

Текущая версия http-геокодера - 1.x

Javascript API версионируется отдельно и никак с ним не связана

сорри, не совсем точно изложил мысли..

ymaps.geocode(Coordinaty, {
                            kind: 'district',   
                            results: 1
                        }).then(function (res) {
                                district = res.geoObjects.get(0).properties.get('name');

});

возможно подобный запрос отправить из php ?

Ну а как Вы сами думаете?

Вы хотите выполнить код написанный на одном языке программирования в другом языке, да и еще и в разном окружении.

 

В PHP можно использовать http-геокодер

имелось в виду получить тот же результат в переменную district.

понятно что языки разные, синтаксисы разные и место исполнения тоже разные.

 

на основании указанной ссылке получается:

http://geocode-maps.yandex.ru/1.x/?geocode=Coordinaty&kind=district&results=1&lang=ru-RU

правильно?
получаем код на php:
$response = json_decode(file_get_contents('http://geocode-maps.yandex.ru/1.x/?' . http_build_query($params, '', '&')));
echo $response->response->GeoObjectCollection->featureMember[0]->geoObjects->get(0)->properties->get('name');
ну и ошибку:

Fatal error: Call to a member function get() on a non-object in

как быть?

в документации написано что по умолчанию отдается XML

нужно добавить format=json

format

Требуемый формат ответа геокодера:

 

  • xml — результат возвращается в виде YMapsML-документа;
  • json — результат возвращается в формате JSON.

 

Значение по умолчанию: xml.

format=json

ага не успел... сам немного разобрался...

echo $response->response->GeoObjectCollection->featureMember[0]->GeoObject->metaDataProperty->GeocoderMetaData->text;

 

но появился еще один вопрос:

как отправить такой запрос на php (аналог, имеется ввиду получить ответ эквивалентный следующей строке)

L=Math.round(ymaps.coordSystem.geo.getDistance(Coordinaty1, Coordinaty2));

 

Такой запрос отправить нельзя,

только самому реализовать расчет расстояния.

 

пробовал... что то не получалось... и здесь пример брал с клуба и с вики...

цифры не сходились даже примерно. а самому расписовать по синусам и косинусам... не знаю... вспомню ли..

если есть что то рабочее.. буду благодарен

Там нетривиальные формулы. Я сам их тоже не помню. Можно попробовать поискать в клубе или в интернетах

t1 = t1*Math.PI/180; // широта объекта1 перевод в радианы 
k1 = k1*Math.PI/180; // долгота
t2 = t2*Math.PI/180; // широта объекта2
k2 = k2*Math.PI/180; // долгота
R = 6378160+(6356777-6378160)*(Math.sin(t1)+Math.sin(t2))/2;
R = R*1.00446536756; // поправочный коэфициент для москвы
L = R*Math.acos(Math.sin(t1)*Math.sin(t2)+Math.cos(t1)*Math.cos(t2)*Math.cos(k1-k2));

еще вопрос.

например мне надо нанести 10 меток, координаты которых хранятся в mysql.

каким будет рекомендованное решение?

передать массив координат на клинета, и там через js их разместить на карте?

или возможен какой то вариант размещения меток на сервере через php а клиенту отдавать уже готовый результат.

вопрос так сказать безопасности..

Вы можете сгенерить YMapsML либо JSON специального формата (GeoJSON) и передать его на клиента. геообъекты описанные этими форматами можно добавить без какой-либо пост обработки прямо на карту