Index: trunk/src/org/openstreetmap/josm/gui/MapScaler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapScaler.java	(revision 16893)
+++ trunk/src/org/openstreetmap/josm/gui/MapScaler.java	(revision 16894)
@@ -9,4 +9,6 @@
 import java.awt.Graphics;
 import java.awt.geom.Rectangle2D;
+import java.util.function.DoubleSupplier;
+import java.util.function.Supplier;
 
 import javax.accessibility.Accessible;
@@ -24,5 +26,6 @@
 public class MapScaler extends JComponent implements Helpful, Accessible {
 
-    private final NavigatableComponent mv;
+    private final DoubleSupplier getDist100Pixel;
+    private final Supplier<Color> colorSupplier;
 
     private static final int PADDING_LEFT = 5;
@@ -36,5 +39,15 @@
      */
     public MapScaler(NavigatableComponent mv) {
-        this.mv = mv;
+        this(() -> mv.getDist100Pixel(true), MapScaler::getColor);
+    }
+
+    /**
+     * Constructs a new {@code MapScaler}.
+     * @param getDist100Pixel supplier for distance in meter that correspond to 100 px on screen
+     * @param colorSupplier supplier for color
+     */
+    public MapScaler(DoubleSupplier getDist100Pixel, Supplier<Color> colorSupplier) {
+        this.getDist100Pixel = getDist100Pixel;
+        this.colorSupplier = colorSupplier;
         setPreferredLineLength(100);
         setOpaque(false);
@@ -51,7 +64,6 @@
     @Override
     public void paint(Graphics g) {
-        g.setColor(getColor());
-
-        double dist100Pixel = mv.getDist100Pixel(true);
+        g.setColor(colorSupplier.get());
+        double dist100Pixel = getDist100Pixel.getAsDouble();
         TickMarks tickMarks = new TickMarks(dist100Pixel, getWidth() - PADDING_LEFT - PADDING_RIGHT);
         tickMarks.paintTicks(g);
@@ -83,5 +95,5 @@
         @Override
         public Number getCurrentAccessibleValue() {
-            return mv.getDist100Pixel();
+            return getDist100Pixel.getAsDouble();
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java	(revision 16893)
+++ trunk/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java	(revision 16894)
@@ -35,4 +35,6 @@
 import org.openstreetmap.josm.data.preferences.StringProperty;
 import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.MapScaler;
+import org.openstreetmap.josm.gui.NavigatableComponent;
 import org.openstreetmap.josm.gui.layer.ImageryLayer;
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent;
@@ -119,4 +121,8 @@
         add(iSizeButton);
 
+        MapScaler scaler = new MapScaler(this::getDist100Pixel, () -> Color.BLACK);
+        add(scaler);
+        springLayout.putConstraint(SpringLayout.SOUTH, scaler, 5, SpringLayout.SOUTH, this);
+
         String mapStyle = PROP_MAPSTYLE.get();
         boolean foundSource = false;
@@ -149,4 +155,20 @@
             LinkedHashMap::new
         ));
+    }
+
+    /**
+     * Get the distance in meter that correspond to 100 px on screen.
+     * @return the distance in meter that correspond to 100 px on screen
+     * @see NavigatableComponent#getDist100Pixel
+     */
+    private double getDist100Pixel() {
+        int w = getWidth() / 2;
+        int h = getHeight() / 2;
+        ICoordinate c1 = getPosition(w - 50, h);
+        ICoordinate c2 = getPosition(w + 50, h);
+        final LatLon ll1 = new LatLon(c1.getLat(), c1.getLon());
+        final LatLon ll2 = new LatLon(c2.getLat(), c2.getLon());
+        double gcd = ll1.greatCircleDistance(ll2);
+        return gcd <= 0 ? 0.1 : gcd;
     }
 
