5

あなたはこれが比較的シンプルだと思うだろうが、そうではない。osmdroid、Maps API v2、およびフラグメント

データは自由に使用、編集、更新できますので、私のウェブサイトでOpen street mapsを使用しています。私のプロジェクトはこのマントラに続き、GoogleのAPIの使用制限/データ制限の保存とともに、少なくとも私はウェブ上で。

私は自分のアンドロイドアプリに従うと思っていたので、オープンストリートマップデータを利用してosmdroidをセットアップしました。

私は自分のアクティビティで素敵なマップを持つことができます。私はチュートリアルに続き、少なくともタブホスト/ビューページ内のフラグメントにマップビューを持つことができるように思えました。しかし、私が本当に望むのは(錠剤の場合)、左の断片の施設のリストと、これらの施設がどこにあるのかを示す右の地図断片です。

私は考えを持っているだろうが、研究の時間と時間があなたには、いくつかの複雑なコードといくつかの非推奨メソッドを使用しない限り、これが不可能であることを示唆している十分なシンプル

..

..だから断片(マップビューを含む)をロードtabhost内で完璧に動作します。私は自分のアクティビティなどからフラグメント内のメソッドにアクセスできますが、ただ単に2つのフラグメントを並べるだけでは何もありません。

私はgoogleがちょうど彼らのAPI v2で出てきたことを知っています。私はそれをインストールして遊んでいました。osmdroidの仕組みを本当に知っていないので、私は私が更新できると思ったので、SherlockFragment ABSを使用する)..これはちょうどAPIキーなどを求めてlogcatエラーを投げた。私はGoogleマップデータを使いたくないと思ったが、私は間違っていたと思った。

だから、市場で入手可能なものを使って、どのようにリスト断片と地図断片を手に入れることができるだろうが、好ましくはオープンソースの地図データを利用して、利用制限がないように助言できるだろうか。

"利用可能なものとその仕組み"の全体像が大勢のユーザーから高く評価されていると思います。だれかがアドバイスできれば素晴らしいと思います!

+0

あなたが自分のデータを使用する予定がない場合は、APIキーを取得しても害はありませんを確認します。このオーバーフローからhttp://stackoverflow.com/questions/13695393/open-street-maps-with-android-google-maps-api-v2 – qubz

+0

それは行く方法のようですが、私はもっと深い説明を探していますどのようにして、私はオープンソースのタイルをもっとも簡単な形でマップを実装するのですか?その質問でも指摘されているように - APIの使用制限が適用されます。ベース。乾杯。 –

+0

この新しいAPIの初期段階では、osm/osmdroidの統合に関するガイド/サンプル/チュートリアルはほとんどありません。これはおそらく時間が進むにつれて変わるでしょう。 – qubz

答えて

11

新しいGoogle Maps APIが出る前に、私は自分の目的にOSMDroidを使用することを余儀なくされました。しかし、なぜそれが何であったのか(なぜか間違っているのか)を理解するために、何度かソースを掘り起こした後、私は新しいライブラリで死ぬだろう。

幸いにも、新しいGoogle Maps APIがこの請求書に適合します。アプリケーションでGoogle Maps API v2を使用でき、Googleのベースマップを使用する必要はありませんが、残念ながらAPIキーを先に取得する必要があります。

オンライン地図ソースとしてOpenStreetMapを使用したいと思っていますので、以下のコードはそれに合わせて調整されています。

GoogleMap map = <get-map-instance>; 

map.setMapType(GoogleMap.MAP_TYPE_NONE); 

TileOverlayOptions options = new TileOverlayOptions(); 

options.tileProvider(new UrlTileProvider(256, 256) { 
    @Override 
    public URL getTileUrl(int x, int y, int z) { 
     try { 
      String f = "http://tile.openstreetmap.org/%d/%d/%d.png"; 
      return new URL(String.format(f, z, x, y)); 
     } 
     catch (MalformedURLException e) { 
      return null; 
     } 
    } 
}); 

map.addTileOverlay(options); 

あなたは私のGoogle MapsのAPI v2のアドオンライブラリhereでこのコードの多くの正式版を見つけることができます。

また、MapFragmentを使用するのではなく、ABSを使用していると思われるPre-Fragment Androidバージョンをターゲットにしている場合は、SupportMapFragmentを必ず使用してください。

+0

だから私は4時間かけて遊んだのですが、これはうまくいかなければなりません。addTileProviderはaddTileOverlayでなければなりません。 osmdroidの決定/ また、OSMオーバーレイがありますが、Googleロゴはまだ表示されています。私はOSMへの帰属に関して何が必要かを知っていますか、私はまだ「google maps」を使っています。さらに、私はまだ彼らの使用上限に縛られていると思いますか? OSMの主な利点の1つを打ち消す にかかわらず、非常に感謝しています - ありがとうございます! –

+1

私の意見では、Googleロゴはバグで、http://code.google.com/p/gmaps-api-issues/issues/detail?id=4648に問題を提出しました。 なぜOSMDroidでないのかという点では、基本的にはパフォーマンス、バグ、ドキュメントの欠如にまで煮詰まっていました。なぜ自分自身を知りたいのであれば、ソースを掘り下げて、どれくらいの数のノーオプが見つかるかを// TODOコメントで確認します。 ;) – cocoahero

+1

OSMdroidに関する問題も扱っており、この使用法を検討中です。あなたは時間があったので、これはどのように機能していますか? – Patrick

3

Google Maps Android API v2で配信されるSample Codeには、クラスcom.example.mapdemo.TileOverlayDemoActivityが含まれています。このクラスを少し更新すると、新しいv2フレームワーク内にOpenStreetMapタイルが表示されます。クール! osmdroidやsherlock-fragmentを使用する必要はありません。しかしながら...タイルはキャッシュされません:(

をとにかく、TileOverlayDemoActivityクラスへのすべての追加/更新が以下の通りである:

private static final String OPEN_STREET_MAP_URL_FORMAT = 
     "http://tile.openstreetmap.org/%d/%d/%d.png"; 

private void setUpMap() { 
    mMap.setMapType(GoogleMap.MAP_TYPE_NONE); 
    mMap.setMyLocationEnabled(true); 

    TileProvider tileProvider = new UrlTileProvider(256, 256) { 
     @Override 
     public synchronized URL getTileUrl(int x, int y, int zoom) { 
      String s = String.format(Locale.US, OPEN_STREET_MAP_URL_FORMAT, zoom, x, y); 
      URL url = null; 
      try { 
       url = new URL(s); 
      } catch (MalformedURLException e) { 
       throw new AssertionError(e); 
      } 
      return url; 
     } 
    }; 

    mMap.addTileOverlay(new TileOverlayOptions().tileProvider(tileProvider)); 
} 
関連する問題