SpeedLimitSection/utils/milepostsUtil.ts
src/ui/components/widgets/SpeedLimitSection/utils/milepostsUtil.tsunknown
typescript
a year ago
2.4 kB
12
Indexable
import _ from 'lodash'
export const checkOverlapMileposts = (
newSpeedLimit: any,
existingSpeedLimits: any[],
subdivision: string,
idSpeedLimitItem?: string
): boolean => {
// Get the speed limits within the same subdivision
const speedLimitsOfSameDivision = existingSpeedLimits?.filter(
item =>
item?.subdivision === subdivision &&
item?.temporary_speed_limit_id !== idSpeedLimitItem
)
// Append the new speed limit to the existing speed limit
const newSpeedLimits = [
...speedLimitsOfSameDivision,
{ start_mile: newSpeedLimit.startMile, end_mile: newSpeedLimit.endMile }
]
// Normalize the new speed limits
let normalizedSpeedLimits = newSpeedLimits.map(speedLimit => {
if (speedLimit.start_mile > speedLimit.end_mile) {
return {
start_mile: speedLimit.end_mile,
end_mile: speedLimit.start_mile
}
}
return speedLimit
})
// Sort speed limits by start mile
normalizedSpeedLimits.sort((a, b) => a.start_mile - b.start_mile)
// Check for overlaps
for (let i = 0; i < normalizedSpeedLimits.length - 1; i++) {
if (
normalizedSpeedLimits[i].end_mile >
normalizedSpeedLimits[i + 1].start_mile
) {
return false
}
}
return true
}
export const checkInvalidMileposts = (
newSpeedLimit: { startMile: number; endMile: number },
startLimit: string,
endLimit: string
): boolean => {
const { startMile, endMile } = newSpeedLimit
const startLimitNum = Number(startLimit)
const endLimitNum = Number(endLimit)
if (startMile === undefined || endMile === undefined) {
return true
}
return !(
(startLimitNum < endLimitNum &&
startMile <= endMile &&
startMile >= startLimitNum &&
endMile <= endLimitNum) ||
(startLimitNum > endLimitNum &&
startMile >= endMile &&
startMile <= startLimitNum &&
endMile >= endLimitNum)
)
}
export const getWholeMileposts = (trackCoordinatesData: any[]) => {
// Get unique track coords by milepost and lat, lng
const uniqueTrackCoords = _.uniqBy(trackCoordinatesData, coord =>
[
coord.milepost,
coord.gps_coordinates.lat,
coord.gps_coordinates.lng
].join()
)
const wholeMilepostTrackCoords = uniqueTrackCoords.filter(
(coord: any) => coord.milepost % 10 === 0
)
return wholeMilepostTrackCoords
}
Editor is loading...
Leave a Comment