如何在给定邮编(或坐标)和半径的情况下获取邮编(GB)列表?

3
有很多关于此主题的文章,但我找不到适合我的。 我唯一需要的就是获取距离另一个邮编x英里半径内的邮编列表。 我没有邮编数据库,虽然有一个免费服务可以做到我需要的(http://postcodes.io/),但它确实有一个限制(最大半径= 2公里),所以我无法使用它。
我认为可能需要更详细地查看google maps API,我相信它可能提供我需要的内容,但从文档中并不清楚,而且它非常专注于地图(现在我并不关心)。 如果有人能帮忙解决问题,我将不胜感激。
这是为C#项目设计的,因此欢迎任何有用的库。
2个回答

4

下载邮政编码数据库,例如这个这个。如果您对数据的高精度和完整度有要求,请考虑购买官方数据库的访问权限。您可以使用Google的GeoCoding API来检索缺失的坐标。如果您需要解决更多的代码超过每日允许的免费配额,我建议购买更大的配额,这相当便宜。谷歌在文档中涵盖了此问题。

一旦您拥有了数据库,可以将其存储在具有地理扩展的SQL数据库中,例如Postgis,然后使用SQL进行查找,或预处理成允许快速查找相邻邮政编码的形式。根据我的经验,通过邮政编码进行查找的最佳选项是增加一些开销并存储哈希映射的postcode → [(postcode, distance), (postcode, distance), ..]关系,列表包含您将要查找的最大半径的每个邮政编码。也就是说,不要在搜索中使用树遍历。对于坐标到邮政编码的关系,您可以使用一个复杂的用于空间数据的数据结构,例如BSP树,或者保持简单并使用粗略的二维网格结构,其中每个节点包含在网格内与关联正方形相邻的所有邮政编码。


3
为了补充已接受的答案,postcodes.io还提供了数据集的pg_dump(需要启用Postgis的Postgresql)。

下载并解压文件后,只需执行一个Postgresql恢复程序,例如$ cat postcodeiodb.sql | psql postcodesiodb,即可导入整个数据集。不需要额外的导入脚本。此外,pg_dump将为您创建所有必要的架构和索引。

该项目在此处保留对最新数据集的指针:https://github.com/ideal-postcodes/postcodes.io/blob/master/latest

免责声明:我维护postcodes.io


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接