位置情報検索(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以上