0
我正在嘗試使用半徑搜索來獲取地理點的公共數據庫。 我已經找到了關於這個主題的幾個很好的教程,但我最終失敗了。haversine公式php/mysql
主要教程在這裏:http://janmatuschek.de/LatitudeLongitudeBoundingCoordinates。
的基本公式,在SQL查詢的形式,是
SELECT * FROM Places
WHERE (Lat => 1.2393 AND Lat <= 1.5532) AND (Lon >= -1.8184 AND Lon <= 0.4221)
AND acos(sin(1.3963) * sin(Lat) + cos(1.3963) * cos(Lat) * cos(Lon - (-0.6981)))
<= 0.1570;
我實現了這一個簡單的PHP測試頁面是這樣的:
$R = 6371; // radius of Earth in KM
$lat = '46.98025235521883'; // lat of center point
$lon = '-110.390625'; // longitude of center point
$distance = 1000; // radius in KM of the circle drawn
$rad = $distance/$R; // angular radius for query
$query = '';
// rough cut to exclude results that aren't close
$max_lat = $lat + rad2deg($rad/$R);
$min_lat = $lat - rad2deg($rad/$R);
$max_lon = $lon + rad2deg($rad/$R/cos(deg2rad($lat)));
$min_lon = $lon - rad2deg($rad/$R/cos(deg2rad($lat)));
// this part works just fine!
$query .= '(latitude > ' . $min_lat . ' AND latitude < ' . $max_lat . ')';
$query .= ' AND (longitude > ' . $min_lon . ' AND longitude < ' . $max_lon . ')';
// refining query -- this part returns no results
$query .= ' AND acos(sin('.$lat.') * sin(latitude) + cos('.$lat.') * cos(latitude) *
cos(longitude - ('.$lon.'))) <= '.$rad;
我失去了一些東西在這裏?我認爲我完全遵循方法,但是我無法獲得「微調」查詢來返回任何結果。
你可以把一些預期的輸入/輸出鼓搗? – ehime 2013-02-12 18:52:26