iPhone - Google Map координаты и двойная точность - PullRequest
0 голосов
/ 26 августа 2011

Использование http://maps.google.com/maps/geo?q=.... возвращает широту и долготу, подобные этим: 48.8616441,2.3448885

в возвращаемой строке, подобной этой: 200,8,48.8616441,2.3448885

При анализев функцию, которая возвращает CLLocationCoordinate2D:

    NSArray* listItems = [locationString componentsSeparatedByString:@","];

    CLLocationDegrees latitude = kInexistantLatitude;
    CLLocationDegrees longitude = kInexistantLongitude;

    if([listItems count] >= 4 && [[listItems objectAtIndex:0] isEqualToString:@"200"]) {
        latitude = [[listItems objectAtIndex:2] doubleValue];
        longitude = [[listItems objectAtIndex:3] doubleValue];
    }

    CLLocationCoordinate2D location;
    location.latitude = latitude;
    location.longitude = longitude;

    return location;

, который он отдает в отладчик:

широта = 48.861644099999999 долгота = 2.3448885000000002

Я храню многие элементы, подобные этому, вмассив, и в конце я анализирую массив, чтобы записать их в файл plist как элементы словаря (тег) (я использую NSString appendFormat, который дает, как NSLog):

NSLog(@"%f %f", location.latitude, location.longitude);

48.861644 2.344889

В какой-то момент, Я загружу этот словарь и сохраню эти материалы для чтения в CLLocationCoordinate2D, чтобы отобразить их в MKMapView.

Так что у меня есть 2 проблемы:

1) Как я могу сохранить возвращенныезначение, указанное в запросе http без потери цифры и сохранения моей функции?

2) Если я хочу сделать это, как я могу прочитать материал и сохранить его в CLLocationCoordinate2D без потери снова цифры?

Ответы [ 3 ]

3 голосов
/ 26 августа 2011

Вы не теряете цифру точности.Когда вы используете

NSLog(@"%f %f", location.latitude, location.longitude);

Если вы не укажете точность, %f автоматически усекает ваше число до 6 десятичных знаков согласно стандарту ANSI C.

Попробуйте

NSLog(@"%.8f %.8f", location.latitude, location.longitude);

Это должно вернуть тот же номер, что и возвращаемая строка.

2 голосов
/ 26 августа 2011

Если у вас возникли проблемы с точностью типа примитива double.

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

Подробнее об этом вы можете узнать в статье Википедии .

Однако, когда вы NSLog или appendFormat:, вы можете указать точное количество цифр, которые вы хотите напечатать. В этом случае, если вы хотите 7 цифр, вы напишите:

NSLog(@"%.7f %.7f", location.latitude, location.longitude);
0 голосов
/ 26 октября 2015

Та же проблема, что и у меня. Условие, которое у меня было, было, я получу длинный лат из JSON, и после нажатия на карту мне придется отправить длинный лат обратно на сервер. Сервер ответил сообщением "неправильное местоположение". Назначение Координация координат ограничивала точность. Я решил это, имея в качестве длинных данных из JSON NSString. Создайте объектный класс для хранения эквивалента NSString вашего lat и long. "Не сохраняйте lat long, полученный из JSON, в cllocationcoordinate, возможно, вам придется потерять точность.

NSString * lattodeletetest;
NSString * longtodeletetest;
lattodeletetest=[dict objectForKey:@"Lat"];
longtodeletetest=[dict objectForKey:@"Lon"];
NSArray *array2=[[NSArray alloc] initWithObjects:lattodeletetest,longtodeletetest, nil];
NSString * coordinateString2=[array2 componentsJoinedByString:@","];
safe.strLatLong=coordinateString2;
NSLog(@"%@",safe.strLatLong); //prints 12.758493847753464,71.488293492438438

Таким образом можно сохранить значения lat и long, полученные из JSON, без правок.

Чтобы использовать его как CLLOcationCoordinate2d, используйте

 NSString *str=strLatLong;
 NSArray *array=[str componentsSeparatedByString:@","];
 lattodeletetest=[array objectAtIndex:0];
 longtodeletetest=[array objectAtIndex:1];
 CLLocationCoordinate2D location=CLLocationCoordinate2DMake([lattodeletetest doubleValue],[longtodeletetest doubleValue]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...