我正在努力解决在特定lon / lat的这么多里程内找到所有客户并在阵列中返回这些客户的列表的问题。我现在非常精通Haversine公式以及在MySQL中使用边界的旧方法。但是,更新到MySQL的5.6版本,我现在正尝试使用函数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)
我整天都在努力工作,使用空间功能一直让我感到沮丧。任何帮助将不胜感激。
答案 0 :(得分:1)
对于所有想要将本教程用于mysql的ST空间函数的人,只要知道教程以(lon,lat)格式而不是(lat,lon)列出点。这就是我无法获得返回值的原因。