6

Ok。これは比較的簡単だと思うかもしれませんが、違います。

データは自由に使用、編集、更新できるため、ウェブサイトでオープンストリートマップを使用しています。私のプロジェクトはこのマントラに従っており、Google APIの使用制限/データの保存制限と並んで、Googleマップは私には適していませんでした。少なくともウェブ上では。

これを考えると、私は自分のAndroidアプリに追随すると思ったので、オープンストリートマップデータを利用してosmdroidをセットアップしました。

私は自分のアクティビティで素敵なマップを作成できます。チュートリアルも実行しましたが、少なくともタブホスト/ビューページャー内のフラグメントにマップビューを表示できるように機能しているようです。しかし、私が本当に欲しいのは(タブレットの場合)、左側のフラグメント内の施設のリストと、これらの施設がどこにあるかを示す右側のマップフラグメントです。

十分に単純だと思いましたが、複雑なコードと非推奨のメソッドを使用しない限り、これは不可能であることが何時間にもわたって調査されています。

つまり、フラグメント(マップビューを含む)はタブホストで完全にロードおよび実行されます。アクティビティなどからフラグメント内のメソッドにアクセスできますが、2つのフラグメントを単に並べるだけでは何もできません。

さて、グーグルがAPI v2をリリースしたばかりだと知っています。インストールして遊んでみました。osmdroidの動作がよくわからないので、更新できると思ったので、SherlockFragmentの代わりにMapFragmentを使用しました(ABSを使用しています)。 。これは、APIキーなどを要求するlogcatエラーをスローしました。グーグルマップデータを使用したくないので、私は間違っていたと思いました。

だから..市場で入手可能なものを使用してリストフラグメントとマップフラグメントを並べて取得する方法について誰かにアドバイスできますが、使用制限がないようにオープンソースマップデータを利用することが望ましいです。

「何が利用可能で、どのように機能するか」の全体的な概要は、多くのユーザーに非常に高く評価されると確信しています。

4

2 に答える 2

11

新しいGoogleMapsAPIがリリースされる前に、私は自分の目的のためにOSMDroidを使用することを余儀なくされました。しかし、ソースが何であるか(多くの場合間違っている)を理解するためにソースを数回掘り下げなければならなかった後、私は新しいライブラリを求めていました。

幸いなことに、新しいGoogleMapsAPIはその法案に適合しています。アプリケーションでGoogleMapsAPI 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 MapsAPIv2アドオンライブラリにあります

また、MapFragmentを使用する代わりにABSを使用していることに基づいていると思われる、Fragmentより前のAndroidバージョンをターゲットにしている場合は、必ずSupportMapFragmentを使用してください。

于 2012-12-16T00:25:18.530 に答える
3

Google Maps Android API v2で提供されるサンプルコードには、com.example.mapdemo.TileOverlayDemoActivityクラスが含まれています。このクラスを少し更新すると、新しいv2フレームワーク内のOpenStreetMapタイルが表示されます。涼しい!osmdroidやsherlock-fragmentsを使用する必要はもうありません。ただし...タイルはキャッシュされません:(

とにかく、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));
}
于 2012-12-28T21:37:40.910 に答える