Клуб API Карт

Как определить ближайщие магазины?

Жуковский Павел
29 сентября 2012, 13:02

Хочу сделать нечто похожее, как здесь http://market.yandex.by/model.xml?modelid=7717706&hid=91491

"Магазины рядом".

 

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

Адрес пользователя - это центр карты, ну и соответственно на карту наношу всех продавцов. Пользователь в итоге на карте видит ближайших продавцов.

 

Есть ли способ проще? Может есть API, позволяющая определять местоположение пользователя по IP, а не по вверденному адресу?

 

И вопрос №2:

 

Чтобы вывести ближайших продавцов, надо знать наименьшее расстояние до них, так? Как получить это расстояние и значение точки продавца?

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

Конечно лучше работать не с адресами, а с координатами. (нет лишних запросов к геокодеру, - траффик и время)

Местоположение можно определять с помощью GeolocationAPI или в с помощью ymaps.geolocation

Можно отсортировать ваши данные по расстоянию от определенной точки, используя метод ymaps.coordSystem.geo.getDistance

Жуковский Павел
29 сентября 2012, 17:55

Начал работу

Вот мой код

 

 

   

Пишет ошибку

 

TypeError: ymaps.coordSystem is undefined
 
ymaps.coordSystem.geo.getDistance(moscowCoords, newYorkCoords)

Почему?

в 2.0-stable его вероятно еще нет

подключи просто 2.0

Жуковский Павел
29 сентября 2012, 19:37

Пишу вот так

 

// Start продавцыvar myGeocoder = ymaps.geocode('Беларусь, Минск, Пушкина д.33', { results: 1 }).then( function (res) {     var coord = res.geoObjects.get(0);myMap.geoObjects.add(    new ymaps.Placemark(        [coord.geometry.getCoordinates()],        {            balloonContentHeader: "Павел",            balloonContent: "",            balloonContentFooter: ""   }    ));});// END продавцы

Но меня бросает не по адресу Пушкина, а в цент карты. Получается, что я не получаю верные координаты адреса.

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

[coord.geometry.getCoordinates()] ->

coord.geometry.getCoordinates()

Жуковский Павел
29 сентября 2012, 21:42

Отлично, вывел список продавцов

Теперь с помощью

 

 

        // Расстояние        alert(ymaps.formatter.distance(            ymaps.coordSystem.geo.getDistance(coord, center)        ));

Могу вывести алерт с расстоянием до каждого продавца.

 

1. В какой единице измерения выводится растояние?

2. Как это расстояние сохранить в массив с ключем 1

array(1 => '');

3. Как передать потом этот массив в php? 

1. В какой единице измерения выводится растояние?

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

2. Как это расстояние сохранить в массив с ключем 1

array(1 => '');

3. Как передать потом этот массив в php? 

 

Хорошая книжка по javascript 

подобная задача - к точке найти ближайшие.

обязательно перебирать все точки? (например 100 штук) браузер тормозит, если точек много. 

Жуковский Павел
29 сентября 2012, 19:39

А у меня к Вам вопрос, Вот вы нашли расстояние нескольких точек, что дальше? Т.е. как потом вывести массив в PHP для обработки списка?