我的小网站应该使用活动用户的位置作为过滤器来汇集表格中的项目列表.想想Craigslist,你在那里搜索"dvd"但结果不是来自所有数据库,它们会被你选择的位置过滤.我的问题有2个级别:
我应该去a-la-craigslist,并要求用户使用城市级别的位置?我的问题是你需要生成一个硬编码,手工制作的位置列表.
我应该去a-la-zipCode吗?想要用户输入他的邮政编码,然后汇集与他的邮政编码相同或一定距离的所有项目的想法.
我似乎更喜欢使用邮政编码方式,因为它似乎更优雅的解决方案,但是如何创建所有邮政编码的数据库并实现给定邮政编码12345的功能,获取1英里距离的所有邮政编码?
这应该是相当常见的"任务",因为许多站点都需要类似于我的,所以我希望不要在这里重新发明轮子.
获取邮政编码数据库是没有问题的.你可以尝试这个免费的:http: //zips.sourceforge.net/
虽然我不知道它是最新的,或者你可以使用许多提供者之一.我们每年订阅ZipCodeDownload.com,每100美元,我们每月都会获得最新的邮政编码数据,包括邮政编码质心的纬度/长度.
至于查询某个半径内的所有拉链,您将需要某种空间库.如果您只有一个拉链/长拉链表,您将需要一个面向数据库的机制.SQL Server 2008具有内置功能,并且有开源库和商业库可以将这些功能添加到SQL Server 2005.开源数据库PostgreSQL有一个项目,PostGIS将此功能添加到该数据库.它在这里:http://postgis.refractions.net/
其他数据库平台可能有类似的项目,但那些是我所知道的.使用其中一个基于DB的库,您应该能够直接查询给定半径内的任何邮政编码(或任何具有纬度/长列的行).
如果要使用不同的路径,可以将空间工具与映射库一起使用.这里也有开源选项,例如SharpMap和许多其他人(谷歌可以提供帮助),可以使用美国的免费Tiger地图作为数据源.但是,如果你需要的只是一个半径搜索,这条路线会更复杂,而且性能也可能更差.
最后,您可能想要查看Web服务.正如您所说,这是一个常见的需求,我想您可以订阅任何数量的ob web服务,它们可以提供给定半径内的所有邮政编码.一个快速的谷歌搜索出现了这个:http: //www.zip-codes.com/free-zip-code-tools.asp#radius 但是有很多资源可供搜索这个主题.