Клуб API Карт

Как по запросу к геокодеру (или другим способом) определить адекватные границы показа Страны, города(и т.д.)

Пост в архиве.
innokenty.longway
7 ноября 2013, 23:27

Всем привет!

Мой случай такой:

обращаюсь к геокодеру с запросом "Россия", получаю координаты центра (всё ОК). Хочу получить границы страны (в будущем аналогично для города, района и т.д.) и показать их на карте (то есть задать область показа).
Ниже всё будет понятно на скриншотах.
В первом случае (на моём сайте) я использую свойство boundedBy ответа геокодера.

Во втором обращаюсь с запросом на Яндекс.картах (maps.yandex.ru)

.

 

Хочу, чтобы было как во втором случае.
То есть чтобы по центру была страна/город/район/улица и адекватная область показа.

 

Есть стандартные средства, которые позволят определить границы объекта?

Весь день изучал документацию, но так ничего не нашёл.

 

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

Покажите как Вы использовали boundedBy из ответа геокодера, чтобы получить результат 1

лучше ссылкой

boundedBy по идее предназначена для показа области, где данный объект может быть найден, так?

Но когда делаю запрос к ГеоКодеру по странам Китай и Украина, он возвращает "хорошие" (как хотелось бы) границы. А для USA и России видна почти вся карта мира.

 

 

country_coord = ya_data.response.GeoObjectCollection.featureMember[0].GeoObject.Point.pos.split(' ')
swap_array(country_coord)
map_boundaries_lower = ya_data.response.GeoObjectCollection.featureMember[0].GeoObject.boundedBy.Envelope.lowerCorner.split(' ')
swap_array(map_boundaries_lower)
map_boundaries_upper = ya_data.response.GeoObjectCollection.featureMember[0].GeoObject.boundedBy.Envelope.upperCorner.split(' ')
swap_array(map_boundaries_upper)

yandexMap.setBounds([map_boundaries_lower, map_boundaries_upper], checkZoomRange: true)

В принципе мне идеально бы подошёл метод setCenter:

 yandexMap.setCenter(country_coord, 4)

Но для России нужен zoom 2, для USA 4, для Украины 6.

 

 

Зачем использовать http-геокодер в АПИ,

Можно так:

 

ymaps.geocode('Россия')
.then(function (res) (
    yandexMap.setBounds(res.geoObjects.get(0).properties.get('boundedBy'));
});

Спасибо, так проще.

Разные ответы вызваны различными физическими размерами карты.

Если вам нужно _максимально_ точно вписать некий bounds в карту - влючите поддержку дробных зумов.

И карта сможет себе выставить зум=3.234444(например) и показать нужные границы пиксель в писель.

см опцию avoidFractionalZoom

Спасибо за ответ!
Почему тогда для Китая и Украины, ответ геокодера содержит "подходящие" границы, а для USA и России они слишком велики?

 

 

Может не в boundedBy дело и нужно каким-то другим способом получать границы стран?

 

 

Вы еще для Франции спросите :P

Наверное проблема в том что кроме "материковой" и целой части(где мы с вами живем) есть еще различные Калининграды и острова. Ну или Гаваи, Аляски с другими заморскими территориями.

И ответ - это именно адекватные границы.

А вот по запросу город/район/улица такой проблемы быть недолжно. Ну почти никогда.

В этом есть смысл.

Только на maps.yandex.ru границы выводятся нормально.
Мне интересно как это сделано.
Может устанавливается центр карты и зум для каждой конкретной страны?