【问题标题】:Get Google Maps data into an iPhone将 Google 地图数据导入 iPhone
【发布时间】:2009-06-02 10:44:53
【问题描述】:

编写一个 iPhone 应用程序,我需要使用 Google Maps api 来获取方向和路线。不幸的是,Google Maps 使用 javascript。

知道怎么做吗?

【问题讨论】:

    标签: javascript iphone google-maps maps


    【解决方案1】:

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

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

    9.1 对您的 Maps API 实施的免费、公开可访问性。您的地图 API 实施必须普遍 用户可以免费访问。 您可能要求用户登录 如果您这样做,您的 Maps API 实现 不需要用户付费。除非 你已经进入了一个单独的 与谷歌的书面协议或 获得谷歌的书面许可, 您的 Maps API 实施不得:

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

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

    我也包含了第 10.8 节。这是一个值得商榷的问题,因为您可能会争辩说 UIWebView 是一个浏览器,但仍然要意识到这一点。

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

    【讨论】:

      【解决方案2】:

      您可以使用 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 会引发异常。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-28
          • 2018-04-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-28
          • 2018-08-10
          • 2011-02-09
          相关资源
          最近更新 更多