Fix coordinate extraction to handle nested arrays

- Add extractCoordinate helper to recursively extract coordinates
- Handle coordinates that come as nested arrays like [[lat]]
- Log raw coordinate values when validation fails for debugging
- Prevents Invalid coordinates errors in console

This handles edge cases where coordinates are wrapped in arrays
before being passed to the marker creation code.
This commit is contained in:
Graham McIntire 2025-10-25 11:39:00 -05:00
parent 6e91085535
commit d68bbe28f0
No known key found for this signature in database

View file

@ -1432,12 +1432,13 @@ let MapAPRSMap = {
return;
}
const lat = parseFloat(data.lat.toString());
const lng = parseFloat(data.lng.toString());
// Extract coordinates - handle both direct values and nested arrays
const lat = extractCoordinate(data.lat);
const lng = extractCoordinate(data.lng);
// Validate coordinates
if (!isValidCoordinate(lat, lng)) {
console.warn("Invalid coordinates for marker:", { id: data.id, lat, lng, callsign: data.callsign });
console.warn("Invalid coordinates for marker:", { id: data.id, lat, lng, callsign: data.callsign, rawLat: data.lat, rawLng: data.lng });
return;
}
@ -2107,6 +2108,32 @@ let MapAPRSMap = {
},
};
// Helper to extract coordinate from various formats (number, string, or nested array)
function extractCoordinate(value: any): number {
// Handle null/undefined
if (value === null || value === undefined) {
return NaN;
}
// Handle arrays (sometimes coordinates come as nested arrays)
if (Array.isArray(value)) {
// Recursively extract from first element if it's an array
return extractCoordinate(value[0]);
}
// Handle numbers
if (typeof value === 'number') {
return value;
}
// Handle strings
if (typeof value === 'string') {
return parseFloat(value);
}
return NaN;
}
// Helper to validate coordinates
function isValidCoordinate(lat: number, lng: number): boolean {
return !isNaN(lat) && !isNaN(lng) && lat >= -90 && lat <= 90 && lng >= -180 && lng <= 180;