2015-01-19 6 views
0

Я работаю над проблемой поиска всех клиентов в пределах стольких миль от конкретного lon/lat и возвращения списка этих клиентов в массиве. Теперь я довольно разбираюсь в формуле Хаверсина и старом способе делать это с границами в MySQL. Однако, обновляя до версии 5.6 MySQL, я теперь пытаюсь использовать функцию ST_WITHIN() для получения того же результата.ST_WITHIN() не возвращает никакого результата

Я следую учебник размещена здесь:

http://rutweb.com/using-the-new-spatial-functions-in-mysql-5-6-for-geo-enabled-applications/

Мой код до сих пор выглядит так:

$lat = 40.2808380; 
$lon = -111.6573890; 
$distance = $row['RadialMiles']; // radius of bounding circle in miles 

$rlon1 = $lon - $distance/abs(cos(deg2rad($lat))*69); 
$rlon2 = $lon + $distance/abs(cos(deg2rad($lat))*69); 
$rlat1 = $lat - ($distance/69); 
$rlat2 = $lat + ($distance/69); 

$query = "SELECT astext(Position), Firstname, Lastname FROM Account 
WHERE systemAccountID = '$systemAccountID' 
AND st_within(Position, envelope(linestring(point(:rlon1, :rlat1), point(:rlon2, :rlat2))))"; 

    try { 
     $stmt = $con->prepare($query); 
     $stmt->execute(array('rlon1' => $rlon1,'rlon2' => $rlon2,'rlat1' => $rlat1,'rlat2' => $rlat2)); 
     $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 
    } catch (PDOException $e) { 
     throw $e; 
    } 

    print_r($result); 

Сейчас массив производит пустой результат, когда я знаю, что это должен вернуть 2 результата.

FYI, вы можете просто предположить, что моя таблица имеет 3 столбца: имя, фамилия и положение. Позиция является точкой типа и содержит что-то вроде: POINT (38.8026085 -116.4193878)

Я работаю с этим весь день, и использование пространственных функций было ... разочаровывающим для меня. Любая помощь будет оценена по достоинству.

+0

Возможно, вам необходимо, чтобы позиция была точечным типом данных. –

+0

Если вы хотели удалить функцию astext() (у столбца уже есть точка как тип), я сделал это, и это не имело значения. –

ответ

1

Для всех тех, кто хочет использовать этот учебник для пространственных функций STS mysql, просто знайте, что в учебнике перечислены точки в формате (lon, lat) вместо (lat, lon). Именно по этой причине мне не удалось получить возвращаемое значение.

Смежные вопросы