MySQL PHP邮政编码比较具体距离

时间:2010-02-28 01:57:40

标签: php mysql zip distance

我正在试图找出比较一个邮政编码(用户提供的)和一大堆其他邮政编码之间的距离最有效(相对于加载时间)(大约有200个邮编)现在代码,但它的主题随着时间的推移而增加)。我不需要任何确切的球场。

我为所有美国人下载了一个邮政编码csv文件,我有一个函数可以产生两个邮政编码之间的距离(我相信是弧度)。我不需要显示我需要的距离对200个邮政编码进行排序,其中最接近的是第一个结果。

我将csv文件上传到mysql表。我以为我可以遍历所有200个邮政编码,并为包含距离的每个邮政编码更新一个字段。然后使用ORDER BY,从最近到最远的方式对它们进行排序。

有谁知道更有效的方法吗?这种方式需要在每次运行搜索查询时更新整个邮政编码数据库。现在只有200个邮政编码,这不是什么大问题,但我认为它会减慢数据库构建时的加载时间。非常感谢任何建议,非常感谢!

1 个答案:

答案 0 :(得分:2)

在Javascript中:

var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad(); 
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * 
        Math.sin(dLon/2) * Math.sin(dLon/2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c;

其中d =两点之间的距离

这是Haversine formula