Я использовал следующие методы для преобразования Decimal Degrees
в Degrees Minutes Seconds (DMS)
, но мне также необходимо его преобразовать в Degrees Decimals Minutes (DDM)
.Конвертировать десятичные градусы в градусы Десятичные минуты (DDM)
Как я могу преобразовать Decimal Degrees
DMS
, а также DMS
назад в Decimal Degrees
?
+ (NSString *)latitudeCoordinate:(CLLocationCoordinate2D)coordinate {
int latSeconds = (int)(coordinate.latitude * 3600);
int latDegrees = latSeconds/3600;
latSeconds = ABS(latSeconds % 3600);
int latMinutes = latSeconds/60;
latSeconds %= 60;
NSString *result = [NSString stringWithFormat:@"%@ %d° %d' %d\"",
latDegrees >= 0 ? @"N" : @"S",
ABS(latDegrees),
latMinutes,
latSeconds];
return result;
}
+ (NSString *)longitudeCoordinate:(CLLocationCoordinate2D)coordinate {
int longSeconds = (int)(coordinate.longitude * 3600);
int longDegrees = longSeconds/3600;
longSeconds = ABS(longSeconds % 3600);
int longMinutes = longSeconds/60;
longSeconds %= 60;
NSString* result = [NSString stringWithFormat:@"%@ %d ° %d' %d\"",
longDegrees >= 0 ? @"E" : @"W",
ABS(longDegrees),
longMinutes,
longSeconds
];
return result;
}
+ (double)degreesStringToDecimal:(NSString*)string {
// split the string
NSArray *splitDegs = [string componentsSeparatedByString:@"\u00B0"]; // unicode for degree symbol
NSArray *splitMins = [splitDegs[1] componentsSeparatedByString:@"'"];
NSArray *splitSecs = [splitMins[1] componentsSeparatedByString:@"\""];
// get each segment of the dms string
NSString *degreesString = splitDegs[0];
NSArray *directionArray = [degreesString componentsSeparatedByString:@" "];
NSString *minutesString = splitMins[0];
NSString *secondsString = splitSecs[0];
NSString *direction = directionArray[0];
degreesString = directionArray[1];
// convert degrees
double degrees = [degreesString doubleValue];
// convert minutes
double minutes = [minutesString doubleValue]/60; // 60 degrees in a minute
// convert seconds
double seconds = [secondsString doubleValue]/3600; // 60 seconds in a minute, or 3600 in a degree
// add them all together
double decimal = degrees + minutes + seconds;
// determine if this is negative. south and west would be negative values
if ([direction.uppercaseString isEqualToString:@"W"] || [direction.uppercaseString isEqualToString:@"S"])
{
decimal = -decimal;
}
return decimal;
}
градусы и десятичные минуты, как 27 градусов, 14.241 минут (вместо градусов/минут/секунд? –