假设我有一个接受邮编作为参数的web服务API,但我只能访问GPS坐标(经度,纬度)。我如何动态查找坐标所属的邮编?如何从GPS坐标查找邮编?
我正在iPhone上做这项工作,所以希望有一个简单的方法可以在CoreLocation API中完成,我在文档中忽略了这一点。
假设我有一个接受邮编作为参数的web服务API,但我只能访问GPS坐标(经度,纬度)。我如何动态查找坐标所属的邮编?如何从GPS坐标查找邮编?
我正在iPhone上做这项工作,所以希望有一个简单的方法可以在CoreLocation API中完成,我在文档中忽略了这一点。
我想尝试检查3.0 SDK中反向地理编码器的文档,如果我是你的话。我不能说有什么,但是你可能会发现,反向地理编码返回placeMark,然后如果你在SDK中查找placeMark,你可能会发现它有一个postcode属性。谁知道?
这种查找称为“反向地理定位”。
你需要做的第一件事就是从CLocation对象度转换为纬度/经度数据...
中的LocationManager功能(一旦你获得一个位置更新被称为)....
代码:
[lat stringWithFormat:@"%+.6f", myLocation.coordinate.latitude];
[lng stringWithFormat:@"%+.6f", myLocation.coordinate.longitude];
从那里您发送纬度和经度字符串到后端web服务,如“GeoNames.org”或谷歌地图API ......,你可以得到最近的城市或街道地址。
有一个数据库由美国人口普查 - 老虎数据库。我相信有一个可能性来查找邮政编码拉特/长。
我会打赌,如果你搜索Tiger zipcode你可能会发现一些东西。例如,请参见here。看起来CPAN上有一个Perl模块可以实现这一点,所以它不应该是不可能的。
此页面提供美国所有邮政编码的数据库(包含csv)及其经纬度。 3210
该文件是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中具有Haversine功能和有关zips数据库的信息。
http://www.jaimerios.com/?p=39
编辑:从谷歌有关计算距离继承人很好的解释。它使用MySQL和PHP,但用于查找最近点的SQL在这里也很有用。使用SQL查询可能会更快,而不是getDistanceFrom函数。
http://code.google.com/support/bin/answer.py?answer=87134&topic=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。
这只会给你的最接近中心的距离一个邮政编码区域,它不会告诉你坐标实际在哪个邮政编码,因为OP要求。 – user4815162342 2012-04-24 04:24:22
我降低了这一点,因为每个月都会添加和删除邮政编码。如果您认真对待邮政编码查询的准确性,您应该购买邮政编码数据的订阅,并每隔几个月为您的数据集重新整理一下。您的质量检查过程应特别包括注意哪些邮编已被*删除*,因为您可能需要更新相关数据以引用正在替换被删除邮件的邮编。 – 2012-11-19 21:00:37
Google提供免费的反向地理编码服务。您可以直接使用它,或者尝试使用Temboo SDK,它提供了多种语言的便捷访问,包括Objective C(带有代码示例)。
退房https://www.temboo.com/library/Library/Google/Geocoding/GeocodeByCoordinates/
我怀疑你会发现它在CoreLocation,但它是值得一试...这将是有趣的,看看它是否 – hhafez 2009-05-28 01:51:46