0

我试图弄清楚比较一个邮政编码(用户提供)和一大堆其他邮政编码(现在大约有 200 个邮政编码)之间的距离最有效(就加载时间而言) ,但它的主题会随着时间的推移而增加)。我不需要任何确切的东西就在球场上。

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

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

有谁知道更有效的方法来做到这一点?这种方式需要在每次运行搜索查询时更新整个邮政编码数据库。现在只有 200 个邮政编码,这没什么大不了的,但我想它会随着数据库的构建而减慢加载时间。提前感谢您的任何建议,非常感谢!

4

1 回答 1

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 公式

于 2010-02-28T02:11:54.367 回答