From 93af84cbd8333a07cfeb53057483d86fcf685b09 Mon Sep 17 00:00:00 2001 From: Mitchell Scott <10804314+rmitchellscott@users.noreply.github.com> Date: Mon, 20 Oct 2025 13:30:08 -0600 Subject: [PATCH 1/2] fix: geolookup if only latLonQuery is provided --- server/scripts/index.mjs | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/server/scripts/index.mjs b/server/scripts/index.mjs index 448aa7e..7391d8a 100644 --- a/server/scripts/index.mjs +++ b/server/scripts/index.mjs @@ -113,7 +113,14 @@ const init = async () => { const latLon = parsedParameters.latLon ?? localStorage.getItem('latLon'); const fromGPS = localStorage.getItem('latLonFromGPS') && !loadFromParsed; - if (query && latLon && !fromGPS) { + if (parsedParameters.latLonQuery && !parsedParameters.latLon) { + const txtAddress = document.querySelector(TXT_ADDRESS_SELECTOR); + txtAddress.value = parsedParameters.latLonQuery; + const geometry = await geocodeLatLonQuery(parsedParameters.latLonQuery); + if (geometry) { + doRedirectToGeometry(geometry); + } + } else if (query && latLon && !fromGPS) { const txtAddress = document.querySelector(TXT_ADDRESS_SELECTOR); txtAddress.value = query; loadData(JSON.parse(latLon)); @@ -162,6 +169,26 @@ const init = async () => { document.querySelector('#container').addEventListener('swiped-right', () => swipeCallBack('right')); }; +const geocodeLatLonQuery = async (query) => { + try { + const data = await json('https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/find', { + data: { + text: query, + f: 'json', + }, + }); + + const loc = data.locations?.[0]; + if (loc) { + return loc.feature.geometry; + } + return null; + } catch (error) { + console.error('Geocoding failed:', error); + return null; + } +}; + const autocompleteOnSelect = async (suggestion) => { // Note: it's fine that this uses json instead of safeJson since it's infrequent and user-initiated const data = await json('https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/find', { From 650dda7b61ab67c302f73a4bf2cb088975381138 Mon Sep 17 00:00:00 2001 From: Matt Walsh Date: Tue, 21 Oct 2025 04:12:12 +0000 Subject: [PATCH 2/2] allow for latLon only in query string #154 --- server/scripts/index.mjs | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/server/scripts/index.mjs b/server/scripts/index.mjs index 7391d8a..7f8ea9a 100644 --- a/server/scripts/index.mjs +++ b/server/scripts/index.mjs @@ -106,7 +106,7 @@ const init = async () => { // attempt to parse the url parameters const parsedParameters = parseQueryString(); - const loadFromParsed = parsedParameters.latLonQuery && parsedParameters.latLon; + const loadFromParsed = !!parsedParameters.latLon; // Auto load the parsed parameters and fall back to the previous query const query = parsedParameters.latLonQuery ?? localStorage.getItem('latLonQuery'); @@ -120,10 +120,20 @@ const init = async () => { if (geometry) { doRedirectToGeometry(geometry); } - } else if (query && latLon && !fromGPS) { - const txtAddress = document.querySelector(TXT_ADDRESS_SELECTOR); - txtAddress.value = query; - loadData(JSON.parse(latLon)); + } else if (latLon && !fromGPS) { + // update in-page search box if using cached data, or parsed parameter + if ((query && !loadFromParsed) || (parsedParameters.latLonQuery && loadFromParsed)) { + const txtAddress = document.querySelector(TXT_ADDRESS_SELECTOR); + txtAddress.value = query; + } + // use lat-long lookup if that's all that was provided in the query string + if (loadFromParsed && parsedParameters.latLon && !parsedParameters.latLonQuery) { + const { lat, lon } = JSON.parse(latLon); + getForecastFromLatLon(lat, lon, true); + } else { + // otherwise use pre-stored data + loadData(JSON.parse(latLon)); + } } if (fromGPS) { btnGetGpsClick();