diff --git a/src/modules/locale/timezonewidget/timezonewidget.cpp b/src/modules/locale/timezonewidget/timezonewidget.cpp
index b8713e107..475815cba 100644
--- a/src/modules/locale/timezonewidget/timezonewidget.cpp
+++ b/src/modules/locale/timezonewidget/timezonewidget.cpp
@@ -20,8 +20,12 @@
* along with Calamares. If not, see .
*/
+#include
+
#include "timezonewidget.h"
+constexpr double MATH_PI = 3.14159265;
+
TimeZoneWidget::TimeZoneWidget(QWidget* parent) :
QWidget(parent)
{
@@ -98,6 +102,17 @@ QPoint TimeZoneWidget::getLocationPosition(double longitude, double latitude) {
double x = (width / 2.0 + (width / 2.0) * longitude / 180.0) + MAP_X_OFFSET * width;
double y = (height / 2.0 - (height / 2.0) * latitude / 90.0) + MAP_Y_OFFSET * height;
+ //Far north, the MAP_Y_OFFSET no longer holds, cancel the Y offset; it's noticeable
+ // from 62 degrees north, so scale those 28 degrees as if the world is flat south
+ // of there, and we have a funny "rounded" top of the world. In practice the locations
+ // of the different cities / regions looks ok -- at least Thule ends up in the right
+ // country, and Inuvik isn't in the ocean.
+ if (latitude > 62.0)
+ y -= sin(MATH_PI * (latitude - 62.0) / 56.0) * MAP_Y_OFFSET * height;
+ // Antarctica isn't shown on the map, but you could try clicking there
+ if (latitude < -60)
+ y = height - 1;
+
if (x < 0)
x = width+x;
if (x >= width)