Клуб API Карт

Что не так делаю? (api v2)

Пост в архиве.

 

Задача: узнать границы области, которую занимает Москва

 

var geocoder = ymaps.geocode("Москва", {results: 1}) ;

geocoder.then(

function (res) {

var point = res.geoObjects.get(0) ;

var tmp = point.geometry.getBounds() ;

alert(tmp) ;

},

function (error) {

     alert('error') ;

}

 

результат выполнения скрипта: 55.753559, 37.609218, 55.753559, 37.609218

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

 

И еще вопрос.. Поскажите как обращаться с результатом геокодирования как с JSON?

Цитата "Результат запроса может быть представлен в формате JSON"

http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/geocode.xml 

 

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

point.geometry.getBounds() возвращает границы геометрии, а т.к. это точка, соответственно границами будет тоже точка.

Чтобы узнать географические границы, используйте point.properties.get('boundedBy')

Спасибо за оперативную подсказку :) 

Sergey Konstantinov
28 января 2016, 05:01

Про boundedBy вам подсказали, а что касается JSON -  в документации ошибка. JSON всегда можно получить из http-геокодера, указав format=json или format=jsonp

Спасибо!

А еще вопрос в догонку, что б отдельную ветку не создавать...  В предыдущей версии был GeoCoordSystem() с помощью которого можно было узнать расстояние между точками... 

    var plq = new ymaps.GeoCoordSystem();

    Rasto = plq.distance(new ymaps.GeoPoint(lat1,lng1), new ymaps.GeoPoint(lat2,lng2)); 

 Не могу найти в новом API замены этой функции... кроме как прокладывать маршрут и делать для сегмента segments[i].getLength() 
Но такой вариант не очень подходит, т.к. он асинхронный (через then)... 

 

Sergey Konstantinov
28 января 2016, 05:01

В 2.0 пока не документированы соответствующие функции. Вы можете легко посчитать расстояние между точками по формулам (обратите внимание, широты и долготы в радианах).

жаль :)

Вот что нагуглил.. может кому-то пригодится:

 

function Distance(lat1,lng1,lat2,lng2){

if (typeof(Number.prototype.toRad) === "undefined") {

 Number.prototype.toRad = function() {

return this * Math.PI / 180;

 }

}

var R = 6371; // km

var dLat = (lat2-lat1).toRad();

var dLon = (lng2-lng1).toRad();

var lat1 = lat1.toRad();

var lat2 = lat2.toRad();

 

var a = Math.sin(dLat/2) * Math.sin(dLat/2) +

Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); 

var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 

var d = R * c;

return d;

не.. вру.. через route тоже не получится...) он же по улицам прокладывает маршрут, а не прямой :)