diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index efb33da..8e324eb 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -384,13 +384,15 @@ function* uploadGpx({ file }: ReturnType) { editorSetGpx({ list: [ ...list, - ...gpx.map(item => ({ - enabled: true, - latlngs: item.latlngs, - color: getRandomColor(), - name: item.name || `Track #${list.length + 1}`, - id: uuid() as string, - })), + ...gpx + .filter(item => item.latlngs && item.latlngs.length) + .map(item => ({ + enabled: true, + latlngs: item.latlngs, + color: getRandomColor(), + name: item.name || `Track #${list.length + 1}`, + id: uuid() as string, + })), ], }) ); diff --git a/src/utils/gpx.ts b/src/utils/gpx.ts index 0e8f126..4134b8e 100644 --- a/src/utils/gpx.ts +++ b/src/utils/gpx.ts @@ -93,12 +93,16 @@ export const importGpxTrack = async (file: File) => { if (!gpx || !gpx.trk) return null; const latlngs: LatLng[] = gpx.trk.reduce((trk_res, trk) => { - return trk.trkseg.reduce((trkseg_res, trkseg) => { - return [ - ...trkseg_res, - ...trkseg.trkpt.map(pnt => ({ lat: pnt['$'].lat, lng: pnt['$'].lon })), - ]; - }, trk_res); + return trk.trkseg + ? trk.trkseg.reduce((trkseg_res, trkseg) => { + return trkseg.trkpt + ? [ + ...trkseg_res, + ...trkseg.trkpt.map(pnt => ({ lat: pnt['$'].lat, lng: pnt['$'].lon })), + ] + : trkseg_res; + }, trk_res) + : trk_res; }, []); return [