位置情報検索(Swift_work_in progress)
基本的な使い方
Contents |
概要
このページでは、アプリから位置情報検索を行う方法について解説します。
位置情報について
NCMBGeoPointは、位置情報を扱うためのクラスです。
プロパティは以下の通り緯度・経度となっております。
緯度は-90.0~90.0、経度は-180.0~180.0まで設定できます。
// 緯度 ; -90.0~90.0
public var latitude : Double
// 経度 ; -180.0-180.0
public var longitude : Double
NCMBGeoPointオブジェクトの作成
geoPointメソッドを使って位置情報のオブジェクトを生成できます。
このメソッドで生成されたオブジェクトの緯度・経度は0に設定されます。
例 緯度・経度 0で生成しています。
NCMBGeoPoint *geoPoint = [NCMBGeoPoint geoPoint];
緯度、経度を指定して生成する場合は直接に設定します。
例 新宿駅の座標を指定して生成しています。
var geoPoint : NCMBGeoPoint? = NCMBGeoPoint.init()
geoPoint?.latitude = Double(35.690921)
geoPoint?.longitude = Double(139.700258)
iOS8で位置情報を利用する場合の準備
iOS8からは位置情報を取得する方法が2種類になったため、
位置情報の利用方法にあわせて以下の準備が必要です。
アプリが起動中の場合にのみ位置情報を利用する場合
- Info.plistにNSLocationWhenInUseUsageDescriptionという項目を追加し、位置情報を利用する用途を記載する
- 位置情報を取得する前にCLLocationManagerクラスのrequestWhenInUseAuthorizationメソッドを実行する
アプリが起動していなくても位置情報を利用する場合
- Info.plistにNSLocationAlwaysUsageDescriptionという項目を追加し、位置情報を利用する用途を記載する
- 位置情報を取得する前にCLLocationManagerクラスのrequestAlwaysAuthorizationメソッドを実行する
位置情報の利用をリクエストするrequestXXXXAuthorizationメソッドを、
geoPointForCurrentLocationInBackgroundメソッドの実行直前に記載することで、
位置情報が必要になってから、認証画面を表示することが可能になります。
Info.plistに記載した内容が認証画面の下側に表示されます。
現在地を取得する
GPS機能などでお客様の位置情報を元にオブジェクトの生成もできます。
※geoPointForCurrentLocationInBackground:を使用する場合には「CoreLocation.framework」の追加が必要になります。
例 現在地を非同期に取得する
if( CLLocationManager.authorizationStatus() == .authorizedWhenInUse ||
CLLocationManager.authorizationStatus() == .authorizedAlways){
let latitude: Double = locManager.location!.coordinate.latitude
let longitude: Double = locManager.location!.coordinate.longitude
var geoPoint:NCMBGeoPoint = NCMBGeoPoint.init(latitude: latitude, longitude: longitude)
}
CLLocationを元にオブジェクトの生成もできます。
※CLLocationを使用する場合には「CoreLocation.framework」の追加が必要になります。
例 CoreLocationのstartUpdatingLocation実行後、CLLocationの緯度・経度を元にオブジェクトの生成を行っています。
func locationManager(_ manager:CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let locValue:CLLocationCoordinate2D = (manager.location?.coordinate)!
print("locations = \(locValue.latitude) \(locValue.longitude)")
let latitude: Double = locValue.latitude
let longitude: Double = locValue.longitude
var geoPoint:NCMBGeoPoint = NCMBGeoPoint.init(latitude: latitude, longitude: longitude)
manager.stopUpdatingLocation()
}
位置情報をデータストアに保存する
位置情報をデータストアに保存するには、setObjectでNCMBGeoPointクラスのオブジェクトをセットし、save系メソッドで保存します。
例1 saveInBackground を使用し、新宿駅の座標をデータストアに保存しています。
@IBAction func SaveExample1(_ sender: Any) {
let areaName: String = "新宿駅"
//geoPointの生成
let latitude: Double = 35.690921
let longitude: Double = 139.700258
let geoPoint:NCMBGeoPoint = NCMBGeoPoint.init(latitude: latitude, longitude: longitude)
//geoPointの保存
let object : NCMBObject = NCMBObject(className: "Places")
object["point"] = geoPoint
object["areaName"] = areaName
object.saveInBackground(callback: { result in
switch result {
case .success:
//成功後の処理
print("保存に成功しました")
case let .failure(error):
//エラー処理
print("保存に失敗しました: \(error)")
}
})
}
すでに生成されているgeoPointの位置情報を変更して保存する事もできます。
例2 saveInBackgroundWithBlock:を使用し、高田馬場駅の座標をデータストアに保存しています。
- (IBAction)SaveExample2:(id)sender {
NSString *areaName = @"高田馬場駅";
//geoPointの生成
NCMBGeoPoint *geoPoint = [NCMBGeoPoint geoPoint];
geoPoint.latitude = 35.712285;
geoPoint.longitude = 139.703782;
//geoPointの保存
NCMBObject *obj = [NCMBObject objectWithClassName:@"Places"];
[obj setObject:geoPoint forKey:@"point"];
[obj setObject:areaName forKey:@"areaName"];
[obj saveInBackgroundWithBlock:^(NSError *error){
if (!error) {
//成功後の処理
}
else {
//エラー処理
}
}];
}
位置情報の検索
- 現在未実装となっております。実装次第、ドキュメントを更新いたします。
お探しの内容が見つからなかった場合はユーザーコミュニティ
もご活用ください。(回答保証はいたしかねます)
なお、 Expertプラン以上のお客様はテクニカルサポートにてご質問を承らせて頂きます。
推奨画面サイズ1024×768px以上