什么是n内英里的邮政编码查询记录的数据库的最佳方式?
-
22-08-2019 - |
题
我有一个记录列表在我的数据库和每个记录与邮政编码相关联。
什么是“最佳实践”为查询所有记录在我的数据库发现是另一邮政编码ñ英里?
内的所有条目每个邮政编码有一个纬度/长,它的数据库相关联,所以我知道我将不得不使用它。然而,我无法想象运行在每个对邮政编码任何种类的距离公式的,转换为英里和拒绝那些没有我的半径范围内。
这似乎对于这样一种通用查询非常计算上昂贵的。
我也考虑做一个全对预先计算的,但它似乎太大也需要考虑。目前在美国大约〜40000邮政编码。所以,每个邮政编码的所有对数据库将是(40000)^ 2,或16亿个条目。
我知道这是网站上的一个共同的问题,所以希望有人能指出我在最好的方式向正确的方向。我使用的 SQL Server 2008中如果有预先构建的解决方案在那里再大,因为我真的不希望在这种情况下,重新发明轮子
相关问题:获取内半径<所有邮政编码/一>(这并没有帮助我)点击 另外,我知道这 SourceForge上项目,但它是被遗弃的,不再使用。
解决方案
我会运行返回广场信封括号内的所有记录encompasing径向搜索圈查询(minlat 如果你想获得幻想,SQL服务器支持空间索引
其他提示
我运行需要运行大约每用户的第二一旦这个查询的位点,这里就是我的经验:
首先,请确保您的位置表对纬度和经度索引。这间20周毫秒和15秒的响应时间的差异,如果你有几百万的记录。
与边界框查询来获取一组位置与工作的开始。然后在这些计算距离,排序,如果你是挑剔的准确性,筛选几出。
坦率地说,我不会担心预先计算任何东西。就像我说的,我经营的这种对位置表的查询有600万项,它通常返回<50ms的结果。根据您的需求,真正奥特足够快。
祝你好运!
这是实际上解决一个非常困难的问题。我建议你通过创建预数据库做一些作弊。创建的任何一种亲近你需要找到,例如,采取每10英里每一个方向,添加到数据库中的条目为每个邮政编码为该网格点的距离,然后当查询进来,你网格第一查询点转换为网格点之一。现在,您可以查找距离很容易。
该解决方案基本上意味着时间的交易空间,让你可以迅速获得相当大的数据库。可喜的是:它是很容易的数据索引
您应该看看 GeoNames.org 。您可以查询自己的 web服务什么你正在寻找,或者你可以延胡索thier数据库。