LoginSignup
14
18

More than 5 years have passed since last update.

osmdroid を使って OpenStreetMap の地図を Android に表示する

Last updated at Posted at 2019-02-03

Open Street Map(OSM)

自由な地図をみんなで作るプロジェクトです。
「地図のWikipedia」とも言われる。
GoogleMap との違いは、宗教論争になるので、割愛。

 osmdroid

OpenStreetMap を Android に表示するためのライブラリ。

Google Play にデモアプリが公開されている。

簡単なアプリを作る

Android Studio で、空のプロジェクトを作る

osmdroid ライブラリを取り込む。

build.gradle

allprojects {
    repositories {
        jcenter()
      mavenCentral() // 追加する
    }

app/build.gradle

dependencies {

    compile 'org.osmdroid:osmdroid-android:6.0.3' // 追加する

AndroidManifestに permission を追加する

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"  />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

activity_main.xml に MapView を追加する

      <org.osmdroid.views.MapView android:id="@+id/mapView"
                android:layout_width="fill_parent" 
                android:layout_height="fill_parent" />

MainAvtivity

public class MainActivity extends Activity {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

       // 注意 setContentView より前に置く
       Configuration.getInstance().load(getApplicationContext(),               PreferenceManager.getDefaultSharedPreferences(getApplicationContext()));

         setContentView(R.layout.activity_main);

以上で地図を表示するが、ズームの初期値が0なので、
小さな世界地図が表示される。
zoom0.png

中心の緯度経度とズームを設定する。

    mMapView = (MapView) findViewById(R.id.mapView);

       IMapController mapController =  mMapView.getController();
         mapController.setZoom( ズームレベル );
          GeoPoint centerPoint = new GeoPoint( 緯度, 経度 );
          mapController.setCenter(centerPoint);

タッチでズームできるようにする

     mMapView.setBuiltInZoomControls(true);
     mMapView.setMultiTouchControls(true);

以上で地図を表示する
map.png

onResume と onPause の処理を追加

なくとも動くようだが、流儀のようなので。

    public void onResume(){
        super.onResume();
        if (mMapView!=null) {
            mMapView.onResume();
        }
    }

    public void onPause(){
        super.onPause();
        if (mMapView!=null) {
            mMapView.onPause();
        }
    }

サンプルコードを github に公開した。

osmdroid を使った感想

  • GoogleMap API と似た API であり、違和感なく使えた。

  • GoogleMap API と異なり、API Key が不要なので、
    気軽に試せて、嬉しい。

  • 新しいライブラリなので、解説記事が少ないのが、難点。

関連記事

14
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
18