나는 특정 lon/lat의 너무 많은 마일 내에있는 모든 고객을 찾고 어레이의 해당 고객 목록을 반환하는 문제에 대해 작업하고 있습니다. 저는 Haversine 수식과 MySQL에서 경계를 가지고 그렇게하는 옛 방식에 꽤 정통합니다. 그러나 MySQL 버전 5.6으로 업데이트하면 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 개의 결과를 반환해야합니다.
참고로 내 테이블에는 이름, 성 및 위치라는 3 개의 열이 있다고 가정 할 수 있습니다. 위치는 타입 포인트이고 다음과 같은 것을 포함합니다 : POINT (38.8026085 -116.4193878)
저는 하루 종일이 작업을하고 있으며 공간 함수를 사용하여 저를 위해 좌절했습니다. 어떤 도움을 주시면 감사하겠습니다.
위치가 포인트 데이터 유형이어야 할 수도 있습니다. –
astext() 함수를 제거하려는 경우 (이미 열이 유형으로 점을 가짐), 그렇게 했으므로 아무런 차이가 없습니다. –