我一直在嘗試不同的方法來加速網站上的位置搜索,我一直在從http://www.movable-type.co.uk/scripts/latlong-db.html處獲取指令。使用邊界圈距離地理標記不準確
的代碼已經針對我的表,並且輸入變量,所以我可以通過phpmyadmin運行
Select id, outcode, lat, lng, acos(sin(57.101)*sin(radians(lat)) +
cos(57.101)*cos(radians(lat))*cos(radians(lng)-'-2.27')) * 3959 As D
From
(Select id, outcode, lat, lng
From car_postcodes
WHERE
lat Between 52.7593142577 And 61.4426857423
And
lng Between -10.2633856968 And 5.72338569684
) As FirstCut
Where acos(sin(57.101)*sin(radians(lat)) +
cos(57.101)*cos(radians(lat))*cos(radians(lng)-'-2.27)) * 3959 < 7000
Order by D
的問題是,搜索結果是從顯示的最小距離5448(哩?)遠位置,這是不正確的,因爲所有的郵編都在英國境內。 (因此「< 7000)
這是用於找到最小/最大經度&緯度的代碼:
$lat = 57.101; // latitude of centre of bounding circle in degrees
$lon = -2.27; // longitude of centre of bounding circle in degrees
$rad = 300; // radius of bounding circle in kilometers
$R = 3959; // earth's mean radius, m
// first-cut bounding box (in degrees)
$maxLat = $lat + rad2deg($rad/$R);
$minLat = $lat - rad2deg($rad/$R);
// compensate for degrees longitude getting smaller with increasing latitude
$maxLon = $lon + rad2deg($rad/$R/cos(deg2rad($lat)));
$minLon = $lon - rad2deg($rad/$R/cos(deg2rad($lat)));
前三名結果示出:
ID postcode lat lng D
1143 HS2 58.249 -6.468 5428.525603021315
1142 HS1 58.213 -6.381 5432.53243648885
1144 HS3 57.879 -6.853 5435.933627885293
LNG & LAT列在表中存儲爲二進制,並索引。
任何意見將不勝感激。
我沒有時間來幫助你,但我懷疑在度數和弧度之間存在單位問題。 –