Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将谷歌地图数据输入iPhone_Javascript_Iphone_Google Maps_Maps - Fatal编程技术网

Javascript 将谷歌地图数据输入iPhone

Javascript 将谷歌地图数据输入iPhone,javascript,iphone,google-maps,maps,Javascript,Iphone,Google Maps,Maps,在编写iPhone应用程序时,我需要使用谷歌地图api获取方向和路线。不幸的是,谷歌地图是围绕javascript工作的 你知道怎么做吗?你可以使用UIWebView来实现。当使用JavaScript通过Google Maps API访问Google Maps服务时,您只需利用UIWebView方法: - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script 请注意,需要在表示脚本的字符串中转义所有出现的双引

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


你知道怎么做吗?

你可以使用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];
}
此外,请记住苹果文档中的以下内容:

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

JavaScript分配也被限制在10MB以内。如果JavaScript的总内存分配超过此限制,Safari将引发异常


您可以通过使用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];
}
此外,请记住苹果文档中的以下内容:

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

JavaScript分配也被限制在10MB以内。如果JavaScript的总内存分配超过此限制,Safari将引发异常


由于您需要遵守OS 3.0 API才能在appstore上启动应用程序,因此您最好开始使用MapKit API方法在应用程序中嵌入Google地图,而不使用WebView。上面的解决方案是Google maps过去是如何“嵌入”到你的应用程序中的,但现在你可以将MapKit与OS 3.0一起使用。

既然你需要遵守OS 3.0 API才能在appstore上启动你的应用程序,你不妨开始使用MapKit API方法在你的应用程序中嵌入Google Map,而不必使用WebView。上面的解决方案是谷歌地图过去是如何“嵌入”到你的应用程序中的,但现在你可以在OS 3.0中使用MapKit。

在这样做之前,你应该知道在付费应用程序中使用地图数据违反谷歌的条款和条件

9.1地图API实现的免费公共可访问性。你的地图API 执行必须是一般性的 用户无需付费即可访问。 您可能需要用户登录到 如果您这样做,您的Maps API实现 不要求用户付费。除非 您已进入一个单独的 与谷歌或 获得谷歌的书面许可, 您的Maps API实现不得:

(a) 需要付费订阅 或其他基于费用的受限访问; 或(b)仅在防火墙后操作 或仅在内部网络上(除 在开发和测试期间 阶段)

10.8使用静态映射API,而不是在web实现中使用 浏览器

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


如果您决定继续使用它,下面是一个非常好的实现,它将连接您需要的大部分代码,

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

9.1地图API实现的免费公共可访问性。你的地图API 执行必须是一般性的 用户无需付费即可访问。 您可能需要用户登录到 如果您这样做,您的Maps API实现 不要求用户付费。除非 您已进入一个单独的 与谷歌或 获得谷歌的书面许可, 您的Maps API实现不得:

(a) 需要付费订阅 或其他基于费用的受限访问; 或(b)仅在防火墙后操作 或仅在内部网络上(除 在开发和测试期间 阶段)

10.8使用静态映射API,而不是在web实现中使用 浏览器

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

如果您决定继续使用它,那么下面是一个非常好的实现,它将连接您需要的大部分代码