2

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

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];   
}
4

3 回答 3

0

这个现有的问题似乎有关于如何最好地解决的建议,还有一个可以为你做的库: 将十进制坐标转换为度、分、秒、方向

于 2012-08-09T07:42:52.610 回答
0

这并不容易。

在您的示例中,您有北纬 61 度和 14.5919 分钟,没有秒。(秒以分钟中的小数表示。)

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

61 + 14.5919/60 将导致 61.31983 。

您将不得不考虑 S 对纬度产生负值,而 W 对经度产生负值。
您的示例恰好具有 N 和 E 坐标,这适用于正值。但你不能认为这是理所当然的。如果你想要一些通用的解决方案,至少不是这样。

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

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

由于您的问题与编程问题无关,而是与背后的数学有关,因此我会让您从那里开始。

于 2012-08-09T07:53:04.503 回答
0

请参考以下代码

int degreesLat = marker.position.latitude;
double decimalLat = fabs(marker.position.latitude-degreesLat);
int minutesLat = decimalLat*60;
double secondsLat = decimalLat*3600 - minutesLat*60;
于 2017-09-07T10:43:01.960 回答