0

おい。OpenSourceMap を表示するための OSMdroid ライブラリの設定に問題があります。ユーザーが現在の場所の地図をボタンで表示して、ユーザーが通常の Google マップ ビュー、地形 Google マップ ビュー、openstreetmaps ビューを切り替えることができるようにするアクティビティに取り組んでいます。現在、JAR ファイルを使用しており、それをプロジェクトのビルド パスに追加しています。うまくコンパイルできますが、ライブラリの使い方がわかりません。オンラインのチュートリアル/指示はほとんどありません。レイアウトで IMapView タグを作成し、Google マップ ビューのように使用する必要がありますか? 通常の Google マップ ビューからレイアウト タイルを切り替えるにはどうすればよいですか?

誰かがこのライブラリがどのように機能するかについて非常に短いウォークスルーを教えてくれれば、それは大歓迎です。私は何年も Java でコーディングしてきたので、何をする必要があるかについての英語の説明が必要です。

前もって感謝します。

4

1 に答える 1

1

プロジェクトで osmdroid を動作させることができましたが、Mapview を Google から OSM に切り替えてから Google に戻ろうとすると、別のアクティビティで Google と OSM ビューを使用する必要があり、次のようなランタイム エラーが発生しました。 「アクティビティごとに許可されるマップビューは 1 つだけです」。これにより、多くの重複コードが発生しますが、正常に実行されます。

最新の osmdroid-android-3.0.3.jar を使用すると、オーバーレイの描画がはるかに簡単になります。slf4j-android-1.5.8.jar も含める必要があります。ここで価値があるのは、最初に使用された、打ちのめされたデモのコードです。ロケーション リスナーがあり、非常に単純なオーバーレイ (画面全体に線) を描画します。Google マップに慣れている場合は、目的に合わせて調整できるはずです。

package osmdemo.demo;

import java.util.List;

import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapController;
import org.osmdroid.views.MapView;
import org.osmdroid.views.MapView.Projection;
import org.osmdroid.views.overlay.Overlay;
import org.osmdroid.views.util.constants.MapViewConstants;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Paint.Style;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;

public class DemoMap extends Activity implements LocationListener,
        MapViewConstants {

    private MapView mapView;
    private MapController mapController;
    private MapOverlay mmapOverlay = null;
    private LocationManager mLocMgr;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.copymain);

        mapView = (MapView) this.findViewById(R.id.mapview);
        mapView.setTileSource(TileSourceFactory.MAPNIK);
        mapView.setBuiltInZoomControls(true);
        mapView.setMultiTouchControls(true);

        mapController = this.mapView.getController();
        mapController.setZoom(15);
        GeoPoint point2 = new GeoPoint(53554070, -2959520);
        mapController.setCenter(point2);
        mLocMgr = (LocationManager) getSystemService(LOCATION_SERVICE);
        mLocMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 100,
                this);
        this.mmapOverlay = new MapOverlay(this);
        List<Overlay> listOfOverlays = mapView.getOverlays();
        listOfOverlays.add(mmapOverlay);
        mapView.invalidate();
    }

    public void onLocationChanged(Location location) {

        int lat = (int) (location.getLatitude() * 1E6);
        int lng = (int) (location.getLongitude() * 1E6);
        GeoPoint gpt = new GeoPoint(lat, lng);
        mapController.setCenter(gpt);
        mapView.invalidate();
    }

    public class MapOverlay extends org.osmdroid.views.overlay.Overlay {

        public MapOverlay(Context ctx) {
            super(ctx);
            // TODO Auto-generated constructor stub
        }

        @Override
        protected void draw(Canvas pC, MapView pOsmv, boolean shadow) {
            if (shadow)
                return;

            Paint lp3;
            lp3 = new Paint();
            lp3.setColor(Color.RED);
            lp3.setAntiAlias(true);
            lp3.setStyle(Style.STROKE);
            lp3.setStrokeWidth(1);
            lp3.setTextAlign(Paint.Align.LEFT);
            lp3.setTextSize(12);
            final Rect viewportRect = new Rect();
            final Projection projection = pOsmv.getProjection();
            viewportRect.set(projection.getScreenRect());
            // Draw a line from one corner to the other
            pC.drawLine(viewportRect.left, viewportRect.top,
                    viewportRect.right, viewportRect.bottom, lp3);
        }

    }

    @Override
    public void onProviderDisabled(String arg0) {}

    @Override
    public void onProviderEnabled(String provider) {}

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {}

}

そして、xml (copymain.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <org.osmdroid.views.MapView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:id="@+id/mapview"
        ></org.osmdroid.views.MapView>
</LinearLayout>
于 2011-06-05T07:46:08.980 に答える