サーバー構築不要!スマートフォンアプリ向けの新クラウド

トップ >ドキュメント >位置情報検索(Kotlin):基本的な使い方

位置情報検索(Kotlin)

基本的な使い方

概要

このページでは、位置情報データを扱う方法について解説します。

位置情報をデータストアに保存する

位置情報をデータストアに保存する場合は、putメソッドを使ってNCMBGeoPointクラスを設定します。

    import com.nifcloud.mbaas.core.NCMBGeoPoint
    <<省略>>

     // 緯度と経度の設定
    val latitude : Double = 35.6666269
    val longitude : Double = 139.765607
    // TestClassのNCMBObjectを作成
    val obj = NCMBObject("TestClass")
    // 位置情報の設定
    val geopoint = NCMBGeoPoint(latitude, longitude)
    // オブジェクトに値を設定
    obj.put("geoPoint", geopoint)
    // データ登録の実施
    obj.saveInBackground(NCMBCallback { e, ncmbObj ->
        if (e != null) {
            //保存に失敗した場合の処理
            Log.d("error","保存に失敗しました : " + e.message)
        } else {
            //保存に成功した場合の処理
            val result = ncmbObj as NCMBObject
            Log.d("success","保存に成功しました ObjectID :" + result.getObjectId())
        }
    })

位置情報をデータストアから取得する

位置情報をデータストアから取得する場合は、getGeoメソッドを使って取得したオブジェクトをNCMBGeoPoint型に変換します。

    // クラスの設定
    val obj = NCMBObject("TestClass")
    // オブジェクトIDの設定
    obj.setObjectId("getTestObjectId")
    // データ取得の実施
    obj.fetchInBackground(NCMBCallback { e, ncmbObj ->
        if (e != null) {
            //取得に失敗した場合の処理
            Log.d("error","取得に失敗しました : " + e.message)
        } else {
            //取得に成功した場合の処理
            val result = ncmbObj as NCMBObject
            Log.d("success","取得に成功しました ObjectID :" + result.getObjectId())
            // 位置情報の取得
            val geo: NCMBGeoPoint = obj.getGeo("geoPoint")
        }
    })

位置情報の検索

位置情報の検索を行う場合は、距離か範囲を指定して検索を行います。

検索距離

検索距離を指定する場合は、検索開始地点の位置情報とそこからの検索距離を指定します。

val location = NCMBGeoPoint(10.0, 10.1)
val query = NCMBQuery.forObject("TestClass")
query.whereNearSphere("geo", location)
val objects = query.find()
if(objects is List<*>) {
            for (obj:Any? in objects) {
                if (obj is NCMBObject) {
                    println(obj.getObjectId())
                }
            }
        }

上記以外、以下のメソッドを用いて、検索距離は、キロメートル、マイル、ラジアンで指定可能です。
- whereNearSphereMiles()
- whereNearSphereRadians()
- whereNearSphereKilometers()

val location = NCMBGeoPoint(10.0, 10.1)
val query = NCMBQuery.forObject("TestClass")
//locationで指定した位置から半径12km以内の位置情報をgeoフィールドに持つデータを検索する
query.whereNearSphereKilometers("geo", location, 12.0)
query.findInBackground (NCMBCallback { e, objects ->
    if (e != null) {
        //エラー時の処理
        println( "検索に失敗しました。エラー:" + e.message)
    } else {
        //成功時の処理
        println("検索に成功しました。")
        if(objects is List<*>) {
            for (obj:Any? in objects) {
                if (obj is NCMBObject) {
                    println(obj.getObjectId())
                }
            }
        }
    }
})

検索範囲

検索範囲で指定する場合は、検索範囲となる矩形の左下(南西)と右上(北東)の位置情報を設定し、
その範囲内で保存してあるオブジェクトの検索ができます。

//southwest(左下)とnortheast(右上)で指定された
//検索範囲内の位置情報をgeoフィールドに持つオブジェクトを検索する
val southwest = NCMBGeoPoint(10.0, 20.0)
val northeast = NCMBGeoPoint(30.0, 40.0)
val query = NCMBQuery.forObject("TestClass")
query.whereWithinGeoBox("geo", southwest, northeast)
query.findInBackground (NCMBCallback { e, objects ->
    if (e != null) {
        //エラー時の処理
        println( "検索に失敗しました。エラー:" + e.message)
    } else {
        //成功時の処理
        println("検索に成功しました。")
        if(objects is List<*>) {
            for (obj:Any? in objects) {
                if (obj is NCMBObject) {
                    println(obj.getObjectId())
                    println(obj.getGeo("geo").mlatitude)
                    println(obj.getGeo("geo").mlongitude)
                }
            }
        }
    }
})

お探しの内容が見つからなかった場合はユーザーコミュニティ もご活用ください。(回答保証はいたしかねます)
なお、 Expertプラン以上のお客様はテクニカルサポートにてご質問を承らせて頂きます。

推奨画面サイズ1024×768px以上

ページの先頭へ