Клуб API Карт

Прямое геокодирование относительно указанных координат

kosilka75
23 сентября 2016, 16:48

Здравствуйте!

Мне нужно находить объекты, ранжируя их относительно некоей области на карте, (но не ограничиваясь этой областью).
В документации сказано, что для достижения этой цели достаточно использовать параметры ll+spn.

Сначала делаю первый тестовый запрос "правая набережная", без указания координат в ll+spn
URL: https://geocode-maps.yandex.ru/1.x?format=json&key=MY_API_KEY&lang=ru_RU&geocode=%D0%BF%D1%80%D0%B0%D0%B2%D0%B0%D1%8F%20%D0%BD%D0%B0%D0%B1%D0%B5%D1%80%D0%B5%D0%B6%D0%BD%D0%B0%D1%8F&results=10&skip=0

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

Далее, я пробую второй запрос "правая набережная" но уже с указанием области поиска в ll=20.505819,54.709695 (центр Калининграда) и spn=1 градус
По документации, я вроде как должен получить те-же результаты, но отсортированные по расстоянию от центра города
URL: https://geocode-maps.yandex.ru/1.x?format=json&key=MY_API_KEY&lang=ru_RU&geocode=%D0%BF%D1%80%D0%B0%D0%B2%D0%B0%D1%8F%20%D0%BD%D0%B0%D0%B1%D0%B5%D1%80%D0%B5%D0%B6%D0%BD%D0%B0%D1%8F&results=10&skip=0&ll=20.505819%2C54.709695&spn=1.0&rspn=0

В итоге система выдаёт 1 результат - Калининград,  Правая набережная.
Согласно описанию в API, результаты должны быть ограничены указанной областью только если указать rspn=1, но я ведь указываю ноль, и это не работает, получается что всё равно обрезает.

С альтернативным параметром bbox - такая-же история.

Что я делаю не так?

2 комментария
Подписаться на комментарии к посту
spn=1 – некорректно
надо spn=1,1
Формат записи


Параметр ll задает долготу и широту центра области, а spn — ее протяженность (в градусах).
Протяженность области задается двумя числами, первое из которых есть разница между максимальной и минимальной долготой, а второе — между максимальной и минимальной широтой данной области.
dimik,
 спасибо, что указали на ошибку, исправил, но все равно результаты обрезаются до одного, и вообще работает каким-то неявным/рандомным образом.

Вот еще примеры проблемы, для наглядности:



Ищем "проспект калинина" относительно квадрата 1 градус где-то в Барнауле:
Для начала в ll передаем точные координаты проспекта калинина в Барнауле
https://geocode-maps.yandex.ru/1.x/?format=xml&lang=ru_RU&geocode=%D0%BF%D1%80%D0%BE%D1%81%D0%BF%D0%B5%D0%BA%D1%82%20%D0%BA%D0%B0%D0%BB%D0%B8%D0%BD%D0%B8%D0%BD%D0%B0&results=150&skip=0&ll=83.756555%2C53.3745577&spn=1%2C1&rspn=0
один результат
Пробуем округлить широту до 53:
https://geocode-maps.yandex.ru/1.x/?format=xml&lang=ru_RU&geocode=%D0%BF%D1%80%D0%BE%D1%81%D0%BF%D0%B5%D0%BA%D1%82%20%D0%BA%D0%B0%D0%BB%D0%B8%D0%BD%D0%B8%D0%BD%D0%B0&results=150&skip=0&ll=83.0%2C53.0&spn=1%2C1&rspn=0
один результат.
Меняем широту на пару градусов:
https://geocode-maps.yandex.ru/1.x/?format=xml&lang=ru_RU&geocode=%D0%BF%D1%80%D0%BE%D1%81%D0%BF%D0%B5%D0%BA%D1%82%20%D0%BA%D0%B0%D0%BB%D0%B8%D0%BD%D0%B8%D0%BD%D0%B0&results=150&skip=0&ll=83.0%2C55.0&spn=1%2C1&rspn=0
Чудеса, много результатов, отсортировано как надо. В начале списка - проспект Калинина, Барнаул
Пробуем в ll поменять долготу на 86
https://geocode-maps.yandex.ru/1.x/?format=xml&lang=ru_RU&geocode=%D0%BF%D1%80%D0%BE%D1%81%D0%BF%D0%B5%D0%BA%D1%82%20%D0%BA%D0%B0%D0%BB%D0%B8%D0%BD%D0%B8%D0%BD%D0%B0&results=150&skip=0&ll=86%2C53.3745577&spn=1%2C1&rspn=0
Тоже всё отлично.
Долгота в ll равна 85:
https://geocode-maps.yandex.ru/1.x/?format=xml&lang=ru_RU&geocode=%D0%BF%D1%80%D0%BE%D1%81%D0%BF%D0%B5%D0%BA%D1%82%20%D0%BA%D0%B0%D0%BB%D0%B8%D0%BD%D0%B8%D0%BD%D0%B0&results=150&skip=0&ll=85%2C53.3745577&spn=1%2C1&rspn=0
И снова один результат.
В spn пробовал подставлять и целые цисла, и десятичные, пробовал и 1, и 10, и 100, и 200 - такое ощущение, что система вообще не реагирует на этот параметр