我的小网站应该使用活动用户的位置作为过滤器来汇集表格中的项目列表。想想Craigslist,你在那里搜索“dvd”但结果不是来自所有数据库,它们会被你选择的位置过滤。我的问题有2个级别:
我似乎更喜欢使用邮政编码方式,因为它似乎更优雅的解决方案,但是如何创建所有邮政编码的数据库并实现给定邮政编码12345的功能,获取1英里距离的所有邮政编码?
这应该是相当普遍的“任务”,因为许多网站都需要与我的相似,所以我希望不要在这里重新发明轮子。
答案 0 :(得分:5)
获取邮政编码数据库没问题。你可以尝试这个免费的: http://zips.sourceforge.net/
虽然我不知道它的当前状态,或者您可以使用众多提供商中的一个。我们每年订阅ZipCodeDownload.com,每100美元我们可以获得最新的邮政编码数据,包括邮政编码质心的纬度/长度。
对于查询某个半径范围内的所有拉链,您将需要某种空间库。如果您只有一个拉链/长拉链表,您将需要一个面向数据库的机制。 SQL Server 2008具有内置功能,open source libraries和commercial libraries将为SQL Server 2005添加此类功能。开源数据库PostgreSQL有一个项目,PostGIS将此功能添加到该数据库。它在这里:http://postgis.refractions.net/
其他数据库平台可能有类似的项目,但那些是我所知道的。使用其中一个基于DB的库,您应该能够直接查询给定半径内的任何邮政编码(或任何具有纬度/长列的行)。
如果您想要使用不同的路线,可以将空间工具与映射库一起使用。这里也有开源选项,例如SharpMap和many others(Google can help out)可以使用美国的免费Tiger地图作为数据源。但是,如果你需要的只是半径搜索,这条路线会更复杂,而且性能也可能更差。
最后,您可能想要查看Web服务。正如您所说,这是一个常见的需求,我想您可以订阅任何数量的ob web服务,它们可以提供给定半径内的所有邮政编码。谷歌快速搜索了这个: http://www.zip-codes.com/free-zip-code-tools.asp#radius 但是关于这个主题有MANY resources to be had for the searching。
答案 1 :(得分:0)
如何实现给出邮政编码12345的功能,获取1英里距离内的所有邮政编码?
以下是如何执行此操作的示例:
答案 2 :(得分:0)
只是技术性... PostGIS不是Postgres社区的项目......它是一个独立的项目,建立在Postgres之上。如果您需要PostGIS的帮助或支持,您将需要访问它的社区而不是Postgres。
答案 3 :(得分:0)
您可以使用PostGIS。另外,我使用了deCarta的映射库。他们的技术允许您根据任意数据类型进行调整。然后你可以在空间上查询这些。
免责声明:我为deCarta工作
答案 4 :(得分:0)
仅仅弄清楚哪些城市在1英里半径范围内并将这些信息存储在表格中会不会更有效率?然后,您不必一直在数据库中进行计算。