位置情報検索(Unity)
基本的な使い方
位置情報について
NCMBGeoPointは、位置情報を扱うための構造体です。
プロパティは以下の通り緯度・経度となっております。
緯度は-90.0~90.0、経度は-180.0~180.0まで設定できます。
// Latitude: 緯度 -90.0~90.0
// Longitude: 経度 -180.0-180.0
位置情報の保存
位置情報をmobile backendで扱うには、構造体であるNCMBGetPointを利用します。
NCMBGetPointのインスタンスを作成する際、引数に緯度経度を設定することが可能です。
引数なしの場合はどちらも0がセットされます。
※端末のGPS機能などを利用した位置情報の保存については、UnitySDKでは対応しておりません。
以下の例では、新宿駅の座標を指定してNCMBGeoPointのオブジェクトを生成しています。
//新宿駅の位置情報オブジェクトを作成
double latitude = 35.690921;
double longitude = 139.700258;
NCMBGeoPoint geoPoint = new NCMBGeoPoint (latitude, longitude);
//NCMBObjectに位置情報をセットして保存
NCMBObject obj = new NCMBObject ("Places");
obj.Add ("point", geoPoint);
obj.Add ("areaName", "新宿駅");
obj.SaveAsync ((NCMBException e) => {
if (e != null) {
//失敗時の処理
} else {
//成功時の処理
}
});
位置情報の検索
位置情報の検索は、距離か範囲を指定することができます。
検索距離を半径で指定する
検索距離を指定する場合は、検索開始地点の位置情報とそこからの検索距離を指定します。
指定する場合は、キロメートル、マイル、ラジアンで指定可能です。
また、検索距離を指定せずに検索をかける事もできます。その場合は検索開始地点から近い順に、
保存されている位置情報のオブジェクトが取得されます。
以下の例では、新宿駅の位置情報を検索開始地点に指定し、距離(5キロメートル)を指定しています。
//新宿駅の位置情報オブジェクトを作成
NCMBGeoPoint geo = new NCMBGeoPoint (35.690921, 139.700258);
//新宿駅から半径5キロを検索距離に指定
NCMBQuery<NCMBObject> query = new NCMBQuery<NCMBObject> ("Places");
query.WhereGeoPointWithinKilometers ("point", geo, 5);
//オブジェクト検索を実行
query.FindAsync ((List<NCMBObject> objList ,NCMBException e) => {
if (e != null) {
//失敗したときの処理
} else {
//検索結果から位置情報を取得し、ログ出力
foreach (NCMBObject obj in objList) {
NCMBGeoPoint resultGeo = (NCMBGeoPoint)obj ["point"];
Debug.Log ("Latitude : " + resultGeo.Latitude + "Longitude : " + resultGeo.Longitude);
}
}
});
検索範囲を矩形で指定する
検索範囲で指定する場合は、検索範囲となる矩形の左下(南西)と右上(北東)の位置情報を設定し、
その範囲内で保存してあるオブジェクトの検索を行います。
以下の例では、南西に新宿、北東に池袋を指定し、その範囲内の検索を行っています。
NCMBGeoPoint southwest = new NCMBGeoPoint (35.690921, 139.700258); //新宿駅
NCMBGeoPoint northeast = new NCMBGeoPoint (35.728926, 139.71038); //池袋駅
//範囲内オブジェクト全検索
NCMBQuery<NCMBObject> query = new NCMBQuery<NCMBObject> ("Places");
query.WhereWithinGeoBox ("point", southwest, northeast);
//結果のエラー有無とエリア名リスト
query.FindAsync ((List<NCMBObject> objList ,NCMBException e) => {
if (e != null) {
//検索失敗時の処理
} else {
//検索結果から位置情報を取得し、ログ出力
foreach (NCMBObject obj in objList) {
NCMBGeoPoint resultGeo = (NCMBGeoPoint)obj ["point"];
Debug.Log ("Latitude : " + resultGeo.Latitude + "Longitude : " + resultGeo.Longitude);
}
}
});
お探しの内容が見つからなかった場合はユーザーコミュニティ
もご活用ください。(回答保証はいたしかねます)
なお、 Expertプラン以上のお客様はテクニカルサポートにてご質問を承らせて頂きます。
推奨画面サイズ1024×768px以上