我有一个记录列表在我的数据库和每个记录与邮政编码相关联。

什么是“最佳实践”为查询所有记录在我的数据库发现是另一邮政编码ñ英里?

内的所有条目

每个邮政编码有一个纬度/长,它的数据库相关联,所以我知道我将不得不使用它。然而,我无法想象运行在每个对邮政编码任何种类的距离公式的,转换为英里和拒绝那些没有我的半径范围内。

这似乎对于这样一种通用查询非常计算上昂贵的。

我也考虑做一个全对预先计算的,但它似乎太大也需要考虑。目前在美国大约〜40000邮政编码。所以,每个邮政编码的所有对数据库将是(40000)^ 2,或16亿个条目。

我知道这是网站上的一个共同的问题,所以希望有人能指出我在最好的方式向正确的方向。我使用的 SQL Server 2008中如果有预先构建的解决方案在那里再大,因为我真的不希望在这种情况下,重新发明轮子


相关问题:获取内半径<所有邮政编码/一>(这并没有帮助我)点击 另外,我知道这 SourceForge上项目,但它是被遗弃的,不再使用。

有帮助吗?

解决方案

我会运行返回广场信封括号内的所有记录encompasing径向搜索圈查询(minlat

如果你想获得幻想,SQL服务器支持空间索引

其他提示

我运行需要运行大约每用户的第二一旦这个查询的位点,这里就是我的经验:

首先,请确保您的位置表对纬度和经度索引。这间20周毫秒和15秒的响应时间的差异,如果你有几百万的记录。

与边界框查询来获取一组位置与工作的开始。然后在这些计算距离,排序,如果你是挑剔的准确性,筛选几出。

坦率地说,我不会担心预先计算任何东西。就像我说的,我经营的这种对位置表的查询有600万项,它通常返回<50ms的结果。根据您的需求,真正奥特足够快。

祝你好运!

这是实际上解决一个非常困难的问题。我建议你通过创建预数据库做一些作弊。创建的任何一种亲近你需要找到,例如,采取每10英里每一个方向,添加到数据库中的条目为每个邮政编码为该网格点的距离,然后当查询进来,你网格第一查询点转换为网格点之一。现在,您可以查找距离很容易。

该解决方案基本上意味着时间的交易空间,让你可以迅速获得相当大的数据库。可喜的是:它是很容易的数据索引

您应该看看 GeoNames.org 。您可以查询自己的 web服务什么你正在寻找,或者你可以延胡索thier数据库。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top