我该如何格式化这样的坐标?

时间:2012-08-09 07:37:35

标签: ios format coordinates degrees

我需要像这样格式化我的坐标:

N 61° 14.5919'
E 23° 28.1751'

现在我的坐标看起来像这样:

61.145919
23.281751

我的代码:

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{
    latitudeLabel.text = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude];
    longitudeLabel.text = [NSString stringWithFormat:@"%f", newLocation.coordinate.longitude];   
}

3 个答案:

答案 0 :(得分:0)

这个现有问题似乎有关于如何最好地解决的建议,以及可以为您做到这一点的库: Convert decimal coordinate into degrees, minutes, seconds, direction

答案 1 :(得分:0)

这并不容易。

在你的例子中,你有61度北和14.5919分钟,没有秒。 (秒数由分钟中的小数重新初始化。)

您必须将分钟转换为厘米。

61 + 14.5919 / 60将导致61.31983。

你必须考虑S为纬度的负值以及W对经度的重复性。
您的示例恰好具有N和E坐标,可以正值使用。但你不能认为这是理所当然的。如果你想要一些通用的解决方案,至少不会。

所以对于纬度: 如果值>> 0则为N,否则为S. 您可以截断度数的后逗号值并添加°。 然后取余数并将其乘以60并将其用作分钟并加上''。

.145919 * 60 = 8.75514 - 这是此示例的分钟值。它应该导致 N 61°8.75514'

由于你的问题与编程问题无关,但与背后的数学有关,我会让你离开那里。

答案 2 :(得分:0)

请参阅以下代码

int degreesLat = marker.position.latitude;
double decimalLat = fabs(marker.position.latitude-degreesLat);
int minutesLat = decimalLat*60;
double secondsLat = decimalLat*3600 - minutesLat*60;