Сохранение местоположения пользователя в БД и поиск ближайших пользователей для него

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

Место будет отфильтровано по странам, но не по городам, поэтому пользователи могут получать других пользователей из одной страны, но из разных городов.

Вопрос в том, как рассчитать расстояния между городами? Он не должен быть на 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