Javascript 将谷歌地图数据输入iPhone
在编写iPhone应用程序时,我需要使用谷歌地图api获取方向和路线。不幸的是,谷歌地图是围绕javascript工作的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 请注意,需要在表示脚本的字符串中转义所有出现的双引
你知道怎么做吗?你可以使用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是一个浏览器,但仍然要注意它 如果您决定继续使用它,那么下面是一个非常好的实现,它将连接您需要的大部分代码