Я пытаюсь реализовать пользовательскую систему, один из системных требований – найти других пользователей, которые находятся рядом с вами.
Место будет отфильтровано по странам, но не по городам, поэтому пользователи могут получать других пользователей из одной страны, но из разных городов.
Вопрос в том, как рассчитать расстояния между городами? Он не должен быть на 100% точным, но он должен дать некоторый приоритет для более близких пользователей.
Будет ли API местоположения Google Geo соответствовать этим требованиям? Каковы альтернативы?
Любая идея, как реализовать его без очень тяжелых вычислений?
Я думал о том, чтобы спросить пользователя, что это страна и город, просто для того, чтобы писать в своем профиле, и получить его географическое местоположение от его IP или импортировать базу данных, которая содержит все города и их географическое местоположение.
Пожалуйста, направляйте меня.
Вы можете использовать формулу Хаверсина для поиска ближайшего пользователя в базе данных.
$stmt = $dbh->prepare("SELECT name, lat, lng, ( 3959 * acos( cos( radians(?) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(?) ) + sin( radians(?) ) * sin( radians( lat ) ) ) ) AS distance FROM mytable HAVING distance < ? ORDER BY distance LIMIT 0 , 20"); // Assign parameters $stmt->bindParam(1,$center_lat);//lat coordinate of user $stmt->bindParam(2,$center_lng);//lng coordinate of user $stmt->bindParam(3,$center_lat); $stmt->bindParam(4,$radius);//Radius in miles
База данных по городам можно найти в Geonames