Доступ к текущему местоположению iPhone - PullRequest
1 голос
/ 24 октября 2010

Как сохранить координаты широты и долготы текущего местоположения iPhone в двух разных переменных с плавающей точкой?

Ответы [ 4 ]

4 голосов
/ 24 октября 2010

Этот учебник поможет вам сделать именно это.

Вот соответствующий код из учебника, который вас заинтересует:

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{
  int degrees = newLocation.coordinate.latitude;
  double decimal = fabs(newLocation.coordinate.latitude - degrees);
  int minutes = decimal * 60;
  double seconds = decimal * 3600 - minutes * 60;
  NSString *lat = [NSString stringWithFormat:@"%d° %d' %1.4f\"", 
                   degrees, minutes, seconds];
  latLabel.text = lat;
  degrees = newLocation.coordinate.longitude;
  decimal = fabs(newLocation.coordinate.longitude - degrees);
  minutes = decimal * 60;
  seconds = decimal * 3600 - minutes * 60;
  NSString *longt = [NSString stringWithFormat:@"%d° %d' %1.4f\"", 
                     degrees, minutes, seconds];
  longLabel.text = longt;
}
0 голосов
/ 20 февраля 2013

Используйте следующий код для отображения текущего местоположения в MKMapView и для установки уровня масштабирования в iPhone App.

1) Добавьте MApKit и CoreLocation Framework в ваш проект.

2) Используйте следующий код вФайл ViewController.h:

#import "mapKit/MapKit.h"
#import "CoreLocation/CoreLocation.h"

@interface ViewController : UIViewController<MKMapViewDelegate, CLLocationManagerDelegate>
{
      MKMapView *theMapView;
      CLLocationManager *locationManager;
      CLLocation *location;
      float latitude, longitude;
}

3) Добавьте следующий код в метод viewDidLoad:

   // Add MKMapView in your View 

   theMapView=[[MKMapView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
   theMapView.delegate=self;
   [self.view addSubview:theMapView];

   // Create an instance of CLLocationManager

   locationManager=[[CLLocationManager alloc] init];
   locationManager.desiredAccuracy=kCLLocationAccuracyBest;
   locationManager.delegate=self;
   [locationManager startUpdatingLocation];

   // Create an instance of CLLocation

   location=[locationManager location];

   // Set Center Coordinates of MapView

   theMapView.centerCoordinate=CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude);

   // Set Annotation to show current Location 

   MKPointAnnotation *annotaionPoint=[[MKPointAnnotation alloc] init];
   annotaionPoint.coordinate=theMapView.centerCoordinate;
   annotaionPoint.title=@"New Delhi";
   annotaionPoint.subtitle=@"Capital";
   [theMapView addAnnotation:annotaionPoint];

   // Setting Zoom Level on MapView

   MKCoordinateRegion coordinateRegion;   

   coordinateRegion.center = theMapView.centerCoordinate;
   coordinateRegion.span.latitudeDelta = 1;
   coordinateRegion.span.longitudeDelta = 1;

   [theMapView setRegion:coordinateRegion animated:YES];

    // Show userLocation (Blue Circle)

   theMapView.showsUserLocation=YES;

4) Используйте следующее расположение для обновления пользовательского местоположения

   -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
    {
         latitude=userLocation.coordinate.latitude;
         longitude=userLocation.coordinate.longitude;

         theMapView.centerCoordinate=CLLocationCoordinate2DMake(latitude, longitude);

         MKPointAnnotation *annotationPoint=[[MKPointAnnotation alloc] init];
         annotationPoint.coordinate=theMapView.centerCoordinate;
         annotationPoint.title=@"Moradabad";
         annotationPoint.subtitle=@"My Home Town";
     }
0 голосов
/ 29 июля 2011

Вы можете инициализировать CLLocationManager, чтобы найти точку и сослаться на нее после слов (обратите внимание, что инициализация заимствована из другого поста).

CLLocationManager *curLocationManager = [[CLLocationManager alloc] init];
curLocationManager.delegate        = self;  //SET YOUR DELEGATE HERE
curLocationManager.desiredAccuracy = kCLLocationAccuracyBest; //SET THIS TO SPECIFY THE ACCURACY
[curLocationManager startUpdatingLocation];

//NSLog(@"currentLocationManager is %@", [curLocationManager.location description]);
[curLocationManager stopUpdatingLocation];
//NSLog(@"currentLocationManager is now %@", [curLocationManager.location description]);
//NSLog(@"latitude %f", curLocationManager.location.coordinate.latitude);
//NSLog(@"longitude %f", curLocationManager.location.coordinate.longitude);

double latitude = curLocationManager.location.coordinate.latitude;
double longitude = curLocationManager.location.coordinate.longitude;

Обратите внимание, что вам также необходимо включить (CLLocationManager *)locationManager и (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocationи вы должны включить (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error

0 голосов
/ 28 октября 2010

Четанский ответ превосходен и даст вам широту и долготу в градусах.На всякий случай, если вы заинтересованы только в хранении лат и длин в единицах, которые вы затем можете использовать для сравнения с другими местоположениями, вы можете просто сделать следующее:

- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
       fromLocation:(CLLocation *)oldLocation {
CLLocationDegrees latitude = newLocation.coordinate.latitude;
CLLocationDegrees longitude = newLocation.coordinate.longitude;
...
}

Если вы хотите сохранить их, то выЯ хотел бы предоставить какое-то хранилище для значений.В противном случае они выйдут из области видимости в конце метода.

Обратите внимание, что CLLocationDegrees - это просто двойное число с красивым именем.

Имейте в виду, что CLLocation.coordinate является аккуратнымструктура, которую вы можете хранить как CLLocationCoordinate2D - гораздо более элегантно хранить эти значения вместе, поскольку они сохраняют немного больше контекста.

...