说我有一个接受邮政编码作为参数的web服务API,但是我只有坐标访问GPS(纬度,经度)。我怎样才能动态查找该坐标所属的邮政编码到?

我做对iPhone这项工作,所以希望有一个简单的方法给我俯瞰文档中的CoreLocation的API内做到这一点。

有帮助吗?

解决方案

我想尝试在3.0 SDK检查出的反向地理编码的文档,如果我是你。我不能说那里的东西,但你可能会,比方说,发现反向地理返回地标,然后如果你在SDK中查找该地标时,你可能会发现,它有一个邮政编码属性。谁知道?

其他提示

这个页面提供在美国所有邮政编码的数据库(在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"

转储这些数据到本地数据库中。使用haversine公式到你的坐标和那些比较在数据库中找到的最近点。 CoreLocation有一个函数getDistanceFrom,您可以使用了。

- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location

这个页面具有c和信息有关拉链数据库一个半正矢函数。

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

编辑:继承人从谷歌有关计算距离的很好的解释。它使用MySQL和PHP,但寻找最近的点SQL这里也是有用的。它可能会更快使用SQL,而不是getDistanceFrom功能来查询。

http://code.google.com/support/的bin / answer.py?回答= 87134&主题= 11364

寻找最近的20个位置是25英里至37的半径范围内的是,-122坐标:

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; 

要由公里而非英里搜索,与6371替换3959。

这样查找被称为“反向地理定位。”

您需要做的是从CLocation对象纬度/经度数据转换为度...的第一件事

在的LocationManager功能(一次收到的位置更新被称为)....

代码:

[lat stringWithFormat:@"%+.6f", myLocation.coordinate.latitude];
[lng stringWithFormat:@"%+.6f", myLocation.coordinate.longitude];

从那里,你发送的纬度和经度字符串到后端web服务,如“GeoNames.org”或谷歌地图API ......,你可以得到最近的城市或街道地址。

有是美国人口调查产生的数据库 - 虎数据库。我相信这是查找指定纬度/长邮政编码的可能性。

如果您搜索的虎邮政编码你可能会发现一些东西。看到这里例如的。似乎有,这是否上CPAN Perl模块,因此它不应该是不可能的。

谷歌提供了一个免费的反向地理编码服务。可以直接使用它,或尝试Temboo SDK它提供多语言方便访问,包括目标C(与代码样品)。

查核 https://www.temboo.com/library/Library /谷歌/地址解析/ GeocodeByCoordinates /

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top