При поиске «расстояния от долготы и широты» была получена ссылка на http://www.movable -type.co.uk / scripts / latlong.html , в которой указан код для расчета расстояния:
var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).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;
Еще пару минут поиска привели к http://www.movable -type.co.uk / scripts / latlong-db.html
Эта страница переполнена информацией,Вот простое (но неэффективное) решение, при условии, что ваш город находится на $lon,$lat
, а $R
равен 6371 (что в км), и, наконец, вы хотите, чтобы города находились в пределах $rad
вашего города:
Select ID, Postcode, Lat, Lon,
acos(sin($lat)*sin(radians(Lat)) + cos($lat)*cos(radians(Lat))*cos(radians(Lon)-$lon))*$R As D
From MyTable
Where acos(sin($lat)*sin(radians(Lat)) + cos($lat)*cos(radians(Lat))*cos(radians(Lon)-$lon))*$R < $rad