2008-08-15 36 views
4

我的小站点应该使用活动用户的位置作为过滤器来汇集表格中的项目列表。想想Craigslist,在那里你搜索“DVD”,但结果不是所有的数据库,它们是由您选择一个位置过滤我的问题有2级:通过邮编或其他基于位置的数据检索策略进行过滤

  1. 我应该去一拉Craigslist的,并要求用户使用城市级别的位置?我的问题是,你需要生成在我看来是一个硬编码,手工制作的位置列表
  2. 我应该去a-la-zipCode。要求用户输入自己的邮政编码,然后集中是在相同或从他邮政编码一定距离的所有项目。

我似乎更喜欢邮政编码因为它似乎更优雅的解决方案,但究竟如何创建一个所有的邮政编码的DB和实现邮政编码12345的功能,获得所有邮政编码在1英里的距离?

这应该是相当普遍的“任务”,因为许多网站都有类似于我的需求,所以我希望不要在这里重新发明轮子。

回答

5

获取邮政编码数据库是没有问题的。你可以尝试这个免费的: http://zips.sourceforge.net/

虽然我不知道它是如何当前,或者你可以使用许多提供商之一。我们每年订阅ZipCodeDownload.com,并且可能有100美元,我们每月更新最新的邮政编码数据,并附有邮政编码质心的纬度/长度。

至于查询某个半径内的所有拉链,您将需要某种空间库。如果你只有拉丁文的lats/longs表,你需要一个面向数据库的机制。 SQL Server 2008具有内置的功能,并且有open source librariescommercial libraries可以将这些功能添加到SQL Server 2005.开源数据库PostgreSQL有一个项目PostGIS,它将该功能添加到该数据库。它在这里:http://postgis.refractions.net/

其他数据库平台可能有类似的项目,但这些是我所知道的。使用这些基于数据库的库之一,您应该能够直接查询给定半径内的任何邮政编码(或具有经纬度/长列的任何类型的任何行)。

如果您想要采用不同的路线,可以将空间工具与映射库一起使用。这里也有开源选项,例如SharpMapmany othersGoogle can help out),它们可以使用美国的免费Tiger地图作为数据源。但是,如果您需要的只是半径搜索,则此路线稍微复杂一点,性能可能较差。

最后,您可能希望查看Web服务。正如你所说,这是一个普遍的需求,我想有可以订阅的任何数量的ob服务,可以从提供的邮政编码提供给定半径内的所有邮政编码。一个快速的谷歌搜索出现了这个: http://www.zip-codes.com/free-zip-code-tools.asp#radius 但在这个问题上有MANY resources to be had for the searching

0

只要是技术...... PostGIS的不是Postgres的社区的一个项目......这是一个独立的建立在Postgres之上的项目。如果你需要PostGIS的帮助或支持,你会想要去社区而不是Postgres。

0

您可以使用PostGIS。另外,我使用了deCarta的映射库。他们有技术可以让你任意任意数据类型。然后你可以在空间上查询这些。

声明:我deCarta的

工作
0

那岂不是更有效的,只是弄清楚哪些城市有1英里半径范围内,并在表中存储的信息?那么你不必一直在数据库中进行计算。