есть таблица с координатами для гугловских карт.
надо выбрать те толки которые находятся в определённом радиусе от заданной точки!
нащёл функцию на js которая вычисляет растояние между двумя точками на карте:
| Код | var getDistance = function(p1, p2) { var R = 6378137; // Earth’s mean radius in meter var dLat = rad(p2.lat() - p1.lat()); var dLong = rad(p2.lng() - p1.lng()); var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(rad(p1.lat())) * Math.cos(rad(p2.lat())) * Math.sin(dLong / 2) * Math.sin(dLong / 2); var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); var d = R * c; return d; // returns the distance in meter };
|
пытаюсь переписать в условие для sql запроса. Получилось так:
| Код | $formula = $radius." * (2 * ATAN2(SQRT(POW(SIN(RADIANS(`coor_x` - ".$main_lat.")), 2) + COS(RADIANS(".$main_lat.")) * COS(RADIANS(`coor_x`)) * POW(SIN(RADIANS(`coor_y` - ".$main_lgn.") / 2), 2), SQRT(1 - POW(SIN(RADIANS(`coor_x` - ".$main_lat.")), 2)) + COS(RADIANS(".$main_lat.")) * COS(RADIANS(`coor_x`)) * POW(SIN(RADIANS(`coor_y` - ".$main_lgn.") / 2), 2))))";
|
$main_lat - х координата заданной точки. $main_lgn - y координата заданной точки coor_x, coor_y - координаты точек из таблицы
подставляю в запрос
| Код | $sth = $dbh->prepare("SELECT `point_id`, `point_name`, `coor_x`, `coor_y` FROM `points_table` WHERE (".$formula.") < 1000";
|
запускаю. выполняется но возвращает пустой запрос. где я ошибся?? |