From 835cfa8352f3c7027784fbbad0046d85925136ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Farka=C5=A1?= Date: Wed, 18 Sep 2024 14:59:24 +0200 Subject: [PATCH] hotfix for US state boxes --- server/tx_search.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/server/tx_search.js b/server/tx_search.js index f44bbe9..0871088 100644 --- a/server/tx_search.js +++ b/server/tx_search.js @@ -21,15 +21,22 @@ async function loadUsStatesGeoJson() { // Function to get bounding box of a state function getStateBoundingBox(coordinates) { let minLat = Infinity, maxLat = -Infinity, minLon = Infinity, maxLon = -Infinity; + + // Check if it's a MultiPolygon or a Polygon for (const polygon of coordinates) { - for (const coord of polygon[0]) { // First level in case of MultiPolygon - const [lon, lat] = coord; - if (lat < minLat) minLat = lat; - if (lat > maxLat) maxLat = lat; - if (lon < minLon) minLon = lon; - if (lon > maxLon) maxLon = lon; + // If it's a Polygon, it won't have an extra level of arrays + const linearRings = Array.isArray(polygon[0][0]) ? polygon : [polygon]; + + for (const ring of linearRings) { + for (const [lon, lat] of ring) { + if (lat < minLat) minLat = lat; + if (lat > maxLat) maxLat = lat; + if (lon < minLon) minLon = lon; + if (lon > maxLon) maxLon = lon; + } } } + return { minLat, maxLat, minLon, maxLon }; }