Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Сложное усовие


Автор: Areostar 9.10.2015, 15:22
есть таблица с координатами для гугловских карт.

надо выбрать те толки которые находятся в определённом радиусе от заданной точки!

нащёл функцию на 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";


 запускаю. выполняется но возвращает пустой запрос. где я ошибся??

Автор: Akina 9.10.2015, 18:01
Приведи найденную функцию заменами переменных на вычисляющие их выражения к виду
Код

var getDistance = function(p1, p2) {
  return (выражение);
};

и сразу поймёшь, где накосячил.

Автор: Areostar 9.10.2015, 18:24
Мне Sql запрос нужен. Функция на js работает. Проверено!

Автор: Akina 9.10.2015, 21:47
Ты сперва сделай, что тебе посоветовали. Тогда сразу увидишь, где накосячил. 

А если постишь только для того, чтобы спорить с теми, кто тебе решил подсказать - так хоть предупреждай заранее. Мне с тобой бодаться нафиг не надо.

Автор: Areostar 10.10.2015, 05:48
Разобрался. Скобки не там закрыл.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)