iPhoneアプリをプログラミングするには、GoogleMapsAPIを使用して道順とルートを取得する必要があります。残念ながら、Googleマップはjavascriptを回避します。
これを行う方法はありますか?
iPhoneアプリをプログラミングするには、GoogleMapsAPIを使用して道順とルートを取得する必要があります。残念ながら、Googleマップはjavascriptを回避します。
これを行う方法はありますか?
これを行う前に、有料アプリケーションでマップデータを使用することはGoogleの利用規約に違反していることに注意する必要があります。
http://code.google.com/apis/maps/terms.htmlから
9.1MapsAPI実装への無料のパブリックアクセシビリティ。Maps APIの実装は、通常、ユーザーが無料でアクセスできる必要があります。ユーザーに料金の支払いを要求しない場合は、ユーザーにMapsAPI実装へのログインを要求することがあります。Googleと別途書面による契約を締結するか、Googleの書面による許可を取得していない限り、MapsAPIの実装は次のことを行ってはなりません。
(a)有料のサブスクリプションまたはその他の有料の制限付きアクセスが必要です。または(b)ファイアウォールの背後でのみ、または内部ネットワーク上でのみ動作します(開発およびテスト段階を除く)。
10.8Webブラウザでの実装以外でStaticMapsAPIを使用します。
セクション10.8も含めました。UIWebViewはブラウザであると主張できるかもしれませんが、それでもそれを認識しているので、これは議論の余地のあるものです。
先に進んでそれを使用することにした場合、以下は必要なコードのほとんどを橋渡しする本当に良い実装です、http://code.google.com/p/iphone-google-maps-component/
UIWebViewを使用してこれを実装できます。JavaScriptを使用してGoogleMapsAPIを介してGoogleMapsサービスにアクセスする場合は、UIWebViewメソッドを利用するだけです。
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script
スクリプトを表す文字列でエスケープする必要があることに注意してください。必要に応じて、二重引用符がすべて出現します。
例として、マップを中央に配置するために必要な次の方法は、MaherAliによるiPhoneSDKプログラミングの第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の実行によりメインスレッドがブロックされる可能性があるために課せられます。そのため、スクリプトの実行中、ユーザーはWebページを操作できません。
JavaScriptの割り当ても10MBに制限されています。JavaScriptの合計メモリ割り当てでこの制限を超えると、Safariで例外が発生します。
アプリストアでアプリを起動するにはOS3.0APIに準拠する必要があるため、MapKit APIメソッドを使用して、WebViewを使用せずにアプリケーション内にGoogleマップを埋め込むこともできます。上記の解決策は、Googleマップがアプリ内に「埋め込まれている」方法ですが、OS3.0でMapKitを使用できるようになりました。