質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

2515閲覧

osmdroidによる、GPSから現在地を取得して表示する方法が分からない。

SZR0601

総合スコア22

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2021/08/30 14:19

編集2021/08/30 14:30

#やりたいこと
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

上記の内容で出力される内容は以下となります。
イメージ説明
ランドマークタワーを指し示すピンが小さいですが、ピン(真ん中の赤丸)とコンパスは表示されています。

自分のイメージでは、右下の赤丸付近に現在地を示す人型のマークが表示されるはずなのですが、それが見当たりません。

エミュレータ上の現在地は以下の様に設定しております。
イメージ説明

どなたか、現在地を表示する方法をご教示いただければと存じます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

#解決方法
パーミッションの許可が出来ていないだけでした。

以下パーミッションの許可方法を記します

  1. 設定を開く

イメージ説明

  1. locationを選択

イメージ説明

  1. App permissionを選択

イメージ説明

  1. 自分が作成したクラス名のアプリがあるので、それを選択

※画像では既に許可されている状態になっています。
イメージ説明

  1. Allow only while using the appにチェックを入れる

イメージ説明

以上でパーミッションが付与され、設定した現在地が表示されるようになりました。
イメージ説明

投稿2021/09/04 06:26

SZR0601

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問