fix: Correct MultiPolygon coordinate flattening for fitBounds

MultiPolygon coordinates need .flat(2) not .flat(1) to get actual
coordinate pairs. With flat(1), we were iterating over rings instead
of coordinates, causing invalid lat values > 90.

Also added bounds validation before fitBounds to catch future issues.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Matt 2026-05-02 05:01:02 +00:00
commit 3158537488

View file

@ -2401,7 +2401,7 @@ const MapView = forwardRef(function MapView(_, ref) {
try {
const coords = boundaryGeometry.type === 'Polygon'
? boundaryGeometry.coordinates[0]
: boundaryGeometry.coordinates.flat(1)
: boundaryGeometry.coordinates.flat(2)
if (coords.length > 0) {
let minLng = Infinity, maxLng = -Infinity, minLat = Infinity, maxLat = -Infinity
@ -2411,11 +2411,17 @@ const MapView = forwardRef(function MapView(_, ref) {
if (lat < minLat) minLat = lat
if (lat > maxLat) maxLat = lat
}
map.fitBounds([[minLng, minLat], [maxLng, maxLat]], {
padding: 50,
duration: 700,
maxZoom: 16,
})
// Validate bounds before fitting
if (minLng >= -180 && maxLng <= 180 && minLat >= -90 && maxLat <= 90 &&
minLng < maxLng && minLat < maxLat) {
map.fitBounds([[minLng, minLat], [maxLng, maxLat]], {
padding: 50,
duration: 700,
maxZoom: 16,
})
} else {
console.warn('Invalid bounds:', { minLng, maxLng, minLat, maxLat })
}
}
} catch (e) {
console.warn('fitBounds error:', e)