Одной из задач в разработке приложения для iPhone стала задача получить географические координаты iOS устройства (широту и долготу) и отправлить их на сервер. Реализуется данная задача с помощью использования классов из CoreLocation framework. Для этого необходимо добавить CoreLocation framework к проекту.
Для подключения фреймворка CoreLocation выберите в Xcode ваш проект, перейдите в раздел TARGETS, далее выбирите вкладку Build Phases и там выберите раздел Link Binary Libraries. После этого добавьте CoreLocation framework к вашему проекту.
В классе MainMenuViewController.m необходимо импортировать класс CoreLocation.h
Также необходимо добавить
Метод, получения текущих геокоординат утсройства.
Метод, который отправляет текущие коорднинаты на сервер
Внимание здесь стоит уделить получению непосредственно широты и долготы.
Подключение фреймворка CoreLocation
Для подключения фреймворка CoreLocation выберите в Xcode ваш проект, перейдите в раздел TARGETS, далее выбирите вкладку Build Phases и там выберите раздел Link Binary Libraries. После этого добавьте CoreLocation framework к вашему проекту.
Объявление переменных и методов
В классе MainMenuViewController.h необходимо импортировать класс CoreLocation.h
#import <CoreLocation/CoreLocation.h>
// класс должен быть делегатом CLLocationManagerDelegate @interface MainMenuViewController : UIViewController<CLLocationManagerDelegate>
В классе MainMenuViewController.h объявляем нужные нам методы и переменные.
// отправляем координаты на сервер -(void) sendCoordinatesToServer: (long long)userId; // получаем текущие координаты устройства -(CLLocationCoordinate2D) findCurrentLocation; // подключение для отправления координат на сервер @property (retain, nonatomic) NSURLConnection *sendCoordinatesConnection;
Реализация методов
В классе MainMenuViewController.m необходимо импортировать класс CoreLocation.h
#import <CoreLocation/CoreLocation.h>
Также необходимо добавить
@synthesize sendCoordinatesConnection;
Метод, получения текущих геокоординат утсройства.
-(CLLocationCoordinate2D) findCurrentLocation { CLLocationManager *locationManager = [[CLLocationManager alloc]init]; // проверяем доступно ли получение координат if ([CLLocationManager locationServicesEnabled]) { locationManager.delegate = self; locationManager.desiredAccuracy = kCLLocationAccuracyBest; locationManager.distanceFilter = kCLDistanceFilterNone; // находим местоположение устройства [locationManager startUpdatingLocation]; } // получаем местоположение CLLocation *location = [locationManager location]; // определяем координаты CLLocationCoordinate2D coordinate = [location coordinate]; return coordinate; }
Метод, который отправляет текущие коорднинаты на сервер
-(void) sendCoordinatesToServer:(long long) userId { NSString *serverAddress = SERVER_ADDRESS; NSString *restMethodAddress = @"/rest/users/saveCoordinates"; NSString *userIdStr = [[NSNumber numberWithLongLong:userId] stringValue]; // получаем координаты возвращаемые методом findCurrentLocation CLLocationCoordinate2D coordinate = [self findCurrentLocation]; // получаем широту и преобразовываем ее в строку NSString *param1 = [@"?lat=" stringByAppendingString:[NSString stringWithFormat:@"%f", coordinate.latitude]]; // получаем долготу и преобразовываем ее в строку NSString *param2 = [@"&lng=" stringByAppendingString:[NSString stringWithFormat:@"%f", coordinate.longitude]]; NSString *param3 = [@"&userId=" stringByAppendingString:userIdStr]; NSMutableString *fullRequestAddress = [NSMutableString stringWithString:serverAddress]; [fullRequestAddress appendString:restMethodAddress]; [fullRequestAddress appendString:param1]; [fullRequestAddress appendString:param2]; [fullRequestAddress appendString:param3]; NSURL *sendCoordinatesURL = [NSURL URLWithString:fullRequestAddress]; NSMutableURLRequest *sendCoordinatesRequest = [[NSMutableURLRequest alloc] initWithURL:sendCoordinatesURL]; [sendCoordinatesRequest setHTTPMethod:@"GET"]; // посылаем асинхронный запрос на сервер в котором отправляем широту и долготу sendCoordinatesConnection = [NSURLConnection connectionWithRequest:sendCoordinatesRequest delegate:self]; }
Внимание здесь стоит уделить получению непосредственно широты и долготы.
// получаем координаты возвращаемые методом findCurrentLocation CLLocationCoordinate2D coordinate = [self findCurrentLocation]; // получаем широту coordinate.latitude // получаем долготу coordinate.longitude


Комментариев нет:
Отправить комментарий