osmdroidを使ってAndroidでOpenStreetMapを表示してみる


こんにちは@xsotaです。

この投稿はOpenStreetMap Advent Calendar 2016 20日目の記事です。

osmdroidを使って地図を表示したくなったので、なんとなくやってみました。
そのうちもっと突っ込んだネタを書いてみようかと思います。

OSM

つかってみるよ

まずはプロジェクトをEmptyActivtyとか指定しててきとうに作ってね。

repositories {
        jcenter()
+       mavenCentral() //これを追加
    }
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'

+   compile 'org.osmdroid:osmdroid-android:5.6.2' // これを追加
}

これでosmdroidが使えるようになるよ!

AndroidManifestにいろいろpermission追加する

このへんを追加する
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

layoutにMapViewを追加するよ

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  tools:context="com.xsota.osmdroidtest.MainActivity">

  <org.osmdroid.views.MapView
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />
</RelativeLayout>

MainAvtivityとかにTileSourceとかタッチでズームできるようにする設定を書くよ

MainActivity.java
public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    org.osmdroid.tileprovider.constants.OpenStreetMapTileProviderConstants.setUserAgentValue(BuildConfig.APPLICATION_ID);

    MapView map = (MapView) findViewById(R.id.map);
    map.setTileSource(TileSourceFactory.MAPNIK);
    map.setBuiltInZoomControls(true);
    map.setMultiTouchControls(true);
  }
}

とりあえず地図を表示できるようになったよ

osmdroid

簡単にOpen Street Mapの地図を使ったアプリが作れるので、使ってみてはどうでしょうか。

「GoogleMapではアレができるのにosmdroidではできない!!!!」っていうネタがあったらチャレンジしてみたいので誰か教えて下さい。

それではさようなら。