2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Kotlin] GoogleMaps Api , Realm アプリ#1 作成 

Last updated at Posted at 2020-05-05

Kotlin + Google Maps Api + Realm でアプリを作成してみましたので、メモしておきます。
maptracer-maint2 2.png

Google Maps APIとは?

Google社が提供している高機能で世界中の地図データを扱っているGoogleマップを
以下のようなサービスを利用できるものです。
・マップ
 カスタマイズしたマップやストリートビューの画像を取り入れて
 リアルな世界をユーザーに提示するサービス
・ルート
 広範なデータとリアルタイムの交通状況に基づき、
 特定の場所から目的地への最適なルートをユーザーに提供するサービス

動作環境

Kotlin (1.3)
Android Studio (3.4.1)
Realm for kotlin (6.0.2)
Google Maps API

※ 参考資料
Realm ドキュメント
Google Maps API

Google Maps API手順

##① Google Map プロジェクト作成 
File ->New -> Project -> Google Map Activity
##② Google Maps API を作成
・google_maps_api.xml のリンクを利用
・作成されたキー(AI***)を設定すること。
google-map-api.png
※作成されたGoogle Maps API
google-map-api-key.png

##③ 初期化

MapsActivity.kt
    private lateinit var googleMap: GoogleMap
    private lateinit var fusedLocationProviderClient : FusedLocationProviderClient
    private lateinit var locationRequest: LocationRequest
    private lateinit var locationCallback: LocationCallback
    val realm = Realm.getDefaultInstance()

##④ 許可

AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
MapsActivity.kt
fun checkMapPermission(): Boolean {
       return ( ContextCompat.checkSelfPermission( this, android.Manifest.permission.ACCESS_FINE_LOCATION ) == PackageManager.PERMISSION_GRANTED)
}

##⑤ ポシション取得方法を要求

MapsActivity.kt
locationRequest = LocationRequest().apply {
            interval = 10000                                   // 最遅の更新間隔(但し正確ではない。)
            fastestInterval = 5000                             // 最短の更新間隔
            priority = LocationRequest.PRIORITY_HIGH_ACCURACY  // 精度重視
}

##⑥ コールバック

MapsActivity.kt
locationCallback = object : LocationCallback() {
            override fun onLocationResult(locationResult: LocationResult?) {
                // 更新直後の位置が格納されているはず
                locationResult?.lastLocation?.run {
                  Log.d("mapLocation", "latitude:$latitude ,longitude: $longitude ")
                }
           }

##⑦ 地図への描画
・線の描画

MapsActivity.kt
private val polylineOptions = PolylineOptions().width(5f).color(Color.RED)
val latLng = LatLng(latitude, longitude)
polylineOptions.add(latLng)
googleMap.addPolyline(polylineOptions)

・円描画

MapsActivity.kt
googleMap.addCircle(
            CircleOptions()
                .center(location)        // 円の中心位置
                .radius(radius)          // 半径 (メートル単位)
                .strokeColor(Color.BLUE) // 線の色
                .strokeWidth(2f)         // 線の太さ
                .fillColor(0x400080ff)   // 円の塗りつぶし色
        )

Realm手順

##① Realm 追加

build.gradle(プロジェクト用)
classpath "io.realm:realm-gradle-plugin:6.0.2"
build.gradle(module用)
apply plugin: 'realm-android'

下記のエラーが出る場合、「apply plugin: 'kotlin-kapt'」を追加すること。
*エラー:Configuration with name 'kapt' not found.

##② Realm モデル

LocationModel.kt
open class LocationModel(
    @PrimaryKey var mapId : Long = 0,
    var latitude: Double = 0.0,
    var longtitude: Double = 0.0,
    var date: Long = 0,
    var title: String = ""
): RealmObject()

##③ Realm へ保存

MapsActivity.kt
realm.beginTransaction()
val model = realm.createObject<LocationModel>(getNextId())
model.latitude = latLng.latitude
model.longtitude = latLng.longitude
model.date = calendar.timeInMillis
realm.commitTransaction()

プロジェクト

GitHub

#Index
kotlin,GoogleMaps Apiアプリ#2 テスト >>

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?