CLLocationCoordinates 纬度/经度值是不是取决于区域设置?

Posted

技术标签:

【中文标题】CLLocationCoordinates 纬度/经度值是不是取决于区域设置?【英文标题】:Are CLLocationCoordinates lat/lon values Locale Dependent?CLLocationCoordinates 纬度/经度值是否取决于区域设置? 【发布时间】:2014-05-19 19:19:59 【问题描述】:

我只需使用 [NSString stringWithFormat:@"%.5f, %.5f"]; 将 CLLocations 转换为逗号分隔的字符串,例如 "75.45874, -45.17292"并将它们发送到我的服务器应用程序,该应用程序需要将字符串作为两个数字,以小数点作为小数点分隔符。

在阅读完所有文档后,我无法确定这些坐标是否取决于区域设置,即如果用户在海外(我在美国),他们的位置是否会有逗号作为小数点分隔符:"75,45874, -45,17292"?

我知道有几种不同的方法可以在需要时将逗号转换为小数,例如使用 NSNumberFormatter,我只是想弄清楚我是否真的需要这样做?我试过用模拟器模拟位置,但我不知道语言环境设置是否会渗透到 CLLocation 的纬度/经度属性,并能正确模拟这种情况。有什么见解吗?

【问题讨论】:

【参考方案1】:

CLLocation 中的坐标表示为CLLocationDegrees,其定义为double。这是浮点数,不依赖于语言环境。

创建一个字符串

[NSString stringWithFormat:@"%.5f, %.5f", lat, lon]

也不依赖于语言环境。 stringWithFormat(几乎)符合IEEE printf specification 它将%f 转换定义为

双参数应转换为十进制表示法 样式“[-]ddd.ddd”,...

因此,您的代码将始终生成一个 point 作为小数分隔符。

另一方面,NSNumberFormatter 使用用户的区域设置首选项进行转换 除非另有说明。如果您将语言环境设置为标准,您可以在您的情况下使用它 “POSIX 语言环境”:

NSNumberFormatter *myFormatter = [[NSNumberFormatter alloc] init];
[myFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];

【讨论】:

以上是关于CLLocationCoordinates 纬度/经度值是不是取决于区域设置?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以从 CLLocation(或 CLLocationCoordinates2D)获取 NSTimeZone 实例?

使用 Swift 将 CLLocationCoordinate2d 转换为街道地址

怎么知道经纬度算距离,

怎么知道经纬度算距离,

Java 度分秒转经纬度,经纬度转度分秒,度分转经纬度,经纬度转度分

在电脑上怎样获取经纬度。