我正在制作一个网站,每个用户提交帖子时必须提供邮政编码或城市/州的位置。如何处理这个问题是最佳实践?我是否应该创建一个包含邮政编码和城市/州的表格,并针对它们进行查询,还是有现成的解决方案来处理这个问题?
我使用的是SQL Server 2005,如果有区别的话。
我需要能够根据城市/州检索出邮政编码,或者能够根据邮政编码输出城市/州。
根据您正在构建的细节,Yelp有一个免费的社区API,可能能够为您提供所需的内容。请确保检查他们的使用条款等内容,以确保您遵守规定。
我知道这不是一个数据库中心的答案,但您正在做的事情可能不是最好在数据库本身处理。
有许多免费的地理编码网络服务可以让你从城市或州获取邮政编码,反之亦然。看看GeoNames网络服务。你可以这样做:检查你的数据库,如果你要查找的内容不在那里,就从网络服务中获取并添加它。
对于美国州表,您可以使用以下查询,假设您在States
表中有StateId
和StateName
,并且您有StateId
自动递增。
此查询具有50个美国州...
INSERT INTO States
( StateName )
VALUES
( 'Alabama'),
( 'Alaska'),
( 'Arizona'),
( 'Arkansas'),
( 'California'),
( 'Colorado'),
( 'Connecticut'),
( 'Delaware'),
( 'District of Columbia'),
( 'Florida'),
( 'Georgia'),
( 'Hawaii'),
( 'Idaho'),
( 'Illinois'),
( 'Indiana'),
( 'Iowa'),
( 'Kansas'),
( 'Kentucky'),
( 'Louisiana'),
( 'Maine'),
( 'Maryland'),
( 'Massachusetts'),
( 'Michigan'),
( 'Minnesota'),
( 'Mississippi'),
( 'Missouri'),
( 'Montana'),
( 'Nebraska'),
( 'Nevada'),
( 'New Hampshire'),
( 'New Jersey'),
( 'New Mexico'),
( 'New York'),
( 'North Carolina'),
( 'North Dakota'),
( 'Ohio'),
( 'Oklahoma'),
( 'Oregon'),
( 'Pennsylvania'),
( 'Puerto Rico'),
( 'Rhode Island'),
( 'South Carolina'),
( 'South Dakota'),
( 'Tennessee'),
( 'Texas'),
( 'Utah'),
( 'Vermont'),
( 'Virginia'),
( 'Washington'),
( 'West Virginia'),
( 'Wisconsin'),
( 'Wyoming');
我的理解是USPS Web API是免费使用的,但需要获得许可,这取决于多种因素,包括将使用它的程序的性质和您需要数据的原因。
如果您有资格使用它,那么这可能是您所需信息最准确的来源。
我不确定我理解这个问题。您需要允许其中一个,然后稍后返回两个吗?
即使使用可以购买的zip / city数据库,您也必须小心,因为有些城市跨越多个zip,因此您不能总是以那个方向“计算”。相反方向也存在类似问题。
有一些可以购买和导入的库不是很昂贵。你们使用它们的问题将是您将需要进行持续的维护成本(不多)。邮政编码一直在变化,这意味着在6个月左右,您的数据将略有过时。您可能希望考虑与像谷歌地图这样的服务进行接口。在这里,我们采用混合方法。我们每6个月花费更新数据的金额,如果邮政编码不在表中,我们会根据谷歌地图验证它,以确保输入的信息仍然有效,而且它只是没有被输入到我们的系统中。如果它是有效的,我们就会更新系统,否则我们会让用户知道出现了错误。
另一个选择是ping USPS网站。我相信他们有一个按邮政编码查找城市/州的页面。
我已经掌握了这个技巧。这里有一个免费的(压缩,csv):
表头是 zip,city,state,latitude,longitude,timezone,dst
现在,你可能会失去的是你没有为更新付费(这可能会在最后让你吃亏,但他们会尽量保持更新)