Захватывает GPS Местоположение iPhone SDK - PullRequest
1 голос
/ 27 ноября 2010

Я пытаюсь определить местонахождение текущего местоположения iPhone, и я не уверен, что делаю неправильно, ничего не регистрируется или не отображается ....

Код здесь:

- (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];
  statusText.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];
  statusText.text = longt;


}

- (CLLocationCoordinate2D) geoCodeUsingAddress:(NSString *)address
{
    double latitude = 0, longitude = 0;
    NSString *esc_addr =  [statusText.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSString *req = [NSString stringWithFormat:@"http://maps.google.com/maps/api/geocode/json?sensor=false&address=%@", esc_addr];
    NSString *result = [NSString stringWithContentsOfURL:[NSURL URLWithString:req] encoding:NSUTF8StringEncoding error:NULL];
    if (result) {
        NSScanner *scanner = [NSScanner scannerWithString:result];
        if ([scanner scanUpToString:@"\"lat\":" intoString:nil] && [scanner scanString:@"\"lat\":" intoString:nil]) {
            [scanner scanDouble:&latitude];
            if ([scanner scanUpToString:@"\"lng\":" intoString:nil] && [scanner scanString:@"\"lng\":" intoString:nil]) {
                [scanner scanDouble:&longitude];
            }
        }
    }
    CLLocationCoordinate2D center;
    center.latitude = latitude;
    center.longitude = longitude;
    return center;
}



// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
  locationManager = [[CLLocationManager alloc] init];
  locationManager.delegate = self;
  locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
  locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
  [locationManager startUpdatingLocation];

По порядку: захват long и lat, преобразование его с помощью Google Map API и вызов LocationManager прежде всего при запуске приложения.

Координаты появляются, просто их преобразования в фактическое местоположение не происходит

Ответы [ 3 ]

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

В MapKit есть класс под названием MKReverseGeocoder.Вы инициализируете его координатой полученного местоположения и запускаете его.Он вернет MKPlacemark от своего делегата.Используйте MKPlacemark для доступа к таким вещам, как адрес, город, штат, почтовый индекс, страна и т. Д.

0 голосов
/ 24 апреля 2012

Вы также можете получить бесплатную базу данных почтовых индексов для США и некоторых других стран (включая широту и долготу), а затем проверить на ближайшую. Тогда нет никакой зависимости от API.

0 голосов
/ 27 ноября 2010
  - (void)locationManager:(CLLocationManager *)manager
      didUpdateToLocation:(CLLocation *)newLocation
             fromLocation:(CLLocation *)oldLocation

Этот делегат не будет работать на некоторых iOS SDK. Вы проверили это в устройстве и проверили.

...