将Google Maps API集成到iPhone应用中

时间:2009-02-16 00:08:50

标签: iphone cocoa-touch google-maps

更新: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中,所以我可以绕过它)

10 个答案:

答案 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,则会丢失您有权访问的完整控件。

在这里查看他们的参考指南:

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

答案 3 :(得分:2)

既然苹果已经发布了适用于OS 3.0的MapKit API,我认为您的问题已得到解答。看过API文档后,我可以看到很多潜力!我仍然希望看到来自谷歌的反向地理编码网络服务,但雅虎将在此期间做。

答案 4 :(得分:1)

有关您的信息:Google针对XML请求提供的反向地理编码API不公开,因此使用它是非法的。唯一合法的方法是通过他们的JavaScript-API,正如你所发现的那样,在Cocoa中比在简单地发送HTTP请求更难。

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

答案 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/staticmaphttp://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似乎是一个开源地图/位置提供商 - 上面的博客文章列出了有关如何推进地理编码的详细信息。