Я видел оба варианта, которые люди используют ... Просто не знаю, что плавать недостаточно для iOS5?Хранение координат из основного местоположения в базовых данных. Поплавок или Двойной?
ответ
32-битный поплавок содержит 7 цифр точности, 64-разрядный бит содержит 15 цифр точности.
С точностью до 7 цифр максимальная долгота 179.9999 только точная до 0,0001 градуса. Степень составляет около 60 морских миль, поэтому 0,0001 градуса составляет около 10 метров (33 фута). Если вы хотите сохранить более точные значения lat/lon, вам нужно использовать двойное (или целое число с фиксированной точкой).
В эти дни это не имеет большого значения.
Двойной - это слот с плавающей точкой, который может удерживать в два раза больше точности, чем стандартный поплавок. Если вы не заставите его использовать float, компилятор Objective-c фактически сохранит все значения float как double.
Поплавки и парные разряды в значительной степени удерживаются от старых дней, когда память была очень плотной. В эти дни вы обычно видите, что они разные, когда дело доходит до форматирования строк. То же самое с различными размерами int. Все размеры хранятся в самом большом доступном размере, если вы не заставите компилятор делать иначе.
Для ответа, точность которых у вас есть при использовании поплавков или удвоении я пришел с этим ответом:
Худшая точность случае при сохранении в качестве десятичных чисел для E/W и N/S:
- поплавок: 1.6955566 метров
- double: 3.1582203519064933E-9 метров. (То есть 3 нм)
Вы можете сделать расчеты самостоятельно, выполнив это в Java:
public class Main {
public static void main(String[] args) {
System.out.println(Math.ulp((float) 180) * 60 * 1852);
System.out.println(Math.ulp((double) 180) * 60 * 1852);
}
}
Я знаю, что это старый нить, но я нашел его, ища проблему. Поплавок, скорее всего, достаточно для большинства приложений. GPS-устройство рассматриваемого устройства Apple, вероятно, не имеет более высокой точности, чем это. Но хранить дубликаты проще, поскольку данные не являются проблемой.
В последнее время, я думаю, что это просто легче хранить координаты в основных данных, как NSValue
в трансформируемой атрибута:
[NSValue valueWithMKCoordinate:coordinate]
Я просто понял, что мне нужно сделать Пифагора с наибольшей ошибкой в другой направление тоже. Так немного хуже. :) – Gussoh