更新:iPhone SDk 3.0现在解决了这里的问题,但是NDA阻止了任何深入的讨论。如果您需要更多信息,请登录iPhone开发人员中心。
好的,我不得不承认我在这里有点失落。
我对Cocoa感到相当满意,但是我很难找到解决这个问题所需的一些javascript。
我正在尝试向Google发送反向地理代码请求。
我查看了我在此处查看过的Google文档: http://code.google.com/apis/maps/documentation/index.html http://code.google.com/apis/maps/documentation/geocoding/
即使经过粗略阅读,我也错过了一个基本概念:
我如何与谷歌交谈?在某些示例中,他们显示了一个发送到谷歌的网址(这似乎很容易),但在其他人,他们显示javascript。对于反向地理编码,请求可能比发送带有一些参数的url更难(但我希望我错了)。
有人能指出我提出请求的正确方法吗? (在目标C中,所以我可以绕过它)
答案 0 :(得分:9)
UPDATE - iPhone 0.3包含MapKit,希望它比使用JS API快得多。 blurb表示它将包括反向地理编码。
您无法直接在Objective-C中提出请求,至少不在Google API的条款范围内。 Google API是用Javascript编写的。您可以使用objective-c到JS桥,就像Google Maps Component那样,但这并没有真正解决问题 - 您仍在进行JS调用!
不幸的是,这意味着你 a)需要使用webview b)需要使用速度慢的JS API ...与使用完全不同的OTA协议的Google Maps应用程序进行比较(尝试数据包嗅探它)。
然而,谷歌地图组件是如何简单调用API的有用教程。
答案 1 :(得分:4)
我创建了SVGeocoder,一个简单的iOS前向和反向地理编码器类。它使用Google地理编码API,返回SVPlacemark对象(MKPlacemark
属性为coordinate
的子类)并使用块。
这是您对地址字符串进行地理编码的方式:
[SVGeocoder geocode:addressString
completion:^(NSArray *placemarks, NSError *error) {
// do something with placemarks, handle errors
}];
您还可以反向对此坐标进行地理编码:
[SVGeocoder reverseGeocode:CLLocationCoordinate2DMake(45.53264, -73.60518)
completion:^(NSArray *placemarks, NSError *error) {
// do something with placemarks, handle errors
}];
答案 2 :(得分:3)
使用Cocoa获取Google地图的最简单方法是使用“Static Maps API”。实际上,您需要准备一个用于与Google联系的NSURL。您将地图作为NSData返回,转换为NSImage。请注意,您可以执行地理编码和反向地理编码。您还可以在地图上嵌入标记。但是,如果使用JavaScript API,则会丢失您有权访问的完整控件。
在这里查看他们的参考指南:
答案 3 :(得分:2)
既然苹果已经发布了适用于OS 3.0的MapKit API,我认为您的问题已得到解答。看过API文档后,我可以看到很多潜力!我仍然希望看到来自谷歌的反向地理编码网络服务,但雅虎将在此期间做。
答案 4 :(得分:1)
有关您的信息:Google针对XML请求提供的反向地理编码API不公开,因此使用它是非法的。唯一合法的方法是通过他们的JavaScript-API,正如你所发现的那样,在Cocoa中比在简单地发送HTTP请求更难。
答案 5 :(得分:1)
从iOS5开始,我们有以下开发文档中所述的选项: *“地理编码器对象使用网络服务在纬度和经度值之间进行转换,以及用户友好的地标,这是一个数据集合,如街道,城市,州和国家/地区信息。反向地理编码是转换a的过程。转发地理编码是将地名信息转换为纬度和经度值的过程。所有版本的iOS都支持反向地理编码,但仅在iOS 5.0及更高版本中支持转发地理编码。“*
您现在可以使用CLGeocoder对象。
答案 6 :(得分:0)
另请尝试查看google maps component。
答案 7 :(得分:0)
实际上,我并不认为反向地理编码是“将一个点转换为人类可读的地址”,而是使用Google Map(也可能根据准确性级别显示一个人类可读的地址)来显示一个点。 )。这是所需的基本功能。
在实践中,我只想建议静态地图API作为一种干净而快速的方式:
1)给定从iPhone GPS传感器获得的坐标,检索显示该点的Google Map
2)给定一个地址,在相应的地理坐标中对其进行转换,然后使用坐标检索显示给定地址的Google地图
使用涉及静态地图和地理服务的简单NSURL
都可以实现http://maps.google.com/staticmap? http://maps.google.com/maps/geo?
传递所需的参数以提供合适的查询字符串。
亲切的问候
答案 8 :(得分:0)
当然,最重要的问题是谷歌和雅虎的许可协议都规定你不能在“商业应用程序”中使用这些API。不愿意在应用程序商店中发布一个应用程序,只是让它被雅虎或谷歌取消并起诉。在阅读iPhone 3.0地图api和相关许可证时,没有提到这个,但如果你想让一个应用程序在未升级的手机上运行....
有没有答案可以解决这个问题?
答案 9 :(得分:0)
http://blog.cloudmade.com/2009/06/12/how-to-get-forward-geocoding-in-iphone-mapkit/
CloudMade似乎是一个开源地图/位置提供商 - 上面的博客文章列出了有关如何推进地理编码的详细信息。