我想展示一些在给定经纬度范围内的地点列表,这些地点与所给的经纬度值相距不远。我对此没有任何问题:
距离为一英里以内的地点 (地点清单...)
可以使用类似以下的代码:
SELECT * FROM places WHERE lat < $latmax AND lat > $latmin AND lng < $lngmax AND lng > $lngmin
但是我想列出两英里内的地点,但不包括一英里以内的地点——也就是说,我不想重复第一个查询的结果。
以下是我尝试过的一种版本:
$milesperdegree = 0.868976242 / 60.0 * 1.2;
// 1 mile -- this works
$degrees = $milesperdegree * 1;
$latmin = $lat - $degrees;
$latmax = $lat + $degrees;
$lngmin = $lng - $degrees;
$lngmax = $lng + $degrees;
$query = "SELECT * FROM places WHERE lat < $latmax AND lat > $latmin AND lng < $lngmax AND lng > $lngmin";
// 2 miles -- this doesn't work
$degrees_2 = $milesperdegree * 2;
$latmin_2 = $lat - $degrees_2;
$latmax_2 = $lat + $degrees_2;
$lngmin_2 = $lat - $degrees_2;
$lngmax_2 = $lat + $degrees_2;
$query = "SELECT * FROM places WHERE ";
$query .= "lat BETWEEN $latmax AND $latmax_2 AND lng BETWEEN $lngmax AND $lngmax_2 OR ";
$query .= "lat BETWEEN $latmin AND $latmin_2 AND lng BETWEEN $lngmin AND $lngmin_2 OR ";
$query .= "lat BETWEEN $latmax AND $latmax_2 AND lng BETWEEN $lngmin AND $lngmin_2 OR ";
$query .= "lat BETWEEN $latmin AND $latmin_2 AND lng BETWEEN $lngmax AND $lngmax_2";
这样做不行。我猜测这只是一些逻辑问题,可能是因为周日下午我无法理解,但我也可能做错了其他事情。非常感谢您的任何建议。