From 581501aff578eed4f1be950e44454ce53068c51e Mon Sep 17 00:00:00 2001
From: Eric Duminil <eric.duminil@gmail.com>
Date: Thu, 23 Mar 2023 13:58:47 +0100
Subject: [PATCH] Human readable area

---
 .../website/script/simstadt_openlayers.js              |  3 +--
 .../eu/simstadt/regionchooser/website/script/utils.js  | 10 ++++++++++
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/main/resources/eu/simstadt/regionchooser/website/script/simstadt_openlayers.js b/src/main/resources/eu/simstadt/regionchooser/website/script/simstadt_openlayers.js
index d46974c..31689d3 100644
--- a/src/main/resources/eu/simstadt/regionchooser/website/script/simstadt_openlayers.js
+++ b/src/main/resources/eu/simstadt/regionchooser/website/script/simstadt_openlayers.js
@@ -298,8 +298,7 @@ const regionChooser = (function(){
 		if (utils.is_polygon(geom)){ // It could be a MultiPolygon, for example.
 			var coordinates = geom.getLinearRing(0).getCoordinates();
 			var area = Math.abs(wgs84Sphere.geodesicArea(coordinates));
-			//NOTE: Could show m², ha or km² depending on magnitude
-			dataPanel.append("<h3 class='clean'>Area : " + (area / 10000).toFixed(1) + " ha\n");
+			dataPanel.append("<h3 class='clean'>Area : " + utils.human_readable_area(area) + "\n");
 		}
 		dataPanel.append('<div style="visibility:hidden" id="download_region">' +
 			'<button type="button" onclick="regionChooser.downloadFromSelectedCityGMLs()" id="download_region_button" disabled>Download Region</button><br/>\n' +
diff --git a/src/main/resources/eu/simstadt/regionchooser/website/script/utils.js b/src/main/resources/eu/simstadt/regionchooser/website/script/utils.js
index 6e2b788..1c7ef39 100644
--- a/src/main/resources/eu/simstadt/regionchooser/website/script/utils.js
+++ b/src/main/resources/eu/simstadt/regionchooser/website/script/utils.js
@@ -66,3 +66,13 @@ utils.polygon_style = function (color, alpha) {
 		}),
 	});
 }
+
+utils.human_readable_area = function (area) {
+	if (area > 1_000_000) {
+		return (area / 1_000_000).toFixed(1) + " km²";
+	}
+	if (area > 10_000) {
+		return (area / 10_000).toFixed(1) + " ha";
+	}
+	return area.toFixed(1) + " m²";
+}
-- 
GitLab