我已从http://www.ordnancesurvey.co.uk/oswebsite/opendata/index.html下载了英国邮政编码列表,并将其安装在MSSQL 2005数据库中。该表由邮政编码,纬度和经度组成。我需要一种有效的方法来获得给定纬度/经度的最近的邮政编码。计算两点之间的距离并选择最小值意味着循环遍历每个查询的所有数据。大约有170万条目。感谢。
答案 0 :(得分:2)
您可以通过首先使用“圆近似”过滤查询来加强计算 - 即。返回确定半径delta
内的所有邮政编码。基本查询应该是这样的:
SELECT postcode, x, y FROM table WHERE ((x BETWEEN x - delta AND x + delta) AND (y BETWEEN y - delta AND y + delta))
现在剩下的数据量应该更容易管理。
此外,如果您正在开发“关键任务”,请务必查看PostGIS。可能他们已经解决了你可能遇到的一些问题......;)