スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

オフライン地図アプリを作る

Osmdroidでoffline Mapを作っている人がいた。
https://github.com/HondaDai/OfflineMap-based-on-Osmdroid

このofflinemap-android.jarを用いたサンプルソースは、
・osmdroid-android 3.0.5
・slf4j-android 1.5.8
というバージョンで動作するとある。

なお、あらかじめ地図データを加工してSDカードに保存する必要がある。
Mobile_Atlas_Creator_1.8_SQLiteというツールを使う。
Google MapsとOpen Street Maps などに対応しているらしい。

でも地図表示だけでなくマーカー表示も行いたい。
osmdroidでマーカーを使うには、OSMBonusPackというライブラリを使う必要があるらしく、使えるバージョンは、4.1以降と記述があった。以下の関係になっているようである。
OSMBonusPack jars from v5.1 are based on osmdroid v4.3
OSMBonusPack jars from v4.5 to v5.0 are based on osmdroid v4.2
OSMBonusPack jars from v4.2.6 to v4.4 are based on osmdroid v4.1

このため、ググって、以下のファイルをダウンロードした
osmdroid-android-4.1.jar
http://grepcode.com/snapshot/repo1.maven.org/maven2/org.osmdroid/osmdroid-android/4.1

slf4j-android-1.6.1-RC1.jar
http://www.slf4j.org/android/

osmbonuspack_v4.4.jar
https://github.com/MKergall/osmbonuspack/releases

これらをEclipseの「外部Jarの追加」でjarファイルを入れ替える(osmbonuspack_v4.4.jarは新規追加)

更に、解説にある通りにリソースも追加する(OSMBonusPack サンプルソースにファイルがある)

[res/layout]
・bonuspack_bubble.xml

[res/drawable-mpi]
・bonuspack_bubble.9.png
・moreinfo_arrow.png
・moreinfo_arrow_pressed.png
・btn_moreinfo.xml

osmbonuspackのマーカーのコードは以下のURLを参考にした。
https://code.google.com/p/osmbonuspack/wiki/Tutorial_0
http://osmbonuspack.googlecode.com/svn/trunk/OSMBonusPackTuto/src/com/example/osmbonuspacktuto/MainActivity.java

出来上がったソース
package idv.hondadai.offlinemapdemo;

import idv.hondadai.offlinemap.views.OfflineMapView;

import org.osmdroid.bonuspack.overlays.Marker; // マーカー

import org.osmdroid.api.IMapController;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;

import android.app.Activity;
import android.os.Bundle;
import android.widget.RelativeLayout;


public class OfflineMapDemoActivity extends Activity {
	// layout
	private RelativeLayout mapLayout;

	// MapView
	private MapView mapView;
	private IMapController mapController; // 4.1からMapControllerからIMapControllerへ

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		// init Layout
		setContentView(R.layout.main);
		this.mapLayout = (RelativeLayout) findViewById(R.id.mapLayout);

		// init Offline Map
		this.mapView = new OfflineMapView(this, "GoogleMapCH.sqlitedb");
		this.mapController = mapView.getController();

		// set Zoom Countrol
		this.mapView.setBuiltInZoomControls(true);

		// set Touch Control
		this.mapView.setMultiTouchControls(true);

		// zoom to 17
		this.mapController.setZoom(17);

		//add mapview
		this.mapLayout.addView(this.mapView, new RelativeLayout.LayoutParams(
				android.view.ViewGroup.LayoutParams.FILL_PARENT,
				android.view.ViewGroup.LayoutParams.FILL_PARENT));

		// 三田駅,35.64791434,139.74887785
		GeoPoint geoPoint = new GeoPoint((int)(35.64791434 * 1E6), (int)(139.74887785 * 1E6));
		this.mapController.setCenter(geoPoint);
		

		//0. Using the Marker overlay
		Marker startMarker = new Marker(this.mapView);
		startMarker.setPosition(geoPoint);
		startMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
		startMarker.setTitle("Start point");
		startMarker.setDraggable(true);
		this.mapView.getOverlays().add(startMarker);		
		
	}
}
出来上がったアプリ画面
device-2015-10-02-191308.png
スポンサーサイト

コメントの投稿

非公開コメント

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。