строка геокодирования не работает (цель c) - PullRequest
0 голосов
/ 03 мая 2018

Я использую этот код для создания геокодированной адресной строки, но каждый раз он дает мне одинаковую долготу широты с разными адресами. Я проверил количество меток, и оно равнялось 1, поэтому оно проходило через него полностью. Я использую этот формат (он не полный), чтобы получить мой адрес, и я проверил, что адрес представлен в виде строки.

NSString * address = [NSString stringWithFormat: @ "% @% @% @% @"

Буду признателен за помощь, спасибо.

[self.geocoderDes geocodeAddressString:address completionHandler:^(NSArray *placemarks2, NSError *error) {
    if ([placemarks2 count] > 0) {

        CLPlacemark *placemark = [placemarks objectAtIndex:0];
        CLLocation *location = placemark.location;
        CLLocationCoordinate2D coordination = location.coordinate;
        NSLog(@" location latitude %f, location longitude %f",coordination.latitude, coordination.longitude);


    }else {
        NSLog(@"%@", error.debugDescription);
    }
}];

1 Ответ

0 голосов
/ 03 мая 2018

Добавьте этот ключ в ваш info.plist

<key>NSLocationAlwaysUsageDescription</key>
<string>Your Description</string>

1) Вы можете попробовать изменить одну строку в существующем коде

CLPlacemark *placemark = [placemarks2 lastObject];

2) Использование геокодера Попробуйте это

       [self.geocoderDes geocodeAddressString:address completionHandler:^(NSArray *placemarks2, NSError *error)
 {
            if ([placemarks2 count] > 0) {

          CLPlacemark *placemark = [placemarks2 lastObject];
          NSArray *lines = placemark.addressDictionary[@"FormattedAddressLines"];
         CLLocation *location = placemark.location;

         NSString *str_lat = [NSString stringWithFormat: @"%f", location .coordinate.latitude];
         NSString *str_long = [NSString stringWithFormat: @"%f", location.coordinate.longitude];
         NSString *finalAddress = [NSString stringWithFormat:@" %@, %@, %@", lines, str_lat , str_long ];

         NSLog(@" Address %@", finalAddress );


            }


    if(error) {
                NSLog(@"Error");
                return;
            } 
        }];

3) Без геокодера

Этот метод предназначен для получения местоположения пользователя на основе широты и долготы, например, названия штата, города, страны.

-(CLLocationCoordinate2D) getLocationFromAddressStr: (NSString*) addressStr {
    double lat = 0, longi = 0;
    NSString *escapAddr =  [addressStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSString *reqst = [NSString stringWithFormat:@"http://maps.google.com/maps/api/geocode/json?sensor=false&address=%@", escapAddr ];
    NSString *finalResult = [NSString stringWithContentsOfURL:[NSURL URLWithString:reqst] encoding:NSUTF8StringEncoding error:NULL];
    if (finalResult) {
        NSScanner *scanner = [NSScanner scannerWithString:finalResult];
        if ([scanner scanUpToString:@"\"lat\" :" intoString:nil] && [scanner scanString:@"\"lat\" :" intoString:nil]) {
            [scanner scanDouble:&lat];
            if ([scanner scanUpToString:@"\"lng\" :" intoString:nil] && [scanner scanString:@"\"lng\" :" intoString:nil]) {
                [scanner scanDouble:&longi];
            }
        }
    }
    CLLocationCoordinate2D center;
    center.latitude=lat;
    center.longitude = longi;
    NSLog(@"Location Logitute : %f",center.latitude);
    NSLog(@"Location Latitute : %f",center.longitude);
    return center;

}

Назовите этот метод там, где вы хотите

CLLocationCoordinate2D center;
        center=[self getLocationFromAddressStr:@"mumbai"];
      double  latFrom=&center.latitude;
      double  longFrom=&center.longitude;

  NSLog(@"Logitute : %f",latFrom);
        NSLog(@"Latitute : %f",longFrom);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...