关于邮政编码:按邮政编码或其他基于位置的数据检索策略过滤

关于邮政编码:按邮政编码或其他基于位置的数据检索策略过滤

Filter by zip code, or other location based data retrieval strategies

我的小网站应该使用活动用户的位置作为过滤器来汇总表中的项目列表。想想Craigslist,您在其中搜索" dvd",但结果并非来自所有数据库,而是按您选择的位置进行过滤。我的问题分为2个级别:

  • 我应该去la-craigslist,并要求用户使用城市级别的位置吗?我的问题是,您需要生成对我来说似乎是硬编码的手工位置列表。
  • 我应该去一个la-zipCode。只是要求用户键入邮政编码,然后合并与邮政编码相同或相距一定距离的所有项目的想法。
  • 我似乎更喜欢邮政编码方式,因为它似乎是更优雅的解决方案,但是到底如何创建一个包含所有邮政编码的DB并实现给定邮政编码12345的功能,从而在1英里距离内获取所有邮政编码?

    这应该是相当常见的"任务",因为许多站点都需要与我的站点类似的驱动程序,因此我希望不要在这里重新发明轮子。


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

    尽管我不知道它是最新的,还是可以使用许多提供程序之一。我们每年都订阅ZipCodeDownload.com,并且可能每月支付100美元,即可获得包含邮政编码中心的纬度/经度的最新邮政编码数据的每月更新。

    至于查询特定半径内的所有拉链,您将需要某种空间库。如果只有一张带经纬度的邮政编码表,则需要一种面向数据库的机制。 SQL Server 2008内置了此功能,并且有开源库和商业库将这些功能添加到SQL Server 2005中。开源数据库PostgreSQL有一个项目PostGIS,它将此功能添加到该数据库中。它在这里:http://postgis.refractions.net/

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

    如果您要走另一条路,可以将空间工具与地图库一起使用。这里也有开源选项,例如SharpMap和许多其他选项(Google可以帮助您),它们可以将美国的免费Tiger地图用作数据源。但是,如果您仅需要半径搜索,则此路线会稍微复杂一些,并且性能可能会降低。

    最后,您可能需要研究Web服务。正如您所说的,这是一个普遍的需求,我想您可以订阅许多网络服务,这些服务可以从提供的邮政编码提供给定半径内的所有邮政编码。快速的Google搜索结果显示:
    http://www.zip-codes.com/free-zip-code-tools.asp#radius
    但是,有很多资源可供搜索。


    仅找出半径1英里范围内的城市并将其存储在表格中会不会更有效率?然后,您不必一直在数据库中进行计算。


    您可以使用PostGIS。另外,我使用了deCarta的映射库。他们拥有允许您对任意数据类型进行地理编码的技术。然后,您可以在空间上查询这些内容。

    免责声明:我为deCarta工作


    只是出于技术方面的考虑……PostGIS不是Postgres社区的项目……它是在Postgres之上构建的独立项目。如果您想获得有关PostGIS的帮助或支持,您将需要访问它的社区而不是Postgres。


    how on earth do one [...] implement the function that given zip code 12345, gets all zipcodes in 1 mile distance?

    这是有关如何执行此操作的示例:

    http://www.codeproject.com/KB/cs/zipcodeutil.aspx


    推荐阅读