存储核心数据中核心位置的坐标。浮动还是双重?

时间:2011-10-21 15:39:07

标签: core-data ios5 core-location

我看到人们使用的两种变体...... 只是不知道浮动还不够iOS5?

4 个答案:

答案 0 :(得分:21)

32位浮点数保持7位精度,64位双精度位数保持15位精度。

精确到7位数,最大经度179.9999只能精确到0.0001度。学位约为60海里,因此0.0001度约为10米(33英尺)。如果要存储更精确的lat / lon值,则需要使用double(或固定点整数)。

答案 1 :(得分:4)

这些天并不重要。

double只是一个浮点值槽,其精度可以是标准浮点数的两倍。除非你强制它使用浮点数,否则Objective-c编译器实际上会将所有浮点值存储为double。

从记忆过于紧张的旧时代开始,漂浮和双打基本上都处于停滞状态。现在,在字符串格式化方面,您通常只看到它们不同。各种大小的int都是一样的。除非您强制编译器执行其他操作,否则所有大小都以最大可用大小存储。

答案 2 :(得分:2)

为了回答使用浮点数或双倍时的精确度,我得出了这个答案:

存储为E / W和N / S的十进制数时的最差情况准确度:

  • float: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);
  }
}

我知道这是一个老线程但我在搜索问题时找到了它。对于大多数应用程序来说,Float最有可能足够有问题的Apple设备的GPS可能没有更好的准确性。但只要数据不是问题,就更容易存储双打。

答案 3 :(得分:2)

最近,我认为在可转换属性中将核心数据中的坐标存储为NSValue更容易:

[NSValue valueWithMKCoordinate:coordinate]

https://developer.apple.com/library/ios/documentation/MapKit/Reference/NSValue_MapKit_additions/Reference/Reference.html