0

编写一个 iPhone 应用程序,我需要使用 Google Maps api 来获取方向和路线。不幸的是,谷歌地图是围绕 javascript 工作的。

知道怎么做吗?

4

3 回答 3

4

在执行此操作之前,您应该知道在付费应用程序中使用地图数据是违反 Google 的条款和条件的。

来自http://code.google.com/apis/maps/terms.html

9.1 对您的 Maps API 实施的免费、公开可访问性。您的 Maps API 实施必须通常可供用户免费访问。如果您不要求用户付费,您可能会要求用户登录您的 Maps API 实施。除非您已与 Google 签订单独的书面协议或获得 Google 的书面许可,否则您的 Maps API 实施不得:

(a) 需要收费订阅或其他收费的受限访问;(b) 仅在防火墙后或仅在内部网络上运行(开发和测试阶段除外)。

10.8 使用静态地图 API,而不是在网络浏览器中的实现;

我也包括了第 10.8 节。这是一个有争议的问题,因为您可能会争辩说 UIWebView 是一个浏览器,但仍然要注意它。

如果您决定继续使用它,那么以下是一个非常好的实现,可以连接您需要的大部分代码,http://code.google.com/p/iphone-google-maps-component/

于 2009-06-07T19:41:52.180 回答
1

由于您需要遵守 OS 3.0 API 才能在应用商店中启动您的应用,您不妨开始使用 MapKit API 方法在您的应用中嵌入 Google 地图,而无需使用 WebView。上面的解决方案是 Google 地图过去是如何“嵌入”到您的应用程序中的,但现在您可以在 OS 3.0 中使用 MapKit。

于 2009-06-07T19:36:15.373 回答
1

您可以使用 UIWebView 来实现这一点。在使用 JavaScript 通过其 Google Maps API 访问 Google Maps 服务时,您只需利用 UIWebView 方法:

- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script

请注意,您需要在代表脚本的字符串中转义,所有出现的双引号都需要根据需要进行转义。

例如,以下将地图居中所需的方法取自 Maher Ali 的 iPhone SDK 编程第 12 章:

-(void) centerMap:(NSUInteger) index{
    CLLocation *loc = [locations objectAtIndex:index];
    NSString *js = 
    [NSString stringWithFormat:
     @"var map = new GMap2(document.getElementById(\"map_canvas\"));"
     "map.setMapType(G_HYBRID_MAP);"
     "map.setCenter(new GLatLng(%lf, %lf), 18);"
     "map.panTo(map.getCenter());"  
     "map.openInfoWindow(map.getCenter(),"
     "document.createTextNode(\"Loc: (%i/%i), Time: %@\"));", 
     [loc coordinate].latitude, [loc coordinate].longitude,
     index+1, [locations count], 
     [loc timestamp]];
    [webView stringByEvaluatingJavaScriptFromString:js];
}

另外,请记住 Apple 文档中的以下内容:

每个顶级入口点的 JavaScript 执行时间限制为 10 秒。如果您的脚本执行超过 10 秒,Safari 将停止执行该脚本。这很可能发生在代码中的随机位置,因此可能会导致意想不到的后果。施加此限制是因为 JavaScript 执行可能会导致主线程阻塞,因此当脚本运行时,用户无法与网页交互。

JavaScript 分配也限制为 10 MB。如果超过 JavaScript 的总内存分配限制,Safari 会引发异常。

于 2009-06-02T14:15:32.683 回答