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

# Open Street Map(OSM)

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

https://openstreetmap.jp/

# 　osmdroid

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

https://github.com/osmdroid/osmdroid

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

https://play.google.com/store/apps/details?id=org.osmdroid

# 簡単なアプリを作る

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](https://qiita-image-store.s3.amazonaws.com/0/64075/1a9a0817-6b0e-32bf-a059-ea8854362f95.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](https://qiita-image-store.s3.amazonaws.com/0/64075/17a9fb43-7104-f294-b97f-738d865f867b.png)



### onResume　と　onPause　の処理を追加

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

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

    public void onPause(){
        super.onPause();
        if (mMapView!=null) {
            mMapView.onPause();
        }
    }
```
サンプルコードを github　に公開した。

https://github.com/ohwada/Android_Samples/tree/master/Osmdroid1

## osmdroid を使った感想

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

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

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

## 関連記事

- [OSM地図に マーカーを表示する](https://qiita.com/ohwada/items/a85fadbd186abac9dff7)

- [OSM地図のマーカーの画像を変更する](https://qiita.com/ohwada/items/992ba7fa22ee08716032)

- [OSM 地図に 吹き出し付きのマーカーを表示する](https://qiita.com/ohwada/items/05cd925a2994a4608c2e)

- [OSM地図に KML をインポートする]( https://qiita.com/ohwada/items/90aec2d0a96d42676a70)

- [OSM地図 の KML のスタイルを変更する](https://qiita.com/ohwada/items/066e49ccecaebcc18983)
- [OSM地図にタイルを重ねる](https://qiita.com/ohwada/items/d27545a709aef1a9dbcf)

- [OSM地図にカスタムタイルを重ねる](https://qiita.com/ohwada/items/933d0ce5bc6d82ee2a59)

- [オフライン地図を表示する](https://qiita.com/ohwada/items/4febbcb0fc23528fae29)

- [オフライン地図用のタイルを取得する](https://qiita.com/ohwada/items/93dbb157dcb2fbbd24ac)

- [地図の場所をブックマークする](https://qiita.com/ohwada/items/d648368885ccbf56cecb)

- [国土地理院の地図画像を表示する](https://qiita.com/ohwada/items/5f92f7147dde272b979d)

- [国土国交省の地図画像を表示する](https://qiita.com/ohwada/items/23756124c9f783990ba6)

- [国土国交省の Capabilitiesを解析し地図画像を表示する](https://qiita.com/ohwada/items/000b7ec33df9a4b54d99)

- [OSM から牛丼店の情報を取得し、Android に表示する](https://qiita.com/ohwada/items/493bf0c23885ef3bf240)