Клуб API Карт

Определение города (местоположения) по IP пользователя

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

Задача состоит в следующем:

 

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

Необходимо, чтобы пользователю показывался этот список магазинов (фирм) в сортировке "чем ближе, тем выше".

 

Возможно ли это сделать с помощью Яндекс Карт?

7 комментариев
Алексей Yarrr!
28 января 2016, 03:39

Это возможно сделать с помощью любых карт ;-)

У вас есть список магазинов, скажем, в JS массиве.

Так же у вас есть текущее местоположение пользователя (или примерное его положение по IP).

var userCoord = [window.navigator.getCoord().latitude, window.navigator.getCoord().longitude];

shopsArray.sort(function(shopA,shopB){

  var a = Math.sqr(userCoord[0]-shopA.coord[0])+Math.sqr(userCoord[1]-shopA.coord[1]);

  var b = Math.sqr(userCoord[0]-shopB.coord[0])+Math.sqr(userCoord[1]-shopB.coord[1]);

  if (a == b) return 0;

  return a < b ? -1 : 1;

});

Расстояние считается как sqrt(x^2+y^2), но мы можем сравнить и суммы квадратов, сортировка от этого не изменится.

Ну и теперь ваш shopsArray содержит список, сортированный по возрастанию расстояния от текущей точки до координаты магазина ;-)

 

Уточните, что вы имеете ввиду?

Жуковский Павел
28 января 2016, 03:39

Я вот не пойму следующее, вот я захожу на страницу. Командой 


$_SERVER['REMOTE_ADDR'];


получаю ip пользователя. А как по ip получить координаты пользователя? Вот что мне не понятно.
Алексей Yarrr!
28 января 2016, 03:39

К картам это не относится, в целом.

Это называется geoip, есть специальные базы, позволяющие соотносить ip адреса с какими-то локациями. Но точность там не фонтан, можно с большой долей уверенности определить город, если, конечно, это не спутниковый интернет, но чтобы до конкретного адреса - такого не слышал.

Жуковский Павел
28 января 2016, 03:39

Но ведь кроме как IP пользователя, его адрес или местоположение найти нельзя?

 

Просто GEOIP базы очень огромные. Думаете, Яндекс определяет город пользователя по GEOIP ? Если да, то почему он не предлагает сервис - определения координат (примерных) пользователья по IP ?

 

Аналогично Google и пр. системы.

Алексей Yarrr!
28 января 2016, 03:39

http://yasha-somov.livejournal.com/17808.html ;-)

В яндексе есть geocode, они предоставляют этот сервис. Но, как бы, преобразования геоточка—адрес—геоточка. Про IP ничего нет. упс.

Вообще, есть возможность определить, где находится пользователь, но простого IP для этого недостаточно. Нужно приложить еще какие-то усилия ;-)

Подключая АПИ вы можете использовать объект geolocation (как раз определяет по IP)

Но это не самый точный способ.

Можно также использовать gelocation API