14

更新: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/

即使经过粗略阅读,我仍然缺少一个基本概念:

我如何与谷歌交谈?在某些示例中,它们显示了一个正在发送到 google 的 url(这似乎很容易),但在其他示例中,它们显示了 javascript。似乎对于反向地​​理编码,请求可能比发送带有一些参数的 url 更难(但我希望我错了)。

有人可以指出我提出请求的正确方法吗?(在objective-C中,所以我可以绕着它转)

4

10 回答 10

9

更新 - iPhone 0.3 包括 MapKit,它有望比使用 JS API 快得多。简介说它将包括反向地理编码。

您不能直接在 Objective-C 中发出请求,至少不能在 Google API 的条款内。Google API 是用 Javascript 编写的。您可以使用objective-c 到JS 的桥接,就像Google Maps 组件所做的那样,但这并不能真正解决问题——您仍在进行JS 调用!

不幸的是,这意味着您 a) 需要使用 webview b) 需要使用速度较慢的 JS API……与使用完全不同的 OTA 协议的 Google Maps 应用程序相比(尝试数据包嗅探)。

然而,Google Maps 组件是一个有用的教程,介绍了如何对 API 进行简单调用。

于 2009-02-19T14:49:07.100 回答
4

我创建了SVGeocoder ,这是一个用于 iOS的简单正向和反向地理编码器类。它使用 Google Geocoding 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
                }];
于 2011-02-12T02:05:34.683 回答
3

使用 Cocoa 获取 Google 地图的最简单方法是使用“静态地图 API”。在实践中,您需要准备一个用于联系 Google 的 NSURL。您将地图作为 NSData 取回,然后转换为 NSImage。请注意,您可以进行地理编码和反向地理编码。您还可以在地图上嵌入标记。但是,如果您使用他们的 JavaScript API,您将失去可以访问的全部控制权。

在此处查看他们的参考指南:

http://code.google.com/apis/maps/documentation/staticmaps/

于 2009-02-20T07:58:06.363 回答
2

现在苹果已经发布了 OS 3.0 的 MapKit API,我想你的问题已经得到解答。在查看了 API 文档后,我可以看到巨大的潜力!我仍然希望看到谷歌的反向地理编码网络服务,但雅虎会同时做。

于 2009-03-18T07:13:14.860 回答
1

供您参考:Google 为 XML 请求提供的反向地理编码 API 不公开,因此使用它是非法的。唯一合法的方法是通过他们的 JavaScript-API,正如您发现在 Cocoa 中比简单地发送 HTTP 请求更难做到。

替代方案: GeonamesYahoo也可以使用简单的 XML/JSON 请求进行反向地理编码。

于 2009-02-20T08:23:18.487 回答
1

从 iOS5 开始,我们有以下选项,如开发文档中所述: *“地理编码器对象使用网络服务在纬度和经度值和用户友好的地标之间进行转换,地标是街道、城市等数据的集合,州和国家信息。反向地理编码是将纬度和经度转换为地标的过程。正向地理编码是将地名信息转换为纬度和经度值的过程。反向地理编码在所有版本的 iOS 中都支持,但正向地理编码仅在 iOS 5.0 及更高版本中受支持。"*

您现在可以使用 CLGeocoder 对象。

于 2011-11-23T09:03:44.993 回答
0

也试着看看谷歌地图组件

于 2009-02-16T09:09:26.743 回答
0

实际上,我并不是说反向地理编码是“将一个点转换为人类可读的地址”,而是使用谷歌地图可视化一个点(根据准确度,它还可以显示一个人类可读的地址)。这是所需的基本功能。

在实践中,我只是想建议将静态地图 API 作为一种干净且快速的方式来:

1) 给定从 iPhone GPS 传感器获得的坐标,检索显示该点的谷歌地图

2)给定地址,将其转换为相应的地理坐标,然后使用坐标检索显示给定地址的谷歌地图

两者都可以使用涉及静态地图和地理服务的简单 NSURL

http://maps.google.com/staticmaphttp://maps.google.com/maps/geo

当然传递所需的参数以提供合适的查询字符串。

亲切的问候

于 2009-02-20T10:59:31.827 回答
0

当然,最大的问题是 google 和 yahoo 的许可协议都规定您不能在“商业应用程序”中使用这些 API。不愿意在应用商店上发布一个应用,结果却被雅虎或谷歌撤下并起诉。在阅读 iPhone 3.0 地图 api 和相关许可证时,没有提到这一点,但如果您希望应用程序在未升级的手机上运行......

有没有一个不会惹麻烦的答案?

于 2009-03-31T22:20:09.807 回答
0

http://blog.cloudmade.com/2009/06/12/how-to-get-forward-geocoding-in-iphone-mapkit/

CloudMade 似乎是一个开源地图/位置提供商——上面的博客文章列出了有关如何进行地理编码的详细信息。

于 2009-06-22T23:42:18.210 回答