【发布时间】:2013-01-31 16:50:51
【问题描述】:
我创建了一个网站,用于在本地销售商品,如果免费供所有人使用。但是我现在遇到了一个小问题!现在,来自更远地方的人们正在加入我希望他们能够根据与他们的距离搜索和点亮所有项目和/或查看他们所在区域内的所有项目。
我一直在收集每个人的邮政编码,并将它们转换为东向和北向坐标,而不是纬度-经度。
动态创建新记录集的最佳方法是计算距离然后按距离排序,还是有更好的方法可以使用更少的网站资源?
这就是答案
strSQL = "SELECT *, ( 3959 * acos( cos( radians( " & strMyLat &
") ) * cos( radians(Latitude) ) * cos( radians(Longitude) - radians(" & strMyLng &
") ) + sin( radians( " & strMyLat &
") ) * sin( radians(Latitude) ) ) ) AS distance FROM TABLE WHERE HAVING distance < 3;" '## 3 Miles
【问题讨论】:
-
我想知道这个已经很久了。好问题 +1
-
就个人而言,我更喜欢纬度/经度坐标,因为这些坐标通常更“标准”(尤其是通过各种基于网络的地图等常见的曝光)。此外,根据网格规模,您可能会出现扭曲。你的数据库后端是什么?一些 RDBMS 具有内置的地理类型(或扩展),因此您可以利用数据库的全部功能进行选择/排序。
-
这是一个使用 PHP 的类似帖子:stackoverflow.com/questions/2296087/…
-
感谢您的回复。后端是 MySQL,我使用东移和北移的原因是因为皇家邮政针对 E&N 对英国的所有邮政编码进行免费导出。忘了添加我有所有我需要的计算来获得距离只需要一种按最近的方式动态列出的方法。
标签: sql asp-classic distance latitude-longitude