【发布时间】:2014-02-18 22:23:36
【问题描述】:
我一直在尝试不同的方法来加快网站上的位置搜索,我一直在接受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(英里?)的最小距离,这是不正确的,因为所有邮政编码都在英国境内。 (因此 '
这是查找最小/最大经度和纬度的代码:
$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 列以二进制形式存储并被索引。
任何建议将不胜感激。
【问题讨论】:
-
我没有时间帮你解决这个问题,但我怀疑度数和弧度之间存在单位问题。
标签: php mysql geolocation latitude-longitude