diff options
Diffstat (limited to 'platform/darwin/src/MGLDistanceFormatter.m')
-rw-r--r-- | platform/darwin/src/MGLDistanceFormatter.m | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/platform/darwin/src/MGLDistanceFormatter.m b/platform/darwin/src/MGLDistanceFormatter.m new file mode 100644 index 0000000000..e77e48b512 --- /dev/null +++ b/platform/darwin/src/MGLDistanceFormatter.m @@ -0,0 +1,35 @@ +#import "MGLDistanceFormatter.h" + +@interface MGLDistanceFormatter() +@end + +@implementation MGLDistanceFormatter + +static const CLLocationDistance METERS_PER_MILE = 1609.344; +static const double YARDS_PER_MILE = 1760.0; +static const double FEET_PER_MILE = YARDS_PER_MILE * 3.0; + +- (NSString *)stringFromDistance:(CLLocationDistance)distance { + double miles = distance / METERS_PER_MILE; + double feet = miles * FEET_PER_MILE; + + NSLengthFormatterUnit unit = NSLengthFormatterUnitMillimeter; + [self unitStringFromMeters:distance usedUnit:&unit]; + + self.numberFormatter.roundingIncrement = @0.25; + + if (unit == NSLengthFormatterUnitYard) { + if (miles > 0.2) { + unit = NSLengthFormatterUnitMile; + return [self stringFromValue:miles unit:unit]; + } else { + unit = NSLengthFormatterUnitFoot; + self.numberFormatter.roundingIncrement = @50; + return [self stringFromValue:feet unit:unit]; + } + } else { + return [self stringFromMeters:distance]; + } +} + +@end |