From 8688fbdce2552585ff2fa828da0cd989e777eb01 Mon Sep 17 00:00:00 2001 From: "Johannes.Goltz" Date: Mon, 15 Jun 2026 09:59:10 +0200 Subject: [PATCH 1/2] GoogleAddressProvider now handles more API variants for location requests --- ...o-tools-react-6582ffe5-6858-4b66-9546-d92b561112ee.json | 7 +++++++ packages/itwin/geo-tools/src/GoogleAddressProvider.ts | 6 ++++-- 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 change/@itwin-geo-tools-react-6582ffe5-6858-4b66-9546-d92b561112ee.json diff --git a/change/@itwin-geo-tools-react-6582ffe5-6858-4b66-9546-d92b561112ee.json b/change/@itwin-geo-tools-react-6582ffe5-6858-4b66-9546-d92b561112ee.json new file mode 100644 index 0000000000..467e06a174 --- /dev/null +++ b/change/@itwin-geo-tools-react-6582ffe5-6858-4b66-9546-d92b561112ee.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "GoogleAddressProvider does not always resolve location requests correctly. Now handling different API variants", + "packageName": "@itwin/geo-tools-react", + "email": "Johannes.Goltz@bentley.com", + "dependentChangeType": "patch" +} diff --git a/packages/itwin/geo-tools/src/GoogleAddressProvider.ts b/packages/itwin/geo-tools/src/GoogleAddressProvider.ts index dbe3bcbd1a..05d28cc64b 100644 --- a/packages/itwin/geo-tools/src/GoogleAddressProvider.ts +++ b/packages/itwin/geo-tools/src/GoogleAddressProvider.ts @@ -73,8 +73,10 @@ export class GoogleAddressProvider implements AddressProvider { } }); const json: any = await response.json(); - const lat = json?.location?.geometry?.latitude - const long = json?.location?.geometry?.longitude + // Accept either top-level `location`, nested geometry paths depending on API variant + // or original code + const lat = json?.location?.latitude ?? json?.result?.geometry?.location?.lat ?? json?.location?.geometry?.latitude; + const long = json?.location?.longitude ?? json?.result?.geometry?.location?.lng ?? json?.location?.geometry?.longitude; if (lat === undefined || long === undefined) { throw new Error("Invalid location data"); } From b7a8e75e363c7bff11ffd3db44e959257cb32d5e Mon Sep 17 00:00:00 2001 From: "Johannes.Goltz" Date: Mon, 15 Jun 2026 14:43:44 +0200 Subject: [PATCH 2/2] Comments on api responses added --- .../geo-tools/src/GoogleAddressProvider.ts | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/itwin/geo-tools/src/GoogleAddressProvider.ts b/packages/itwin/geo-tools/src/GoogleAddressProvider.ts index 05d28cc64b..634dee45b0 100644 --- a/packages/itwin/geo-tools/src/GoogleAddressProvider.ts +++ b/packages/itwin/geo-tools/src/GoogleAddressProvider.ts @@ -73,10 +73,19 @@ export class GoogleAddressProvider implements AddressProvider { } }); const json: any = await response.json(); - // Accept either top-level `location`, nested geometry paths depending on API variant - // or original code - const lat = json?.location?.latitude ?? json?.result?.geometry?.location?.lat ?? json?.location?.geometry?.latitude; - const long = json?.location?.longitude ?? json?.result?.geometry?.location?.lng ?? json?.location?.geometry?.longitude; + // Google Address Validation API response shape: { location: { latitude, longitude } } + // @see https://developers.google.com/maps/documentation/address-validation/reference/rest/v1/TopLevel/validateAddress#Location + const lat = json?.location?.latitude + // Google Geocoding API response shape: { result: { geometry: { location: { lat, lng } } } } + // @see https://developers.google.com/maps/documentation/geocoding/requests-geocoding#Results + ?? json?.result?.geometry?.location?.lat + // Legacy/wrapper format: { location: { geometry: { latitude, longitude } } } + ?? json?.location?.geometry?.latitude; + + const long = json?.location?.longitude + ?? json?.result?.geometry?.location?.lng + ?? json?.location?.geometry?.longitude; + if (lat === undefined || long === undefined) { throw new Error("Invalid location data"); }