#やりたいこと
osmdroidを使って現在地を取得し、地図上に表示したいです。
分からないこと
現在地を取得し、地図上に表示する方法が分かりません。
#状況
表示内容はエミュレータで確認しています。
MainActivity.java
は以下のようになっております。
java
1package com.example.osmdoroidtest; 2 3import android.app.Activity; 4import android.content.Context; 5import android.os.Bundle; 6import android.preference.PreferenceManager; 7 8import org.osmdroid.api.IMapController; 9import org.osmdroid.config.Configuration; 10import org.osmdroid.tileprovider.tilesource.TileSourceFactory; 11import org.osmdroid.util.GeoPoint; 12import org.osmdroid.views.MapView; 13import org.osmdroid.views.overlay.Marker; 14 15import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider; 16import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay; 17 18import org.osmdroid.views.overlay.compass.CompassOverlay; 19import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider; 20 21public class MainActivity extends Activity { 22 MapView map = null; 23 24 @Override 25 public void onCreate(Bundle savedInstanceState) { 26 super.onCreate(savedInstanceState); 27 28 Context ctx = getApplicationContext(); 29 Configuration.getInstance().load(ctx, PreferenceManager.getDefaultSharedPreferences(ctx)); 30 //setting this before the layout is inflated is a good idea 31 //it 'should' ensure that the map has a writable location for the map cache, even without permissions 32 //if no tiles are displayed, you can try overriding the cache path using Configuration.getInstance().setCachePath 33 //see also StorageUtils 34 //note, the load method also sets the HTTP User Agent to your application's package name, abusing osm's tile servers will get you banned based on this string 35 36 //inflate and create the map 37 setContentView(R.layout.activity_main); 38 39 map = (MapView) findViewById(R.id.map); 40 map.setTileSource(TileSourceFactory.MAPNIK); 41 map.setBuiltInZoomControls(true); 42 map.setMultiTouchControls(true); 43 IMapController mapController = map.getController(); 44 mapController.setZoom(15.0); 45 GeoPoint startPoint = new GeoPoint(35.455635670881904, 139.6322442068927); 46 mapController.setCenter(startPoint); 47 48 //ピンの設定 49 Marker startMarker = new Marker(map); 50 startMarker.setPosition(startPoint); 51 startMarker.setTitle("ランドマークタワー"); 52 startMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_CENTER); 53 map.getOverlays().add(startMarker); 54 55 //現在地 56 GpsMyLocationProvider CurrentLocation = new GpsMyLocationProvider(ctx); 57 MyLocationNewOverlay LocationOverlay = new MyLocationNewOverlay(new GpsMyLocationProvider(ctx),map); 58 CurrentLocation.startLocationProvider(LocationOverlay.getMyLocationProvider()); 59 LocationOverlay.enableMyLocation(); 60 LocationOverlay.enableFollowLocation(); 61 LocationOverlay.setDrawAccuracyEnabled(true); 62 LocationOverlay.getMyLocationProvider(); 63 map.getOverlays().add(LocationOverlay); 64 65 //コンパス 66 CompassOverlay compassOverlay = new CompassOverlay(ctx, new InternalCompassOrientationProvider(ctx), map); 67 compassOverlay.enableCompass(); 68 map.getOverlays().add(compassOverlay); 69 } 70 71 public void onResume() { 72 super.onResume(); 73 //this will refresh the osmdroid configuration on resuming. 74 //if you make changes to the configuration, use 75 //SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 76 //Configuration.getInstance().load(this, PreferenceManager.getDefaultSharedPreferences(this)); 77 map.onResume(); //needed for compass, my location overlays, v6.0.0 and up 78 } 79 80 public void onPause() { 81 super.onPause(); 82 //this will refresh the osmdroid configuration on resuming. 83 //if you make changes to the configuration, use 84 //SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 85 //Configuration.getInstance().save(this, prefs); 86 map.onPause(); //needed for compass, my location overlays, v6.0.0 and up 87 } 88
上記の内容で出力される内容は以下となります。
ランドマークタワーを指し示すピンが小さいですが、ピン(真ん中の赤丸)とコンパスは表示されています。
自分のイメージでは、右下の赤丸付近に現在地を示す人型のマークが表示されるはずなのですが、それが見当たりません。
どなたか、現在地を表示する方法をご教示いただければと存じます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。