summaryrefslogtreecommitdiff
path: root/platform/darwin/src/MGLDistanceFormatter.m
diff options
context:
space:
mode:
Diffstat (limited to 'platform/darwin/src/MGLDistanceFormatter.m')
-rw-r--r--platform/darwin/src/MGLDistanceFormatter.m35
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