我需要像这样格式化我的坐标:
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];
}
答案 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;