如何从GPS坐标查找邮政编码?

jpm*_*jpm 15 iphone gps zipcode

假设我有一个接受邮政编码作为参数的Web服务API,但我只能访问GPS坐标(纬度,经度).如何动态查找坐标所属的zipcode?

我正在iPhone上做这个工作,所以希望在我在文档中忽略的CoreLocation API中有一个简单的方法.

nev*_*ing 15

此页面提供了美国所有邮政编码的数据库(csv)及其纬度和经度. http://zips.sourceforge.net/

该文件已解压500k.这是前几行数据:

"35004", "AL", " 33.606379", " -86.50249", "Moody", "Alabama"
"35005", "AL", " 33.592585", " -86.95969", "Adamsville", "Alabama"
"35006", "AL", " 33.451714", " -87.23957", "Adger", "Alabama"
Run Code Online (Sandbox Code Playgroud)

将此数据转储到本地数据库中.使用Haversine公式比较您的坐标和数据库中的坐标以找到最近的点.CoreLocation有一个你可以使用的函数getDistanceFrom.

- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location
Run Code Online (Sandbox Code Playgroud)

此页面包含c中的Haversine函数和有关zips数据库的信息.

http://www.jaimerios.com/?p=39

编辑:这是Google对计算距离的一个很好的解释.它使用MySQL和PHP,但用于查找最近点的SQL在这里也很有用.使用SQL查询可能更快,而不是getDistanceFrom函数.

http://code.google.com/support/bin/answer.py?answer=87134&topic=11364

找到距离37,-122坐标25英里半径范围内最近的20个位置:

SELECT id, ( 3959 * acos( cos( radians(37) ) 
 * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) 
 + sin( radians(37) ) * sin( radians( lat ) ) ) ) 
 AS distance FROM markers HAVING distance < 25 
 ORDER BY distance LIMIT 0 , 20; 
Run Code Online (Sandbox Code Playgroud)

要以公里而不是里程搜索,请将3959替换为6371.


Jan*_*les 6

如果我是你,我会尝试查看3.0 SDK中反向地理编码器的文档.我不能说那里有什么,但你可能会发现反向地理编码返回一个placeMark,然后如果你在SDK中查找placeMark,你可能会发现它有一个邮政编码属性.谁知道?