{"version":3,"sources":["partials/result-aside.js","enums/pages.js","components/prevSettings.js","reducers/rover.js","reducers/fieldResult.js","reducers/field.js","reducers/obstacles.js","reducers/trajectoryPoints.js","reducer.js","action.js","Points-Result.js","Field-Result.js","Obstacles-Result.js","partials/rover-svg.js","components/cardButton.js","components/asideLayout.js","components/input.js","components/checkbox.js","components/modal.js","modals/routePlaningInfo.js","modals/roverExtendedOptions.js","enums/validationType.js","Rover.js","mapComponent/mapContext.js","mapComponent/map.js","mapComponent/layers.js","mapComponent/tileLayer.js","mapComponent/vectorLayer.js","mapComponent/interaction.js","partials/input-map1.js","components/mapButton.js","modals/defineFieldGeometryInfo.js","modals/defineFieldRowsInfo.js","Field.js","modals/defineAreaPrecisionInfo.js","Obstacles.js","Points.js","errors/404.jsx","errors/500.jsx","components/errorBoundary.js","App.js","index.js","enums/drawState.js","constants/actionTypes.js","enums/pointType.js","store.js","components/alert.js","partials/result-map.js","agent.js"],"names":["widthStyle","width","ResultAside","props","linkItems","onResetAnimationClick","setState","actualTrajectoryPointNo","actualPointCallback","bind","showAnimationClick","handleClick","popper","popperButton","state","loaded","points","showAnimationSpeed","animationSpeed","nextProps","this","selected","document","getElementById","scrollIntoView","showAnimation","e","target","result","Lat","Lon","startPointDegrees","startPoint","olProj","Array","isArray","length","toFixed","startCoordinates","getStartCoordinatesInDegrees","className","onClick","type","setAnimationSpeed","onPlayAnimationClick","onAnimationStopClick","id","ref","instance","style","position","anchorEl","placement","arrowProps","htmlFor","value","min","max","step","onChange","src","alt","setRef","map","item","index","clickPointCallback","to","link","img","height","name","React","Component","Pages","Rover","Field","FieldResult","Obstacles","ObstaclesResult","Points","PointsResult","Page404","Page500","PrevSettings","children","react","PrevSettingsContent","header","PrevSettingsItem","unit","rover","action","SET_ROVER","wheelDistance","payload","turningRadius","positionOfRotationAxis","positionOfGnsReceiver","fieldResult","FIELD_RESULT_PAGE_LOADED","FIELD_RESULT_PAGE_UNLOADED","field","SET_FIELD","rowsDistance","rowsAngle","aroundPerimeter","start","undefined","end","areaPolygon","captcha","RESET_FIELD_MAP","obstacles","SET_OBSTACLES","precision","RESET_OBSTACLES_MAP","REMOVE_OBSTACLES","filter","o","Id","trajectoryPoints","SET_POINTS","RESET_POINTS_MAP","REMOVE_POINTS","p","combineReducers","roverAdded","fieldAdded","fieldMapReseted","obstaclesAdded","obstaclesRemoved","obstaclesMapReseted","pointAdded","pointRemoved","pointsMapReseted","pointsLoaded","Promise","global","aside","resultMap","useState","setLoaded","store","getState","areRoverDataComplete","arePointsDataCompleted","redirect","setRedirect","error","setError","getPoinsCount","pointsCount","useEffect","all","getTrajectoryPoints","then","values","console","log","errorDetail","dispatch","JSON","parse","catch","message","loadData","title","ReactGA","send","hitType","page","window","location","pathname","mapLoader","wayPoints","linesBetweenPoints","role","drawAnimation","pauseAnimation","redrawAnimation","speed","variant","areFieldDataCompleted","OptimalTrajectory","resetAnimation","areObstaclesDataCompleted","polygons","RoverSvg","version","xmlns","xmlnsXlink","x","y","viewBox","enableBackground","xmlSpace","dangerouslySetInnerHTML","__html","transform","cx","cy","r","d","opacity","fill","fillOpacity","strokeWidth","textAnchor","CardButton","label","linkTo","preventDefault","AsideLayout","inputWIdth","Input","placeholder","inputClassName","showValidationFeedback","Checkbox","checked","Modal","show","hideAction","tabIndex","display","stopPropagation","RoutePlaningInfoModal","handleClickOutside","addEventListener","removeEventListener","RoverExtendedOptionsModal","ValidationType","NumberGreaterThanZero","NumberGreaterThanZeroOrZero","NumberGreaterThanZeroOrZeroOrEmpty","MandatoryText","fields","setFields","errors","setErrors","showRoutePlaningInfoModal","setShowRoutePlaningInfoModal","extendedOptionsToggler","setExtendedOptionsToggler","showRoverExtendedOptionsModal","setShowRoverExtendedOptionsModal","processNumber","handleValidation","checkValueIsSetOrAddError","checkLowerThanLength","propertyName","validationType","isNaN","parseFloat","isObjectEmpty","obj","Object","keys","getPrototypeOf","prototype","unsubscribe","subscribe","IsReady","testRequests","areRoverDataAlreadySet","isValid","enabled","MapContext","createContext","Map","zoom","center","onSetZoom","onSetMap","extent","projection","activeTool","mapRef","useRef","setMap","mapOptions","options","view","ol","layers","controls","control","attribution","rotate","overlays","mapObject","getView","getZoom","on","key","setTarget","current","setCenter","Provider","includes","Layers","TileLayer","source","zIndex","useContext","tileLayer","OLTileLayer","addLayer","setZIndex","removeLayer","VectorLayer","vectorLayer","OLVectorLayer","Interaction","drawSource","deletePreviousPolygonCallback","draw","point","drawState","START","END","POINTS","olInteraction","maxPoints","condition","originalEvent","buttons","addInteraction","removeInteraction","InputMap1","drawStateHandler","drawScenario","removeScenario","getFeatureIdBystate","getPreventUnorientedPoint","displaySource","displayLineSource","addFeatureKey","init","hadDrawnItems","hasDrawnItems","tryGetLastZoom","maxDrawZoom","onZoomChanged","removeMarkerItem","text","classname","callback","removeItem","noActionitem","contextMenuItems","contextmenu","lastUserLocationSet","NONE","addFeature","beforeFeatureAddedKey","beforeFeatureAdded","setLocationFromBrowserIfNeeded","hasNoDrawnItems","clear_inputs","redrawLinesBetweenPonts","hasDrawItems","getLocation","mapCenter","isInDrawPointState","isInDrawPolygonState","displayLineStyleFunction","displayStyleFunction","Cookies","set","stringify","path","sameSite","lastZoom","get","navigator","geolocation","getCurrentPosition","setCurrentPosition","cookies","lon","coords","longitude","lat","latitude","proj","lotlan","locationString","AREAPOLYGON","OBSTACLES","val","initialSet","setLastZoom","draw_inputs","setTimeout","fit","getSize","newZoom","setZoom","ContextMenu","addControl","onContext","featureId","data","feature","id_","getFeatureById","removeFeature","drawStateContext","evt","forEachFeatureAtPixel","pixel","ft","clear","removeMakerItemCopy","classame","extend","getDefaultItems","push","draw_input_polygon","draw_input_point","polygon","get_map_position","getFeatures","getExtent","rotation","Math","atan2","VectorY","VectorX","Feature","geometry","geom","setId","isInput","pointType","PointType","DrawStateContext","coordinates","set_polygon_style","setStyle","stroke","color","afterFeatureAdded","removeOldPolygon","getGeometry","flatCoordinates","uuid","getCoordinates","diff_x","diff_y","ext_x","ext_y","dx","dy","unorientedPoint","TRANSIT","UNORIENTED","removeOldPoint","setLastUserLocation","lastPoint","allPoints","myId","doNotAutochangeState","pos","styles","values_","image","getIconByPointType","rotateWithView","lineDash","lineDashOffset","myPointType","MapButton","isActive","disabled","active","DefineFieldGeometryModal","DefineFieldRowsModal","initAroundPerimeter","getAreFieldDataCompleted","rowsLinesOnly","MOVEMAP","actualDrawState","setactualDrawState","showModalDefineFieldGeometry","setShowModalDefineFieldGeometry","showModalDefineFieldRows","setShowModalDefineFieldRows","isZoomedToDraw","setIsZoomedToDraw","hideZoomedToDrawWarning","setHideZoomedToDrawWarning","captchaImg","setCaptchaImg","loadImage","getInitialDrawState","formFields","areFieldDataAlreadySet","myactualDrawState","isFeatureDone","maxLength","onKeyPress","charCode","generateRoute","class","objectPropsHasValues","a","processCaptcha","stepState","number","response","fetch","mode","credentials","status","blob","URL","createObjectURL","DefineAreaPrecisionModal","getAreObstaclesDataCompleted","setActualDrawState","showDefineAreaPrecisionModal","setShowDefineAreaPrecisionModal","setObstacleOrAreaPolygon","areObstaclesDataAlreadySet","routePlanningEnabled","myDrawState","obstaclesReduxState","formIsValid","getArePointsDataCompleted","arePointsDataAlreadySet","concat","PageNotFound","href","InternalServerError","rel","ErrorBoundary","hasError","errorInfo","App","handleAcceptCookie","initialize","getCookieConsentValue","exact","component","overlay","onAccept","onDecline","remove","overlayStyle","click","createStore","reducer","ReactDOM","render","StrictMode","comparedDrawState","Alert","variantClass","ResultMap","delay","ms","res","createRef","overlayRef","transfromTrajectoryPoints","sourceLine","vectorLine","sourceLineToChosenPoint","vectorLineToChosenPoint","displayVectorLayer","movementLayer","polygonSource","polygonVectorLayer","vectorSource","animationSource","inAnimation","pause","animationStep","animationDelay","animationDelayEveryNTh","draw_movement_route_to_point","transformedPoints","forEach","pointCoords","startPointTransformed","transformedCoords","transformPointToESPG3857Units","transformedCircleCenter","relativeLon","relativeLat","toDegrees","sin","DEFAULT_RADIUS","middleLatRadius","cos","toRadians","angle","PI","draw_movement_animation","skipAnimation","raster","layer","displayLineLayer","Mp","renderer","View","set_map_position","draw_movement_route","dataExtent","wayPoint","start_point","end_point","circle","turn_direction","line_style","return_points","translation","start_recalc","end_recalc","arg_start_recalc","calculate_argument","arg_end_recalc","turning_angle","calc_turning_angle","radius","calc_point_distance","nmb_of_dots","get_count_of_arc_points","rot_angle_init","get_arc_points","featureLine","atan","sqrt","pow","movement_points","line_width","draw_movement","toPointNo","firstCall","tryClearRouteToPoint","line_to_chosen_point_style","getSource","drawedPointsNo","i","skipPointIfDistanceToNextPointIsLessThan1cm","draw_line","draw_arc","speedString","round","animationWasResumed","actualAnimationstep","circleAnimationStep","vector","vector_norm","actual_point","j","floor","resolveAfterMs","nextPoint","calculatedStep","AnimationDelay","radius_of_circle","angle_step","abs","actual_point_recalc","rot_matrix","resolve","rot_angle","length_of_arc","superagent","superagentPromise","_superagent","responseBody","body","optimalTrajectoryRequests","url","radiusMiddle","startLon","startLat","startVectX","startVectY","endLon","endLat","endVectX","endVectY","query","captchaText","lineDistance","lineAngle","withCredentials","startTransformed","distanceFromRefPoint1","endTransformed","startVectorTransformed","endVectorTransformed","pointsArrayToDistancesFromRefPoint","lonMeters","latMeters","pointsRequests","pointsArray","pointTransformed","vectorTransformed","pointsToDistanceFromRefPointArray","obstaclesRequests","refPoint","obstacle","cooridinate","obstaclesToDistanceFromRefPointArray","middleLon","refPontTransformedLat","pointTransformedLat","middleLat","refPontTransformedLon","pointTransformedLon","getDistance","array","transformedArray","transformedPoint","isReadyRequests","timeout","deadline"],"mappings":"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","file":"static/js/main.7f22083f.chunk.js","sourcesContent":["import React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Popper } from 'react-popper';\r\nimport * as olProj from 'ol/proj';\r\n\r\nconst initAnimationSpeed = 1;\r\nconst widthStyle = {width:\"350px\"};\r\n\r\nclass ResultAside extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.linkItems = props.linkItems //link, btn, text\r\n this.onResetAnimationClick = () => { props.onResetAnimationClick(); this.setState({ actualTrajectoryPointNo: 0 }); }\r\n this.actualPointCallback = this.actualPointCallback.bind(this);\r\n this.showAnimationClick = this.showAnimationClick.bind(this);\r\n this.handleClick = this.handleClick.bind(this);\r\n\r\n this.popper = null;\r\n this.popperButton = null;\r\n\r\n this.state = {\r\n loaded: props.loaded,\r\n points: props.points,\r\n actualTrajectoryPointNo: props.actualTrajectoryPointNo,\r\n showAnimationSpeed: false,\r\n animationSpeed: initAnimationSpeed\r\n };\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (this.state.loaded !== nextProps.loaded)\r\n this.setState({ loaded: nextProps.loaded, points: nextProps.points });\r\n else if (this.state.actualTrajectoryPointNo !== nextProps.actualTrajectoryPointNo)\r\n this.setState({ actualTrajectoryPointNo: nextProps.actualTrajectoryPointNo });\r\n }\r\n\r\n actualPointCallback(actualTrajectoryPointNo) {\r\n this.setState({\r\n actualTrajectoryPointNo: actualTrajectoryPointNo,\r\n });\r\n\r\n let selected = document.getElementById('selected');\r\n if (selected)\r\n selected.scrollIntoView();\r\n }\r\n\r\n showAnimationClick() {\r\n let showAnimation = this.state?.showAnimationSpeed;\r\n this.setState({ showAnimationSpeed: !showAnimation });\r\n }\r\n\r\n handleClick (e) {\r\n if (this?.popper === e.target || this?.popperButton === e.target) {\r\n // inside click\r\n return;\r\n }\r\n this.setState({\r\n showAnimationSpeed: false,\r\n });\r\n };\r\n\r\n getStartCoordinatesInDegrees() {\r\n let result = {Lat:0, Lon: 0}\r\n let startPointDegrees = this.props?.startPoint ? olProj.transform([this.props.startPoint.Lon, this.props.startPoint.Lat], 'EPSG:3857', 'EPSG:4326') : null;\r\n result.Lat = Array.isArray(startPointDegrees) && startPointDegrees.length === 2? (startPointDegrees[1]).toFixed(7): null;\r\n result.Lon = Array.isArray(startPointDegrees) && startPointDegrees.length === 2? (startPointDegrees[0]).toFixed(7): null;\r\n return result;\r\n }\r\n\r\n render() {\r\n let startCoordinates = this.getStartCoordinatesInDegrees()\r\n\r\n return <>\r\n {/* [BLOCK] Aside */}\r\n
\r\n
\r\n
\r\n

\r\n Result\r\n

\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n {this.state.showAnimationSpeed && \r\n \r\n {({ ref, style, placement, arrowProps }) => (\r\n
\r\n
\r\n { \r\n if (this.props?.setAnimationSpeed)\r\n this.props.setAnimationSpeed(e.target.value);\r\n this.setState({animationSpeed:e.target.value});\r\n } \r\n } \r\n ref={instance => { this.popper = instance; }} \r\n />\r\n
Low({this.state.animationSpeed}x)High
\r\n
\r\n
\r\n )}\r\n
}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Start-point icon\r\n
\r\n
\r\n
Latitude:
\r\n {startCoordinates.Lat} \r\n
\r\n
\r\n
Longitude:
\r\n {startCoordinates.Lon}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.state.loaded\r\n && this.state.points\r\n && this.state.points.map((item, index) =>\r\n {\r\n if (this.props.clickPointCallback) {\r\n //\r\n this.props.clickPointCallback(index + 1);\r\n this.setState({ actualTrajectoryPointNo: index })\r\n }\r\n }\r\n }\r\n >\r\n \r\n \r\n \r\n {item[2] === 0 && }\r\n {item[2] === 1 && }\r\n {item[2] === -1 && }\r\n \r\n )}\r\n \r\n
\r\n NorthEastDirection
{index}{item[1]} m{item[0]} m
\r\n
\r\n
\r\n
\r\n
\r\n {this.linkItems\r\n && this.linkItems.map((item, index) =>\r\n \r\n {`${item.alt}`}\r\n
\r\n
{`${item.name}`}
\r\n
\r\n \r\n )}\r\n
\r\n
\r\n
\r\n \r\n }\r\n};\r\n\r\nexport default ResultAside;","//todo remove\r\nconst Pages = {\r\n\tRover: \"/\",\r\n\tField : \"Field\",\r\n\tFieldResult : \"Field-Result\",\r\n\tObstacles : \"Obstacles\",\r\n\tObstaclesResult : \"Obstacles-Result\",\r\n\tPoints : \"Points\",\r\n\tPointsResult : \"Points-Result\",\r\n\tPage404 : \"errors/404\",\r\n\tPage500 : \"errors/500\"\r\n }\r\n\r\n export default Pages;","import react from 'react';\r\nimport {Link} from 'react-router-dom';\r\n\r\nexport class PrevSettings extends react.Component {\r\n render() {\r\n return
\r\n {this.props.children}\r\n
\r\n }\r\n}\r\n\r\nexport class PrevSettingsContent extends react.Component {\r\n constructor(props) {\r\n super(props);\r\n // this.props = props;\r\n // this.store = props.store;\r\n // let roverDataCompleted = this.store.getState().rover.length && this.store.getState().rover.turningRadius && this.store.getState().rover.wheelDistance;\r\n this.state = { header: props.header, link: props.link };\r\n }\r\n\r\n render() {\r\n return
\r\n
\r\n
{this.state.header}
\r\n Edit\r\n
\r\n
\r\n {this.props.children}\r\n
\r\n
\r\n }\r\n}\r\n\r\nexport class PrevSettingsItem extends react.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = { name: props.name, value: props.value, unit: props.unit };\r\n }\r\n\r\n render() {\r\n return <>\r\n
\r\n {this.state.name}:\r\n
\r\n
\r\n {this.state.value} {this.state.unit}\r\n
\r\n \r\n }\r\n}\r\n\r\n\r\n/*
\r\n
\r\n
\r\n
Rover
\r\n Edit\r\n
\r\n
\r\n

Wheel Distance: {this.store.getState().rover.wheelDistance} m

\r\n

Length: {this.store.getState().rover.length} m

\r\n

Turning radius: {this.store.getState().rover.turningRadius} m

\r\n
\r\n
\r\n
*/\r\n\r\n\r\n/*class App extends React.Component{\r\n constructor(props) {\r\n super(props);\r\n this.store = props.store;\r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n
\r\n \"GNSS\r\n \"Navmatix\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default App;*/\r\n\r\n\r\n\r\n","import {\n SET_ROVER,\n} from '../constants/actionTypes';\n\nconst rover = (state = {}, action) => {\n switch (action.type) {\n case SET_ROVER:\n return {\n ...state,\n wheelDistance: action.payload.rover?.wheelDistance ?? state.wheelDistance,\n length: action.payload.rover?.length ?? state.length,\n turningRadius: action.payload.rover?.turningRadius ?? state.turningRadius,\n positionOfRotationAxis: action.payload.rover?.positionOfRotationAxis ?? state.positionOfRotationAxis,\n positionOfGnsReceiver: action.payload.rover?.positionOfGnsReceiver ?? state.positionOfGnsReceiver\n };\n default:\n return state;\n }\n};\n\nexport default rover;","import { FIELD_RESULT_PAGE_LOADED, FIELD_RESULT_PAGE_UNLOADED } from '../constants/actionTypes';\r\n\r\nconst fieldResult = (state = {}, action) => {\r\n switch (action.type) {\r\n case FIELD_RESULT_PAGE_LOADED:\r\n return {\r\n ...state,\r\n points: action.payload.points\r\n };\r\n case FIELD_RESULT_PAGE_UNLOADED:\r\n return {};\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default fieldResult;\r\n","import {\r\n SET_FIELD,\r\n RESET_FIELD_MAP\r\n} from '../constants/actionTypes';\r\n\r\nconst field = (state = {}, action) => {\r\n switch (action.type) {\r\n case SET_FIELD:\r\n return {\r\n ...state,\r\n rowsDistance: action.payload.field?.rowsDistance ?? state.rowsDistance,\r\n rowsAngle: action.payload.field?.rowsAngle ?? state.rowsAngle,\r\n aroundPerimeter: action.payload.field?.aroundPerimeter ?? state.aroundPerimeter,\r\n start: action.payload?.field.start === undefined ? state.start:action.payload?.field.start,\r\n end: action.payload?.field.end === undefined ? state.end:action.payload?.field.end,\r\n areaPolygon: action.payload?.field.areaPolygon === undefined ? state.areaPolygon:action.payload?.field.areaPolygon,\r\n captcha: action.payload?.field.captcha ?? state.captcha\r\n };\r\n case RESET_FIELD_MAP:\r\n return {\r\n ...state,\r\n areaPolygon: null,\r\n start: null,\r\n end: null,\r\n }; \r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default field;","import {\n SET_OBSTACLES,\n RESET_OBSTACLES_MAP,\n REMOVE_OBSTACLES\n} from '../constants/actionTypes';\n\nconst obstacles = (state = {obstacles:[]}, action) => {\n switch (action.type) {\n case SET_OBSTACLES:\n return {\n ...state,\n obstacles: action.payload.obstacles.obstacles? [...state.obstacles, action.payload.obstacles.obstacles]: state.obstacles,\n start: action.payload.obstacles.start ?? state.start,\n end: action.payload.obstacles.end ?? state.end,\n areaPolygon: action.payload.obstacles.areaPolygon ?? state.areaPolygon,\n precision: action.payload.obstacles.precision ?? state.precision,\n captcha: action.payload.obstacles.captcha ?? state.captcha,\n };\n case RESET_OBSTACLES_MAP:\n return {\n ...state,\n areaPolygon: null,\n start: null,\n end: null,\n obstacles: []\n }; \n case REMOVE_OBSTACLES:\n return {\n ...state,\n obstacles: action.payload.id? state.obstacles.filter(o => o.Id !== action.payload.id): state.obstacles\n }; \n default:\n return state;\n }\n};\n\nexport default obstacles;","import {\n SET_POINTS,\n RESET_POINTS_MAP,\n REMOVE_POINTS\n} from '../constants/actionTypes';\n\nconst trajectoryPoints = (state = {points:[]}, action) => {\n switch (action.type) {\n case SET_POINTS:\n return {\n ...state,\n points: action.payload.points.points? [...state.points, action.payload.points.points]: state.points,\n start: action.payload.points.start === undefined ? state.start : action.payload.points.start,\n end: action.payload.points.end === undefined ? state.end : action.payload.points.end,\n captcha: action.payload.points.captcha === undefined ? state.captcha : action.payload.points.captcha\n };\n case RESET_POINTS_MAP:\n return {\n ...state,\n points: [],\n start: null,\n end: null,\n captcha: null\n };\n case REMOVE_POINTS:\n return {\n ...state,\n points: action.payload.id? state.points.filter(p => p.Id !== action.payload.id): state.points\n }; \n default:\n return state;\n }\n};\n\nexport default trajectoryPoints;","import { combineReducers } from 'redux';\nimport rover from './reducers/rover';\nimport fieldResult from './reducers/fieldResult';\nimport field from './reducers/field';\nimport obstacles from './reducers/obstacles';\nimport trajectoryPoints from './reducers/trajectoryPoints';\n\nexport default combineReducers({\n rover,\n fieldResult,\n field,\n obstacles,\n trajectoryPoints\n});\n","import {\r\n SET_ROVER,\r\n SET_FIELD,\r\n RESET_FIELD_MAP,\r\n SET_OBSTACLES,\r\n REMOVE_OBSTACLES,\r\n RESET_OBSTACLES_MAP,\r\n SET_POINTS,\r\n REMOVE_POINTS,\r\n RESET_POINTS_MAP,\r\n FIELD_RESULT_PAGE_LOADED\r\n} from './constants/actionTypes';\r\n\r\n//ROVER\r\nexport const roverAdded = rover => ({\r\n type: SET_ROVER,\r\n payload: {\r\n rover\r\n }\r\n})\r\n\r\n//FIELD\r\nexport const fieldAdded = field => ({\r\n type: SET_FIELD,\r\n payload: {\r\n field\r\n }\r\n})\r\n\r\nexport const fieldMapReseted = field => ({\r\n type: RESET_FIELD_MAP\r\n})\r\n\r\n//OBSTACLES\r\nexport const obstaclesAdded = obstacles => ({\r\n type: SET_OBSTACLES,\r\n payload: {\r\n obstacles\r\n }\r\n})\r\n\r\nexport const obstaclesRemoved = id => ({\r\n type: REMOVE_OBSTACLES,\r\n payload: {\r\n id\r\n }\r\n})\r\n\r\nexport const obstaclesMapReseted = obstacles =>({\r\n type: RESET_OBSTACLES_MAP\r\n})\r\n\r\n//POINTS\r\nexport const pointAdded = points => ({\r\n type: SET_POINTS,\r\n payload: {\r\n points\r\n }\r\n})\r\n\r\nexport const pointRemoved = id => ({\r\n type: REMOVE_POINTS,\r\n payload: {\r\n id\r\n }\r\n})\r\n\r\nexport const pointsMapReseted = points => ({\r\n type: RESET_POINTS_MAP\r\n})\r\n\r\nexport const pointsLoaded = points => ({\r\n type: FIELD_RESULT_PAGE_LOADED,\r\n payload: {\r\n points\r\n }\r\n})","import React, { useEffect } from 'react';\r\nimport { Points } from './agent';\r\nimport store from './store';\r\nimport { pointsLoaded } from './action';\r\nimport ResultMap from './partials/result-map';\r\nimport { Redirect } from \"react-router-dom\";\r\nimport ResultAside from \"./partials/result-aside\";\r\nimport Pages from './enums/pages';\r\nimport { PrevSettings, PrevSettingsContent, PrevSettingsItem } from './components/prevSettings';\r\nimport Alert from './components/alert';\r\nimport ReactGA from \"react-ga4\";\r\n\r\nconst Promise = global.Promise;\r\n\r\nexport default function PointsResult(props) {\r\n let aside = null;\r\n let resultMap = null;\r\n const [loaded, setLoaded] = React.useState(false);\r\n const [redirect, setRedirect] = React.useState(areRoverDataComplete() ? (arePointsDataCompleted() ? Pages.PointsResult : Pages.Points) : Pages.Rover);\r\n const [error, setError] = React.useState(null);\r\n const [pointsCount] = React.useState(getPoinsCount());\r\n\r\n function areRoverDataComplete() {\r\n let rover = props.store.getState().rover;\r\n return rover.length && rover.turningRadius && rover.wheelDistance;\r\n }\r\n\r\n function arePointsDataCompleted() {\r\n let trajectoryPoints = props.store.getState().trajectoryPoints;\r\n return trajectoryPoints.points.length > 0 && trajectoryPoints.start && trajectoryPoints.end;\r\n }\r\n\r\n function getPoinsCount() {\r\n let trajectoryPoints = props.store.getState().trajectoryPoints;\r\n return trajectoryPoints?.points && trajectoryPoints.points.length > 0 ? trajectoryPoints.points.length : 0\r\n }\r\n\r\n useEffect(() => {\r\n if (redirect === Pages.PointsResult)\r\n loadData();\r\n document.title = \"Points Result | Route Planning\"; \r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n useEffect(() => {\r\n ReactGA.send({ hitType: \"pageview\", page: window.location.pathname });\r\n }, []);\r\n\r\n //rendering section\r\n if (redirect === Pages.PointsResult) {\r\n let map;\r\n let mapLoader;\r\n let trajectoryPoints = props.store.getState().trajectoryPoints;\r\n\r\n if (loaded) {\r\n map = { resultMap = instance; }}\r\n linesBetweenPoints={false}\r\n actualPointCallback={onChangeActualPoint}\r\n />;\r\n } else {\r\n mapLoader = <>\r\n \r\n ;\r\n }\r\n\r\n let linkItems = [\r\n { link: Pages.Field, img: \"btn-field.png\", alt: \"Fill a field\", name: \"Field\" },\r\n { link: Pages.Obstacles, img: \"btn-obstacles.png\", alt: \"Find the best route\", name: \"Obstacles\" }\r\n ];\r\n\r\n let positionOfRotationAxis = props.store.getState().rover.positionOfRotationAxis;\r\n let positionOfGnsReceiver = props.store.getState().rover.positionOfGnsReceiver;\r\n\r\n return <>\r\n {!loaded && !error &&
\r\n
\r\n Loading...\r\n
\r\n
}\r\n\r\n {!loaded && error &&
\r\n
\r\n \r\n

Something went wrong...

\r\n \r\n
\r\n
}\r\n\r\n {/* [BLOCK] Map TODO wheel distance*/}\r\n
\r\n {loaded ? map : mapLoader}\r\n \r\n \r\n \r\n \r\n \r\n {positionOfRotationAxis && }\r\n {positionOfGnsReceiver && }\r\n \r\n \r\n \r\n \r\n \r\n
\r\n { aside = instance; }}\r\n clickPointCallback={onClickPointCallback}\r\n setAnimationSpeed={onSetAnimationSpeed}\r\n />\r\n
\r\n {error && { setRedirect(Pages.Points); }} variant='danger'>{error}}\r\n
\r\n \r\n }\r\n else {\r\n return \r\n }\r\n\r\n //other functions:\r\n function loadData() {\r\n let trajectoryPoints = props.store.getState().trajectoryPoints;\r\n\r\n let rover = props.store.getState().rover;\r\n Promise.all([Points.getTrajectoryPoints(\r\n trajectoryPoints,\r\n rover\r\n )]).then((values) => {\r\n\r\n if (values[0].error) {\r\n console.log(values[0].errorDetail);\r\n setError(`${values[0].error}`);\r\n }\r\n else {\r\n store.dispatch(pointsLoaded({ points: JSON.parse(values[0].points) }));\r\n setLoaded(true);\r\n // this.forceUpdate();\r\n }\r\n })\r\n .catch(error => {\r\n setRedirect(Pages.Page500);\r\n console.error(error.message);\r\n });\r\n }\r\n function onPlayAnimationClick() {\r\n resultMap.drawAnimation();\r\n }\r\n function onAnimationStopClick() {\r\n resultMap.pauseAnimation();\r\n }\r\n function onResetAnimationClick() {\r\n resultMap.redrawAnimation();\r\n if (aside?.actualPointCallback)\r\n aside.actualPointCallback(0);\r\n }\r\n function onSetAnimationSpeed(speed) {\r\n resultMap.setAnimationSpeed(speed);\r\n }\r\n function onClickPointCallback(index) {\r\n resultMap.clickPointCallback(index);\r\n }\r\n function onChangeActualPoint(index) {\r\n if (aside?.actualPointCallback)\r\n aside.actualPointCallback(index);\r\n }\r\n};","import React, { useEffect } from 'react';\r\nimport { OptimalTrajectory } from './agent';\r\nimport store from './store';\r\nimport { pointsLoaded } from './action';\r\nimport ResultMap from './partials/result-map';\r\nimport { Redirect } from \"react-router-dom\";\r\nimport ResultAside from \"./partials/result-aside\";\r\nimport Pages from './enums/pages';\r\nimport { PrevSettings, PrevSettingsContent, PrevSettingsItem } from './components/prevSettings';\r\nimport Alert from './components/alert';\r\nimport ReactGA from \"react-ga4\";\r\n\r\nconst Promise = global.Promise;\r\n\r\nexport default function FieldResult(props) {\r\n let aside = null;\r\n let resultMap = null;\r\n const [loaded, setLoaded] = React.useState(false);\r\n const [redirect, setRedirect] = React.useState(areRoverDataComplete() ? (areFieldDataCompleted() ? Pages.FieldResult : Pages.Field) : Pages.Rover);\r\n const [error, setError] = React.useState(null);\r\n\r\n function areRoverDataComplete() {\r\n let rover = props.store.getState().rover;\r\n return rover.length && rover.turningRadius && rover.wheelDistance;\r\n }\r\n\r\n function areFieldDataCompleted() {\r\n let field = props.store.getState().field;\r\n return field.start && field.end && field.areaPolygon && field.rowsDistance\r\n }\r\n\r\n useEffect(() => {\r\n let rover = props.store.getState().rover;\r\n let field = props.store.getState().field;\r\n //do we want display this page\r\n if (redirect === Pages.FieldResult)\r\n loadData(rover, field);\r\n document.title = \"Field Result | Route Planning\"; \r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n useEffect(() => {\r\n ReactGA.send({ hitType: \"pageview\", page: window.location.pathname });\r\n }, []);\r\n\r\n //render part\r\n if (redirect === Pages.FieldResult) {\r\n let map;\r\n let mapLoader;\r\n if (loaded) {\r\n map = { resultMap = instance; }}\r\n actualPointCallback={onChangeActualPoint}\r\n />;\r\n } else {\r\n mapLoader = <>;\r\n }\r\n\r\n let linkItems = [\r\n { link: Pages.Obstacles, img: \"btn-obstacles.png\", alt: \"Find the best route\", name: \"Obstacles\" },\r\n { link: Pages.Points, img: \"btn-points.png\", alt: \"Fill a fieldRoute through points\", name: \"Points\" }\r\n ];\r\n\r\n let rover = props.store.getState().rover;\r\n let positionOfRotationAxis = rover.positionOfRotationAxis;\r\n let positionOfGnsReceiver = rover.positionOfGnsReceiver;\r\n\r\n return <>\r\n {/* [BLOCK] Map TODO wheel distance*/}\r\n {!loaded && !error &&
\r\n
\r\n Loading...\r\n
\r\n
}\r\n\r\n {!loaded && error &&
\r\n
\r\n \r\n

Something went wrong...

\r\n \r\n
\r\n
}\r\n\r\n
\r\n {loaded ? map : mapLoader}\r\n \r\n \r\n \r\n \r\n \r\n {positionOfRotationAxis && }\r\n {positionOfGnsReceiver && }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n { { aside = instance; }}\r\n clickPointCallback={onClickPointCallback}\r\n setAnimationSpeed={onSetAnimationSpeed}\r\n />}\r\n
\r\n {error && { setRedirect(Pages.Field); }} variant='danger'>{error}}\r\n
\r\n \r\n }\r\n else {\r\n return \r\n }\r\n\r\n //click handlers\r\n function onPlayAnimationClick() {\r\n resultMap.drawAnimation();\r\n }\r\n function onAnimationStopClick() {\r\n resultMap.pauseAnimation();\r\n }\r\n function onResetAnimationClick() {\r\n resultMap.resetAnimation();\r\n if (aside?.actualPointCallback)\r\n aside.actualPointCallback(0);\r\n }\r\n function onSetAnimationSpeed(speed) {\r\n resultMap.setAnimationSpeed(speed);\r\n }\r\n function onClickPointCallback(index) {\r\n resultMap.clickPointCallback(index);\r\n }\r\n function onChangeActualPoint(index) {\r\n if (aside?.actualPointCallback)\r\n aside.actualPointCallback(index);\r\n }\r\n\r\n //load data\r\n function loadData(rover, field) {\r\n Promise.all([OptimalTrajectory.getTrajectoryPoints(rover, field)]).then((values) => {\r\n if (values[0].error) {\r\n console.log(values[0].errorDetail);\r\n setError(`${values[0].error}`);\r\n }\r\n else {\r\n store.dispatch(pointsLoaded({ points: JSON.parse(values[0].points) }));\r\n setLoaded(true);\r\n //forceUpdate();\r\n }\r\n })\r\n .catch(error => {\r\n //404\r\n setRedirect(Pages.Page500);\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import React, { useEffect} from 'react';\r\nimport {Obstacles} from './agent';\r\nimport store from './store';\r\nimport { pointsLoaded } from './action';\r\nimport ResultMap from './partials/result-map';\r\nimport { Redirect } from \"react-router-dom\";\r\nimport ResultAside from \"./partials/result-aside\";\r\nimport Pages from './enums/pages';\r\nimport { PrevSettings, PrevSettingsContent, PrevSettingsItem } from './components/prevSettings';\r\nimport Alert from './components/alert';\r\nimport ReactGA from \"react-ga4\";\r\n\r\nconst Promise = global.Promise;\r\n\r\nexport default function ObstaclesResult(props) {\r\n let aside = null;\r\n let resultMap = null;\r\n const [loaded, setLoaded] = React.useState(false); \r\n const [redirect, setRedirect] = React.useState(areRoverDataComplete()? (areObstaclesDataCompleted()?Pages.ObstaclesResult:Pages.Obstacles): Pages.Rover);\r\n const [error, setError] = React.useState(null);\r\n\r\n function areRoverDataComplete() {\r\n let rover = props.store.getState().rover;\r\n return rover.length && rover.turningRadius && rover.wheelDistance;\r\n }\r\n \r\n function areObstaclesDataCompleted() {\r\n let obstacles = props.store.getState().obstacles;\r\n return obstacles.start && obstacles.end && obstacles.areaPolygon && obstacles.obstacles\r\n }\r\n\r\n useEffect(()=>{\r\n if (redirect === Pages.ObstaclesResult)\r\n loadData();\r\n document.title = \"Obstacles Result | Route Planning\";\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n useEffect(() => {\r\n ReactGA.send({ hitType: \"pageview\", page: window.location.pathname });\r\n }, []);\r\n\r\n if (redirect === Pages.ObstaclesResult)\r\n { \r\n let map;\r\n let mapLoader;\r\n\r\n let linkItems = [\r\n {link:Pages.Field, img:\"btn-field.png\", alt:\"Fill a field\", name:\"Field\"},\r\n {link:Pages.Points, img:\"btn-points.png\", alt:\"Fill a fieldRoute through points\", name:\"Points\"},\r\n ];\r\n\r\n if (loaded) { \r\n map = { resultMap = instance; }}\r\n actualPointCallback={onChangeActualPoint}\r\n />;\r\n } else {\r\n mapLoader = <>;\r\n }\r\n let positionOfRotationAxis = props.store.getState().rover.positionOfRotationAxis;\r\n let positionOfGnsReceiver = props.store.getState().rover.positionOfGnsReceiver;\r\n\r\n return <>\r\n {!loaded && !error &&
\r\n
\r\n Loading...\r\n
\r\n
}\r\n\r\n {!loaded && error &&
\r\n
\r\n \r\n

Something went wrong...

\r\n \r\n
\r\n
}\r\n\r\n {/* [BLOCK] Map TODO wheel distance*/}\r\n
\r\n {loaded? map: mapLoader}\r\n \r\n \r\n \r\n \r\n \r\n {positionOfRotationAxis && }\r\n {positionOfGnsReceiver && }\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n { aside = instance; }}\r\n clickPointCallback={onClickPointCallback}\r\n setAnimationSpeed={onSetAnimationSpeed}\r\n />\r\n
\r\n {error && { setRedirect(Pages.Obstacles);}} variant='danger'>{error}}\r\n
\r\n \r\n }\r\n else {\r\n return \r\n }\r\n \r\n function loadData() {\r\n let obstacles = props.store.getState().obstacles;\r\n let rover = props.store.getState().rover;\r\n\r\n Promise.all([Obstacles.getTrajectoryPoints(\r\n rover,\r\n obstacles\r\n )]).then((values) => {\r\n\r\n if (values[0].error) {\r\n console.log(values[0].errorDetail);\r\n setError( `${values[0].error}`);\r\n }\r\n else {\r\n let points = JSON.parse(values[0].points);\r\n store.dispatch(pointsLoaded({points: points}));\r\n setLoaded(true);\r\n //setResultPoints(points);\r\n //this.forceUpdate();\r\n }\r\n })\r\n .catch(error => {\r\n setRedirect(Pages.Page500);\r\n console.error(error.message);\r\n });\r\n }\r\n function onPlayAnimationClick() {\r\n resultMap.drawAnimation();\r\n }\r\n function onAnimationStopClick() {\r\n resultMap.pauseAnimation();\r\n }\r\n function onResetAnimationClick() {\r\n resultMap.redrawAnimation();\r\n if (aside?.actualPointCallback)\r\n aside.actualPointCallback(0);\r\n }\r\n function onSetAnimationSpeed(speed) {\r\n resultMap.setAnimationSpeed(speed);\r\n }\r\n function onClickPointCallback(index) {\r\n resultMap.clickPointCallback(index);\r\n }\r\n function onChangeActualPoint(index) {\r\n if (aside?.actualPointCallback)\r\n aside.actualPointCallback(index);\r\n }\r\n};","import react from 'react';\r\n\r\nexport class RoverSvg extends react.Component{\r\n constructor(props) {\r\n super(props);\r\n this.state = { wheelDistance: props.wheelDistance, length:props.length, turningRadius: props.turningRadius }\r\n }\r\n \r\n componentWillReceiveProps(nextProps) {\r\n this.setState({ wheelDistance: nextProps.wheelDistance, length:nextProps.length, turningRadius: nextProps.turningRadius }); \r\n }\r\n\r\n render() {\r\n return ( \r\n <>\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n R: {this.state.turningRadius? this.state.turningRadius : \"_____\"} m\r\n L: {this.state.length? this.state.length : \"_____\"} m\r\n W: {this.state.wheelDistance? this.state.wheelDistance : \"_____\"} m\r\n \r\n
\r\n
\r\n \r\n );\r\n }\r\n };","import react from 'react';\r\nimport { Link } from \"react-router-dom\";\r\n\r\nexport default class CardButton extends react.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n label: props.label,\r\n linkTo: props.linkTo,\r\n img: props.img,\r\n alt: props.alt,\r\n onClick: props.onClick\r\n };\r\n }\r\n\r\n componentWillUnmount() {\r\n this.state.onChange = undefined;\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n this.setState(\r\n {\r\n label: props.label,\r\n linkTo: props.linkTo,\r\n img: props.img,\r\n alt: props.alt,\r\n onClick: props.onClick\r\n });\r\n }\r\n\r\n render() {\r\n return {\r\n if (this.state.onClick\r\n && !this.state.onClick()) {\r\n e.preventDefault()\r\n }\r\n }}\r\n >\r\n {this.state.alt}\r\n
\r\n
{this.state.label}
\r\n
\r\n \r\n }\r\n}","import react from 'react';\n\nexport class AsideLayout extends react.Component {\n constructor(props) {\n super(props);\n this.state = { header: props.header };\n }\n\n render() {\n return
\n
\n
\n
\n

\n {this.state.header}\n

\n
\n {this.props.children}\n
\n
\n
\n
\n
\n }\n}","import react from 'react';\n\n//width enum\n\nexport const inputWIdth = {\n\tW25: 'w-25',\n W50: 'w-50',\n W75: 'w-75',\n W100: 'w-100'\n}\n\nexport class Input extends react.Component {\n constructor(props) {\n super(props);\n this.state = { \n label: props.label, \n htmlFor: props.htmlFor, \n props: props.placeholder, \n value: props.value, \n error: props.error, \n onChange: props.onChange,\n min: props.min,\n max: props.max,\n unit: props.unit,\n width: props.width\n };\n }\n\n componentWillUnmount () {\n this.state.onChange = undefined;\n }\n\n componentWillReceiveProps(props) {\n this.setState(\n { \n label: props.label, \n htmlFor: props.htmlFor, \n props: props.placeholder, \n value: props.value, \n error: props.error, \n onChange: props.onChange,\n min: props.min,\n max: props.max,\n unit: props.unit\n }); \n }\n\n render() {\n\n let inputClassName = \"form-control\" + (this.state.error ? \" input-validation-error\" : \"\");\n let showValidationFeedback = this.state.error? \" input-validation-error\": \"\";\n let width = this.state.width ? this.state.width : inputWIdth.W50;\n return
\n \n
\n \n \n
\n {this.state.error}\n
\n }\n}","import react from 'react';\r\n\r\nexport class Checkbox extends react.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = { \r\n label: props.label, \r\n htmlFor: props.htmlFor, \r\n props: props.placeholder, \r\n value: props.value, \r\n error: props.error, \r\n onChange: props.onChange,\r\n className: props.className ? props.className : \"\"\r\n };\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n this.setState(\r\n { \r\n label: props.label, \r\n htmlFor: props.htmlFor, \r\n props: props.placeholder, \r\n value: props.value, \r\n error: props.error, \r\n onChange: props.onChange,\r\n className: props.className ? props.className : \"\"\r\n }); \r\n }\r\n\r\n render() {\r\n return
\r\n \r\n \r\n
\r\n }\r\n}","import react from 'react';\r\nexport default class Modal extends react.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = { \r\n show: props.show,\r\n header: props.header,\r\n hideAction: props.hideAction\r\n };\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this.setState({ show: nextProps.show }); \r\n }\r\n\r\n render() {\r\n if (!this.state.show)\r\n return
;\r\n //const showHideClassName = this.state.show ? \"modal fade show\" : \"modal fade\";\r\n return (\r\n <>\r\n
this.setState({show:false})\r\n }>\r\n
e.stopPropagation()}>\r\n
\r\n
\r\n

{this.props.header}

\r\n
\r\n
\r\n {this.props.children}\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n}","import Modal from \"../components/modal\";\r\nimport react from 'react';\r\n\r\nexport default class RoutePlaningInfoModal extends react.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = { \r\n show: props.show,\r\n hideAction: props.hideAction\r\n };\r\n this.handleClickOutside = this.handleClickOutside.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.addEventListener(\"mousedown\", this.handleClickOutside);\r\n }\r\n\r\n componentWillUnmount() {\r\n document.removeEventListener(\"mousedown\", this.handleClickOutside);\r\n }\r\n\r\n handleClickOutside() {\r\n this?.state?.hideAction && this?.state.hideAction();\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this.setState({ show: nextProps.show }); \r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n \r\n
\r\n
\r\n

Field

\r\n

This generator will create a route that will cover an area. You can define your area and set angle and distance of a rows. Also you can choose if you want a route around the perimeter.

\r\n \"Fill\r\n
\r\n
\r\n

Obstacles

\r\n

This generator will find the best way around obstacles.

\r\n \"Find\r\n
\r\n
\r\n

Points

\r\n

This generator will find the best way through defined points. The points can be directed or undirected.

\r\n \"Route\r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n};","import Modal from \"../components/modal\";\r\nimport react from 'react';\r\n\r\nexport default class RoverExtendedOptionsModal extends react.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = { \r\n show: props.show,\r\n hideAction: props.hideAction\r\n };\r\n this.handleClickOutside = this.handleClickOutside.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.addEventListener(\"mousedown\", this.handleClickOutside);\r\n }\r\n\r\n componentWillUnmount() {\r\n document.removeEventListener(\"mousedown\", this.handleClickOutside);\r\n }\r\n\r\n handleClickOutside() {\r\n this?.state?.hideAction && this?.state.hideAction();\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this.setState({ show: nextProps.show }); \r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n \r\n
\r\n

Position of axis of rotation

\r\n

You can set the distance from rear point of your rover for your axis of rotation.

\r\n \"Position\r\n
\r\n
\r\n

Position of GNSS receiver

\r\n

You can set the distance from rear point of your rover for your axis of rotation.

\r\n \"Position\r\n
\r\n
\r\n \r\n );\r\n }\r\n};","const ValidationType = {\r\n\tNumberGreaterThanZero : \"NumberGreaterThanZero\",\t\r\n\tNumberGreaterThanZeroOrZero : \"NumberGreaterThanZeroOrZero\",\r\n\tNumberGreaterThanZeroOrZeroOrEmpty : \"NumberGreaterThanZeroOrZeroOrEmpty\",\r\n\tMandatoryText : \"MandatoryText\",\r\n }\r\n\r\n export default ValidationType;","import React, { useEffect } from \"react\";\r\nimport { roverAdded } from './action';\r\nimport {Redirect} from 'react-router-dom';\r\nimport {RoverSvg} from './partials/rover-svg';\r\nimport Pages from './enums/pages';\r\nimport CardButton from './components/cardButton';\r\nimport { AsideLayout } from './components/asideLayout';\r\nimport { Input, inputWIdth } from './components/input';\r\nimport { Checkbox } from './components/checkbox';\r\nimport RoutePlaningInfoModal from './modals/routePlaningInfo';\r\nimport RoverExtendedOptionsModal from './modals/roverExtendedOptions';\r\nimport ValidationType from './enums/validationType';\r\nimport { IsReady } from './agent';\r\nimport ReactGA from \"react-ga4\";\r\n\r\nconst initWheelDistance = 2;\r\nconst initLength = 5;\r\nconst initTurningRadius = 8;\r\n\r\nexport function Rover(props) {\r\n const [fields, setFields] = \r\n React.useState(\r\n {\r\n \"wheelDistance\": props.store.getState()?.rover?.wheelDistance ?? 0,\r\n \"length\": props.store.getState()?.rover?.length ?? 0,\r\n \"turningRadius\": props.store.getState()?.rover?.turningRadius ?? 0,\r\n \"positionOfGnsReceiver\": props.store.getState()?.rover?.positionOfGnsReceiver,\r\n \"positionOfRotationAxis\": props.store.getState()?.rover?.positionOfRotationAxis, \r\n });\r\n\r\n const [errors, setErrors] = React.useState({}); \r\n const [showRoutePlaningInfoModal, setShowRoutePlaningInfoModal] = React.useState(false); \r\n const [extendedOptionsToggler, setExtendedOptionsToggler] = React.useState(props.store?.rover?.positionOfGnsReceiver || props.store?.rover?.positionOfRotationAxis); \r\n const [showRoverExtendedOptionsModal, setShowRoverExtendedOptionsModal] = React.useState(false); \r\n const [redirect, setRedirect] = React.useState(Pages.Rover);\r\n\r\n useEffect(() => {\r\n const unsubscribe =subscribeToStore();\r\n loadIsReady();\r\n if (!areRoverDataAlreadySet()) {\r\n setDefaultsToStore();\r\n }\r\n document.title = \"Rover | Route Planning\";\r\n return () => {\r\n unsubscribe();\r\n }\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n useEffect(() => {\r\n ReactGA.send({ hitType: \"pageview\", page: window.location.pathname });\r\n }, []);\r\n\r\n function setDefaultsToStore() {\r\n props.store.dispatch(roverAdded({wheelDistance:initWheelDistance}));\r\n props.store.dispatch(roverAdded({length:initLength}));\r\n props.store.dispatch(roverAdded({turningRadius:initTurningRadius}));\r\n }\r\n\r\n function subscribeToStore() {\r\n return props.store.subscribe(() => { \r\n setFields({\r\n \"wheelDistance\": props.store.getState().rover.wheelDistance,\r\n \"length\": props.store.getState().rover.length,\r\n \"turningRadius\": props.store.getState().rover.turningRadius,\r\n \"positionOfGnsReceiver\": props.store.getState().rover.positionOfGnsReceiver,\r\n \"positionOfRotationAxis\": props.store.getState().rover.positionOfRotationAxis\r\n })\r\n });\r\n }\r\n\r\n function areRoverDataAlreadySet() {\r\n return props.store.getState()?.rover && !isObjectEmpty(props.store.getState()?.rover);\r\n }\r\n\r\n function processNumber(value, min, max) {\r\n if (!value)\r\n return value;\r\n if (value < min)\r\n return min;\r\n if (value > max)\r\n return max;\r\n\r\n return value;\r\n }\r\n\r\n function handleValidation() {\r\n let error = {};\r\n return (checkValueIsSetOrAddError(\"wheelDistance\", ValidationType.NumberGreaterThanZero, error)\r\n & checkValueIsSetOrAddError(\"length\", ValidationType.NumberGreaterThanZero, error)\r\n & checkValueIsSetOrAddError(\"turningRadius\", ValidationType.NumberGreaterThanZeroOrZero, error))\r\n & checkLowerThanLength(\"positionOfGnsReceiver\", error)\r\n & checkLowerThanLength(\"positionOfRotationAxis\", error, true);\r\n }\r\n\r\n function checkValueIsSetOrAddError(propertyName, validationType, error, setState = false) {\r\n let result = true;\r\n if (validationType === ValidationType.NumberGreaterThanZero) {\r\n if ((fields[propertyName] === \"\" || isNaN(fields[propertyName])) || parseFloat(fields[propertyName]) <= 0) {\r\n error[propertyName] = \"Must be a number greater than zero.\";\r\n result = false;\r\n }\r\n }\r\n else if (validationType === ValidationType.NumberGreaterThanZeroOrZero) {\r\n if ((fields[propertyName] === \"\" || isNaN(fields[propertyName])) || parseFloat(fields[propertyName]) < 0) {\r\n error[propertyName] = \"Must be a number greater than or equal to 0.\";\r\n result = false;\r\n }\r\n }\r\n if (setState && !isObjectEmpty(error))\r\n setErrors(error);\r\n return result;\r\n }\r\n\r\n function checkLowerThanLength(propertyName, error, setState = false) {\r\n let result = true;\r\n \r\n if (!isNaN(fields[propertyName]) && !isNaN(fields[\"length\"]) && parseFloat(fields[propertyName]) > parseFloat(fields[\"length\"])) {\r\n error[propertyName] = \"Must be shorter than or equal to the length.\";\r\n result = false;\r\n }\r\n \r\n if (setState && !isObjectEmpty(error))\r\n setErrors(error);\r\n return result;\r\n }\r\n\r\n function isObjectEmpty(obj) {\r\n return obj\r\n && Object.keys(obj).length === 0\r\n && Object.getPrototypeOf(obj) === Object.prototype\r\n }\r\n\r\n function loadIsReady() {\r\n Promise.all([IsReady.testRequests()]).then(() => {\r\n })\r\n .catch(error => {\r\n //404\r\n setRedirect(Pages.Page500);\r\n });\r\n }\r\n\r\n if (redirect === Pages.Rover)\r\n {\r\n let isValid = !isObjectEmpty(errors);\r\n return ( \r\n <>\r\n
\r\n \r\n
\r\n {/* [BLOCK] Aside */}\r\n \r\n
\r\n { props.store.dispatch(roverAdded({wheelDistance: processNumber(e.target.value, 0, 100)})) }}\r\n />\r\n { props.store.dispatch(roverAdded({length:processNumber(e.target.value, 0, 100)})) } }\r\n />\r\n { props.store.dispatch(roverAdded({turningRadius:processNumber(e.target.value, 0, 1000)})) }} \r\n />\r\n { \r\n setExtendedOptionsToggler(!extendedOptionsToggler);\r\n setShowRoutePlaningInfoModal(false);\r\n setShowRoverExtendedOptionsModal(false);\r\n }\r\n }\r\n />\r\n {extendedOptionsToggler\r\n && (
\r\n { props.store.dispatch(roverAdded({positionOfRotationAxis:processNumber(e.target.value, 0, 100)})) }} \r\n />\r\n\r\n { props.store.dispatch(roverAdded({positionOfGnsReceiver:processNumber(e.target.value, 0, 100)})) }} \r\n />\r\n \r\n
\r\n )} \r\n
\r\n
\r\n
\r\n

Choose generator

\r\n \r\n
\r\n {/*card buttons*/}\r\n
\r\n {}\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {setShowRoutePlaningInfoModal(false)}}/>\r\n {setShowRoverExtendedOptionsModal(false)}}/>\r\n );\r\n }\r\n else\r\n return \r\n };","import React from \"react\";\nconst MapContext = new React.createContext();\nexport default MapContext;","import React, { useRef, useState, useEffect } from \"react\"\r\nimport \"./map.css\";\r\nimport MapContext from \"./mapContext\";\r\nimport * as ol from \"ol\";\r\nimport * as control from 'ol/control';\r\nimport 'ol/ol.css';\r\n\r\nconst Map = ({ children, zoom, center, onSetZoom, extent, onSetMap, projection, activeTool }) => {\r\n const mapRef = useRef();\r\n const [map, setMap] = useState(null);\r\n //called by parent\r\n /*eslint-disable no-unused-vars*/\r\n function setPosition(dataExtent) {\r\n if (dataExtent)\r\n map.getView().fit(dataExtent, map.getSize());\r\n }\r\n /*eslint-enable no-unused-vars*/\r\n \r\n const getCursorClass = () => {\r\n if (['start', 'end', 'areaPolygon', 'obstacles', 'points'].includes(activeTool)) {\r\n return 'cursor-crosshair';\r\n }\r\n return 'cursor-auto';\r\n }\r\n\r\n // on component mount\r\n useEffect(() => {\r\n let mapOptions = undefined;\r\n if (zoom && center && projection)\r\n mapOptions = { zoom, center, projection };\r\n let options = {\r\n view: new ol.View(mapOptions),\r\n layers: [],\r\n controls: control.defaults({ attribution: false, zoom : true, rotate: false }),\r\n overlays: []\r\n };\r\n let mapObject = new ol.Map(options);\r\n\r\n onSetMap(mapObject);\r\n onSetZoom(mapObject.getView().getZoom(), true);\r\n\r\n mapObject.getView().on('propertychange', function(e) {\r\n switch (e.key) {\r\n case 'resolution':\r\n onSetZoom(mapObject.getView().getZoom(), false);\r\n break;\r\n default:\r\n break; \r\n }\r\n });\r\n\r\n mapObject.setTarget(mapRef.current);\r\n setMap(mapObject);\r\n return () => mapObject.setTarget(undefined);\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n // zoom change handler\r\n useEffect(() => {\r\n if (!map) return;\r\n if (!zoom) return;\r\n map.getView().onSetZoom && map.getView().onSetZoom(zoom, false);\r\n }, [zoom]); // eslint-disable-line react-hooks/exhaustive-deps\r\n // center change handler\r\n useEffect(() => {\r\n if (!map) return;\r\n if (!center) return;\r\n map.getView().setCenter(center)\r\n }, [center]); // eslint-disable-line react-hooks/exhaustive-deps\r\n return (\r\n \r\n
\r\n {children}\r\n
\r\n
\r\n )\r\n}\r\nexport default Map;","import React from \"react\";\nconst Layers = ({ children }) => {\n return
{children}
;\n};\nexport default Layers;","import { useContext, useEffect } from \"react\";\r\nimport MapContext from \"./mapContext\";\r\nimport OLTileLayer from \"ol/layer/Tile\"; \r\nconst TileLayer = ({ source, zIndex = 0 }) => {\r\n const { map } = useContext(MapContext); \r\n useEffect(() => {\r\n if (!map) return;\r\n \r\n let tileLayer = new OLTileLayer({\r\n source,\r\n zIndex,\r\n });\r\n map.addLayer(tileLayer);\r\n tileLayer.setZIndex(zIndex);\r\n return () => {\r\n if (map) {\r\n map.removeLayer(tileLayer);\r\n }\r\n };\r\n }, [map]); // eslint-disable-line react-hooks/exhaustive-deps\r\n return null;\r\n};\r\nexport default TileLayer;","import { useContext, useEffect } from \"react\";\r\nimport MapContext from \"./mapContext\";\r\nimport OLVectorLayer from \"ol/layer/Vector\";\r\nconst VectorLayer = ({ source, style, zIndex = 0 }) => {\r\n const { map } = useContext(MapContext);\r\n useEffect(() => {\r\n if (!map) return;\r\n let vectorLayer = new OLVectorLayer({\r\n source,\r\n style\r\n });\r\n map.addLayer(vectorLayer);\r\n vectorLayer.setZIndex(zIndex);\r\n return () => {\r\n if (map) {\r\n map.removeLayer(vectorLayer);\r\n }\r\n };\r\n }, [map]); // eslint-disable-line react-hooks/exhaustive-deps\r\n return null;\r\n};\r\nexport default VectorLayer;","import { useContext, useEffect } from \"react\";\r\nimport * as olInteraction from 'ol/interaction';\r\nimport MapContext from \"./mapContext\";\r\nimport drawState from '../enums/drawState';\r\n\r\nconst Interaction = ({ state, drawSource, deletePreviousPolygonCallback }) => {\r\n const { map } = useContext(MapContext);\r\n useEffect(() => {\r\n if (!map) return;\r\n let draw = null;\r\n\r\n //callback?\r\n let point = state === drawState.START || state === drawState.END || state === drawState.POINTS;\r\n\r\n if (point === true) {\r\n draw = new olInteraction.Draw({\r\n source: drawSource,\r\n type: \"LineString\",\r\n maxPoints: 2,\r\n condition: function(e) {\r\n // when the point's button is 1(leftclick), allows drawing\r\n if (e?.originalEvent?.buttons === 1) { \r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n });\r\n }\r\n else if (point === false) {\r\n draw = new olInteraction.Draw({\r\n source: drawSource,\r\n type: \"Polygon\",\r\n condition: function(e) {\r\n // when the point's button is 1(leftclick), allows drawing\r\n if (e?.originalEvent?.buttons === 1) { \r\n deletePreviousPolygonCallback();\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n });\r\n }\r\n if (draw)\r\n map.addInteraction(draw);\r\n\r\n return () => {\r\n if (map) {\r\n map.removeInteraction(draw);\r\n }\r\n };\r\n }, [map]); // eslint-disable-line react-hooks/exhaustive-deps\r\n return null;\r\n};\r\nexport default Interaction;","import React from \"react\";\r\nimport * as source from 'ol/source';\r\nimport Feature from 'ol/Feature';\r\nimport * as geom from 'ol/geom';\r\nimport * as style from 'ol/style';\r\nimport * as proj from 'ol/proj';\r\nimport { v4 as uuid } from 'uuid';\r\nimport drawState, {doNotAutochangeState} from '../enums/drawState';\r\nimport Map from \"../mapComponent/map\";\r\nimport Layers from \"../mapComponent/layers\";\r\nimport TileLayer from \"../mapComponent/tileLayer\";\r\nimport VectorLayer from \"../mapComponent/vectorLayer\";\r\nimport Interaction from \"../mapComponent/interaction\";\r\nimport pointType from \"../enums/pointType\";\r\nimport * as ContextMenu from 'ol-contextmenu';\r\nimport 'ol-contextmenu/dist/ol-contextmenu.min.css';\r\nimport Cookies from 'universal-cookie';\r\n\r\nclass InputMap1 extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state ={\r\n drawState: props.drawState,\r\n };\r\n\r\n this.drawStateHandler = props.drawStateHandler;\r\n this.drawScenario = props.drawScenario;\r\n this.removeScenario = props.removeScenario;\r\n this.getFeatureIdBystate = props.getFeatureIdBystate;\r\n this.getPreventUnorientedPoint = props.getPreventUnorientedPoint;\r\n this.linesBetweenPoints = props.linesBetweenPoints;\r\n this.props = props;\r\n this.drawSource = new source.Vector();\r\n this.displaySource = new source.Vector();\r\n this.displayLineSource = new source.Vector();\r\n this.addFeatureKey = undefined;\r\n this.init = true;\r\n //this.childRef = createRef();\r\n this.hadDrawnItems = this.hasDrawnItems(props);\r\n this.zoom = this.hadDrawnItems? undefined: this.tryGetLastZoom();\r\n this.maxDrawZoom = props.maxDrawZoom;\r\n this.map = null;\r\n this.start = props.start;\r\n this.end = props.end;\r\n this.points = props.points;\r\n this.onZoomChanged = props.onZoomChanged;\r\n this.removeMarkerItem = {\r\n text: 'Remove this Feature',\r\n classname: 'marker',\r\n callback: this.removeItem.bind(this)\r\n };\r\n this.noActionitem = {\r\n text: 'No action',\r\n classname: 'marker'\r\n };\r\n this.contextMenuItems = [\r\n {\r\n text: 'No actions',\r\n classname: 'bold',\r\n //icon: centerIcon,\r\n callback: null\r\n }\r\n ];\r\n this.contextmenu = null;\r\n this.lastUserLocationSet = false;\r\n if (this.state.drawState !== drawState.NONE) { \r\n this.addFeatureKey = this.drawSource.on(\"addfeature\", (e) => this.addFeature(e));\r\n this.beforeFeatureAddedKey = this.drawSource.on(\"add \", (e) => this.beforeFeatureAdded(e));\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.setLocationFromBrowserIfNeeded();\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n //if map was cleared\r\n if (this.hadDrawnItems && this.hasNoDrawnItems(nextProps)) {\r\n this.setState({ drawState: drawState.START });\r\n this.clear_inputs();\r\n if (!this.addFeatureKey)\r\n this.addFeatureKey = this.drawSource.on(\"addfeature\", (e) => this.addFeature(e));\r\n if (!this.beforeFeatureAddedKey)\r\n this.beforeFeatureAddedKey = this.drawSource.on(\"add \", (e) => this.beforeFeatureAddedKey(e)); \r\n this.hadDrawnItems = false; \r\n }\r\n\r\n //nastaveni draw source pokud ma byt a neni\r\n if (nextProps.drawState !== drawState.NONE) {\r\n if (!this.addFeatureKey)\r\n this.addFeatureKey = this.drawSource.on(\"addfeature\", (e) => this.addFeature(e));\r\n }\r\n //actualize draw state\r\n if (nextProps.drawState !== this.state.drawState) {\r\n this.setState({drawState: nextProps.drawState});\r\n }\r\n\r\n //set features\r\n this.start = nextProps.start;\r\n this.end = nextProps.end;\r\n this.points = nextProps.points;\r\n \r\n //redraw lines between points\r\n if (this.linesBetweenPoints)\r\n this.redrawLinesBetweenPonts();\r\n\r\n this.hasDrawItems = this.hasDrawnItems(nextProps);\r\n }\r\n\r\n hasDrawnItems(props) {\r\n return props.start || props.end || props.areaPolygon \r\n || (props.points && props.points.length > 0) \r\n || (props.polygons && props.polygons.length > 0);\r\n }\r\n\r\n hasNoDrawnItems(nextProps) {\r\n return !nextProps.start && !nextProps.end && !nextProps.areaPolygon \r\n && (!nextProps.points || nextProps.points.length === 0) \r\n && (!nextProps.polygons || nextProps.polygons.length === 0);\r\n }\r\n\r\n render() {\r\n let location = this.getLocation() ?? [-10771353.18, 3810003.67];\r\n\r\n let mapCenter = undefined;\r\n let zoom = this.zoom;\r\n if (this.init) {\r\n mapCenter = location;\r\n zoom = this.zoom ? this.zoom: 8\r\n this.init = false;\r\n }\r\n\r\n return <>\r\n \r\n {this.isInDrawPointState() && }\r\n {this.isInDrawPolygonState() && }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ;\r\n }\r\n\r\n setLastZoom(zoom) {\r\n const cookies = new Cookies();\r\n cookies.set('lastZoom', JSON.stringify(zoom), { path: '/', sameSite: true });\r\n }\r\n\r\n tryGetLastZoom() {\r\n const cookies = new Cookies();\r\n let lastZoom = cookies.get('lastZoom');\r\n if (!isNaN(lastZoom)) {\r\n return parseFloat(lastZoom);\r\n } \r\n return undefined;\r\n }\r\n\r\n setLocationFromBrowserIfNeeded() {\r\n if (this.getLocation())\r\n return;\r\n navigator.geolocation.getCurrentPosition(this.setCurrentPosition.bind(this))\r\n }\r\n\r\n setCurrentPosition(position) {\r\n const cookies = new Cookies();\r\n if (cookies.get('location'))\r\n return;\r\n\r\n let location = {lon: position.coords.longitude,lat: position.coords.latitude}\r\n cookies.set('location', JSON.stringify(location), { path: '/', sameSite: true });\r\n //console.log(cookies.get('location'));\r\n if (this.map)\r\n this.map.getView().setCenter(proj.transform([location.lon, location.lat], 'EPSG:4326', 'EPSG:3857'));\r\n //else console.log('no map');\r\n }\r\n\r\n setLastUserLocation(lat, lon) {\r\n if (this.state.drawState !== drawState.START || this.lastUserLocationSet)\r\n return;\r\n\r\n let lotlan = proj.transform([lon, lat], 'EPSG:3857', 'EPSG:4326')\r\n let location = {lon: lotlan[0],lat: lotlan[1]}\r\n const cookies = new Cookies();\r\n cookies.set('location', JSON.stringify(location), { path: '/', sameSite: true });\r\n this.lastUserLocationSet = true; \r\n }\r\n\r\n getLocation() {\r\n const cookies = new Cookies();\r\n let locationString = cookies.get('location');\r\n if (locationString) {\r\n try {\r\n let location = JSON.parse(locationString);\r\n return [location.lon, location.lat]\r\n }\r\n catch(e) {}\r\n }\r\n return undefined;\r\n }\r\n\r\n isInDrawPointState() {\r\n return this.state.drawState === drawState.START || this.state.drawState === drawState.END || this.state.drawState === drawState.POINTS;\r\n }\r\n\r\n isInDrawPolygonState() {\r\n return this.state.drawState === drawState.AREAPOLYGON || this.state.drawState === drawState.OBSTACLES;\r\n }\r\n\r\n onSetZoom(val, initialSet) {\r\n if (initialSet && this.zoom) {\r\n if (this.onZoomChanged) \r\n this.onZoomChanged(val);\r\n return;\r\n }\r\n\r\n if (this.zoom === val)\r\n return;\r\n\r\n this.zoom = val;\r\n if (this.onZoomChanged) {\r\n this.onZoomChanged(val);\r\n this.setLastZoom(val);\r\n }\r\n }\r\n\r\n onSetMap(map) {\r\n this.map = map;\r\n let extent = this.draw_inputs(this.props.start, this.props.end, this.props.areaPolygon, this.props.points, this.props.polygons);\r\n //call after render!!\r\n if (extent) {\r\n setTimeout(() => {\r\n let view = map.getView();\r\n view.fit(extent, map.getSize());\r\n let newZoom = view.getZoom() - 1 < this.maxDrawZoom ? this.maxDrawZoom: view.getZoom() - 1\r\n view.setZoom(\r\n newZoom\r\n )\r\n }, 10);\r\n }\r\n const cookies = new Cookies();\r\n let location = cookies.get('location'); // Pacman\r\n if (location)\r\n this.map.getView().setCenter(proj.transform([location.lon, location.lat], 'EPSG:4326', 'EPSG:3857')); \r\n\r\n this.contextmenu = new ContextMenu({\r\n width: 180\r\n });\r\n\r\n this.map.addControl(this.contextmenu);\r\n this.contextmenu.on('open', this.onContext.bind(this));\r\n }\r\n\r\n removeItem(obj) {\r\n let featureId = obj?.data?.feature?.id_;\r\n if (!featureId)\r\n return;\r\n\r\n let feature = this.displaySource.getFeatureById(featureId);\r\n if (feature) {\r\n this.displaySource.removeFeature(feature);\r\n this.props.store.dispatch(this.removeScenario.get(feature.drawStateContext)(featureId));\r\n if (this.linesBetweenPoints)\r\n this.redrawLinesBetweenPonts();\r\n return;\r\n }\r\n\r\n feature = this.drawSource.getFeatureById(featureId);\r\n if (feature) {\r\n this.drawSource.removeFeature(feature);\r\n this.props.store.dispatch(this.removeScenario.get(feature.drawStateContext)(featureId));\r\n }\r\n }\r\n\r\n onContext (evt) {\r\n let feature =\tthis.map.forEachFeatureAtPixel(evt.pixel, ft => ft);\r\n this.contextmenu.clear();\r\n if (feature && feature.id_) {\r\n let removeMakerItemCopy = (({text, classame, callback}) => ({text, classame, callback}))(this.removeMarkerItem);\r\n removeMakerItemCopy.data = { feature: feature };\r\n this.contextmenu.extend(this.contextmenu.getDefaultItems());\r\n this.contextmenu.push(removeMakerItemCopy);\r\n } else {\r\n this.contextmenu.extend(this.contextmenu.getDefaultItems());\r\n }\r\n }\r\n\r\n draw_inputs(start, end, areaPolygon, points, polygons) {\r\n if (areaPolygon)\r\n this.draw_input_polygon(areaPolygon) ;\r\n if (start)\r\n this.draw_input_point(start);\r\n if (end)\r\n this.draw_input_point(end);\r\n if (points) {\r\n for (let point of points) {\r\n this.draw_input_point(point); \r\n }\r\n if (this.linesBetweenPoints)\r\n this.redrawLinesBetweenPonts();\r\n }\r\n if (polygons) {\r\n for (let polygon of polygons) {\r\n this.draw_input_polygon([polygon]); \r\n }\r\n }\r\n let extent = this.get_map_position();\r\n // this.childRef?.current?.setPosition(this.get_map_position());\r\n return extent;\r\n }\r\n\r\n get_map_position() {\r\n\r\n let polygons = this.drawSource.getFeatures();\r\n if (polygons.length > 0) {\r\n return this.drawSource.getExtent();\r\n\r\n }\r\n else {\r\n let points = this.displaySource.getFeatures();\r\n if (points.length > 0) {\r\n return this.displaySource.getExtent();\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n draw_input_point(point) {\r\n if (!point)\r\n return;\r\n let rotation = Math.atan2(point.VectorY, point.VectorX);\r\n\r\n let feature = new Feature({\r\n geometry: new geom.Point([point.Lon, point.Lat]),\r\n rotation: rotation\r\n });\r\n\r\n feature.setId(point.Id);\r\n feature.isInput = true;\r\n feature.pointType = point.PointType;\r\n feature.drawStateContext = point.DrawStateContext;\r\n\r\n this.displaySource.addFeature(feature);\r\n }\r\n\r\n draw_input_polygon(areaPolygon) {\r\n if (!areaPolygon)\r\n return;\r\n let feature = new Feature({\r\n geometry: new geom.Polygon(areaPolygon[0].coordinates)\r\n });\r\n feature.setId(areaPolygon[0].Id);\r\n feature.drawStateContext = areaPolygon[0].drawStateContext;\r\n feature.isInput = true;\r\n this.set_polygon_style(feature);\r\n this.drawSource.addFeature(feature); \r\n }\r\n\r\n set_polygon_style(feature) {\r\n if (feature.drawStateContext === drawState.AREAPOLYGON) {\r\n feature.setStyle(\r\n new style.Style({\r\n stroke: new style.Stroke({\r\n color: [52, 168, 158, 255],\r\n width: 2,\r\n }),\r\n fill: new style.Fill({\r\n color: [190, 235, 214, 0.3]\r\n }),\r\n zIndex: 0\r\n }));\r\n }\r\n else {\r\n feature.setStyle(\r\n new style.Style({\r\n stroke: new style.Stroke({\r\n color: [86, 92, 94, 255],\r\n width: 2,\r\n }),\r\n fill: new style.Fill({\r\n color: [164, 163, 153, 0.3]\r\n }),\r\n zIndex: 100\r\n }));\r\n }\r\n }\r\n\r\n clear_inputs() {\r\n this.displaySource.clear();\r\n this.drawSource.clear();\r\n if (this.props.afterFeatureAdded)\r\n this.props.afterFeatureAdded();\r\n if (!this.addFeatureKey) {\r\n this.drawSource.on(\"addfeature\", (e) => this.addFeature(e));\r\n }\r\n }\r\n\r\n beforefeatureadded (e) {\r\n }\r\n\r\n deletePreviousPolygonCallback(){\r\n this.removeOldPolygon(this.state.drawState);\r\n }\r\n\r\n addFeature(e) {\r\n if (this.state.drawState === drawState.NONE)\r\n return;\r\n\r\n this.hadDrawnItems = true;\r\n\r\n let coordinates = e.feature.getGeometry().flatCoordinates;\r\n if ((this.state.drawState === drawState.AREAPOLYGON || this.state.drawState === drawState.OBSTACLES) && coordinates.length > 0) {\r\n if (e?.feature && !e.feature.isInput) {\r\n\r\n if (this.state.drawState === drawState.AREAPOLYGON) {\r\n e.feature.setStyle(\r\n new style.Style({\r\n stroke: new style.Stroke({\r\n color: [52, 168, 158, 255],\r\n width: 2,\r\n }),\r\n fill: new style.Fill({\r\n color: [190, 235, 214, 0.3]\r\n }), \r\n }));\r\n e.feature.zIndex = 0;\r\n }\r\n else {\r\n e.feature.setStyle(\r\n new style.Style({\r\n stroke: new style.Stroke({\r\n color: [86, 92, 94, 255],\r\n width: 2,\r\n }),\r\n fill: new style.Fill({\r\n color: [164, 163, 153, 0.3]\r\n })\r\n }));\r\n e.feature.zIndex = 100;\r\n }\r\n \r\n let id = uuid();\r\n e.feature.setId(id);\r\n e.feature.drawStateContext = this.state.drawState;\r\n this.props.store.dispatch(this.drawScenario.get(this.state.drawState)([{Id: id, drawStateContext: this.state.drawState , coordinates: e.feature.getGeometry().getCoordinates()}]));\r\n }\r\n }\r\n else if (coordinates.length === 4) {\r\n // Line string\r\n let diff_x = coordinates[2] - coordinates[0];\r\n let diff_y = coordinates[3] - coordinates[1];\r\n let ext_x = coordinates[0] - diff_x;\r\n let ext_y = coordinates[1] - diff_y;\r\n // Compute rotation\r\n let dx = coordinates[2] - ext_x;\r\n let dy = coordinates[3] - ext_y;\r\n let rotation = Math.atan2(dy, dx);\r\n\r\n let feature = new Feature({\r\n geometry: new geom.Point([coordinates[0], coordinates[1]]),\r\n rotation: rotation,\r\n });\r\n\r\n let unorientedPoint = this.getPreventUnorientedPoint && !this.getPreventUnorientedPoint(this.state.drawState) && diff_x + diff_y === 0 ;\r\n\r\n if (unorientedPoint) {\r\n diff_x = 0;\r\n diff_y = 0;\r\n }\r\n\r\n switch(this.state.drawState) {\r\n case drawState.START:\r\n feature.pointType = pointType.START;\r\n break;\r\n case drawState.END:\r\n feature.pointType = pointType.END;\r\n break;\r\n case drawState.POINTS:\r\n feature.pointType = pointType.TRANSIT; //getPointType\r\n break;\r\n //TODO better default\r\n default:\r\n feature.pointType = pointType.START; \r\n }\r\n\r\n feature.drawStateContext = this.state.drawState;\r\n\r\n if (unorientedPoint) {\r\n feature.pointType = feature.pointType | pointType.UNORIENTED;\r\n }\r\n\r\n let id = uuid();\r\n feature.setId(id);\r\n this.removeOldPoint(this.state.drawState) \r\n this.displaySource.addFeature(feature);\r\n this.drawSource.removeFeature(e.feature);\r\n if (e?.feature && !e.feature.isInput)\r\n this.props.store.dispatch(this.drawScenario.get(this.state.drawState)({\r\n Lat: coordinates[1],\r\n Lon: coordinates[0],\r\n VectorX: diff_x,\r\n VectorY: diff_y,\r\n Id: id,\r\n PointType: feature.pointType,\r\n DrawStateContext: feature.drawStateContext\r\n }));\r\n\r\n this.setLastUserLocation(coordinates[1], coordinates[0]);\r\n }\r\n\r\n this.props.afterFeatureAdded();\r\n }\r\n \r\n redrawLinesBetweenPonts() {\r\n this.displayLineSource.clear();\r\n let lastPoint;\r\n let allPoints = [...[this.start],...this.points,...[this.end]];\r\n for (let point of allPoints) {\r\n if (!point || !lastPoint) {\r\n lastPoint = point;\r\n continue;\r\n }\r\n let points = [\r\n [lastPoint.Lon, lastPoint.Lat], [point.Lon, point.Lat]\r\n ];\r\n let feature = new Feature({\r\n geometry: new geom.LineString(points),\r\n });\r\n this.displayLineSource.addFeature(feature);\r\n \r\n lastPoint = point;\r\n }\r\n }\r\n\r\n removeOldPoint(state) {\r\n let myId = this.getFeatureIdBystate(state)\r\n if (!myId)\r\n return;\r\n\r\n let feature = this.displaySource.getFeatureById(myId);\r\n if (feature)\r\n this.displaySource.removeFeature(feature);\r\n }\r\n\r\n removeOldPolygon(state) {\r\n let myId = this.getFeatureIdBystate(state)\r\n if (!myId) return;\r\n\r\n let feature = this.drawSource.getFeatureById(myId);\r\n if (feature)\r\n this.drawSource.removeFeature(feature);\r\n }\r\n\r\n setNewStateFromDrawScenario() {\r\n if (doNotAutochangeState(this.state.drawState))\r\n return;\r\n\r\n let pos = 0;\r\n let keys =[ ...this.drawScenario.keys() ];\r\n\r\n for (let key of keys) {\r\n if (key === this.state.drawState)\r\n break;\r\n pos++;\r\n }\r\n\r\n if (keys.length > pos + 1) {\r\n this.setState({drawState: keys[pos + 1], clear: false});\r\n //todo remove first param\r\n this.drawStateHandler(keys[pos + 1]);\r\n }\r\n }\r\n\r\n displayStyleFunction(feature) {\r\n let styles = [];\r\n //feature state\r\n if (feature.values_.rotation !== undefined && feature.values_.rotation !== null) {\r\n styles.push(\r\n new style.Style({\r\n image: new style.Icon({\r\n src: this.getIconByPointType(feature.pointType),\r\n rotateWithView: true,\r\n rotation: -feature.values_.rotation\r\n }),\r\n })\r\n );\r\n }\r\n\r\n return styles;\r\n }\r\n\r\n displayLineStyleFunction(feature) {\r\n let styles = [];\r\n styles.push(\r\n new style.Style({\r\n stroke: new style.Stroke({\r\n color: [250, 166, 34, 255],\r\n width: 5,\r\n lineDash: [10],\r\n lineDashOffset: 30\r\n })\r\n })\r\n );\r\n return styles;\r\n }\r\n\r\n drawStyleFunction(feature) {\r\n let styles = [];\r\n //feature state\r\n if (feature.values_.rotation !== undefined && feature.values_.rotation !== null) {\r\n styles.push(\r\n new style.Style({\r\n image: new style.Icon({\r\n src: this.getIconByPointType(feature.pointType),\r\n rotateWithView: true,\r\n rotation: -feature.values_.rotation\r\n }),\r\n })\r\n );\r\n }\r\n\r\n return styles;\r\n }\r\n\r\n getIconByPointType(myPointType) {\r\n switch(myPointType) {\r\n case pointType.START | pointType.UNORIENTED: return '/start.png';\r\n case pointType.START: return '/start-oriented.png';\r\n case pointType.END | pointType.UNORIENTED: return '/end.png';\r\n case pointType.END: return '/end-oriented.png';\r\n case pointType.UNORIENTED | pointType.TRANSIT: return '/point.png';\r\n case pointType.TRANSIT: return '/point-oriented.png';\r\n default: return '/point-oriented.png'; \r\n }\r\n }\r\n}\r\n\r\nexport default InputMap1;","import react from 'react';\r\n\r\nexport class MapButton extends react.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = { \r\n onClick: props.onClick,\r\n isActive: props.isActive,\r\n className: props.className,\r\n children: props.children,\r\n disabled: props.disabled === true\r\n };\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n this.setState(\r\n { \r\n message: props.message,\r\n isActive: props.isActive,\r\n disabled: props.disabled === true\r\n }); \r\n }\r\n\r\n render() {\r\n let active = this.state.isActive? \"active\" : \"\";\r\n let disabled = this.state.disabled;\r\n return \r\n }\r\n}","import Modal from \"../components/modal\";\r\nimport react from 'react';\r\n\r\nexport default class DefineFieldGeometryModal extends react.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = { \r\n show: props.show,\r\n hideAction: props.hideAction,\r\n };\r\n\r\n this.handleClickOutside = this.handleClickOutside.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.addEventListener(\"mousedown\", this.handleClickOutside);\r\n }\r\n\r\n componentWillUnmount() {\r\n document.removeEventListener(\"mousedown\", this.handleClickOutside);\r\n }\r\n\r\n handleClickOutside() {\r\n this?.state?.hideAction && this?.state.hideAction();\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this.setState({ show: nextProps.show }); \r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n \r\n

Draw a field

\r\n

Click on the Field to draw your field on the map.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Concave shapes can lead to very inefficient route.

\r\n
\r\n \"Convex\r\n \"Concave\r\n
\r\n
\r\n
\r\n \r\n \r\n );\r\n }\r\n};","import Modal from \"../components/modal\";\r\nimport react from 'react';\r\n\r\nexport default class DefineFieldRowsModal extends react.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = { \r\n show: props.show,\r\n hideAction: props.hideAction\r\n };\r\n this.handleClickOutside = this.handleClickOutside.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.addEventListener(\"mousedown\", this.handleClickOutside);\r\n }\r\n\r\n componentWillUnmount() {\r\n document.removeEventListener(\"mousedown\", this.handleClickOutside);\r\n }\r\n\r\n handleClickOutside() {\r\n this?.state?.hideAction && this?.state.hideAction();\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this.setState({ show: nextProps.show }); \r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n \r\n
\r\n

Row distance

\r\n

Define distance (in meters) between each row.

\r\n
\r\n \"Small\r\n
\r\n \"Small\r\n
\r\n
\r\n
\r\n

Row angle

\r\n

Angle of the rows.

\r\n
\r\n
\r\n

0°

\r\n \"Row\r\n
\r\n
\r\n

45°

\r\n \"Row\r\n
\r\n
\r\n
\r\n
\r\n

Around the perimeter

\r\n

If checked, rower will ride around the perimeter after filling the field.

\r\n
\r\n
\r\n

Not checked

\r\n \"Without\r\n
\r\n
\r\n

Checked

\r\n \"With\r\n
\r\n
\r\n
\r\n \r\n \r\n );\r\n }\r\n};\r\n","import React, {useEffect} from 'react';\r\nimport InputMap1 from './partials/input-map1';\r\nimport drawState from './enums/drawState';\r\nimport { fieldAdded, fieldMapReseted } from './action';\r\nimport { Redirect } from \"react-router-dom\";\r\nimport Pages from './enums/pages';\r\nimport ValidationType from './enums/validationType';\r\nimport { PrevSettings, PrevSettingsContent, PrevSettingsItem } from './components/prevSettings';\r\nimport { AsideLayout } from './components/asideLayout';\r\nimport { Input } from './components/input';\r\nimport { Checkbox } from './components/checkbox';\r\nimport { MapButton } from './components/mapButton';\r\nimport DefineFieldGeometryModal from './modals/defineFieldGeometryInfo';\r\nimport DefineFieldRowsModal from './modals/defineFieldRowsInfo';\r\nimport Alert from './components/alert';\r\nimport ReactGA from \"react-ga4\";\r\n\r\nconst initRowsDistance = 10;\r\nconst initRowsAngle = 0;\r\nconst initAroundPerimeter = false;\r\n\r\nexport function Field(props) {\r\n const [fields, setFields] = \r\n React.useState(\r\n {\r\n \"rowsAngle\": props.store.getState()?.field?.rowsAngle ?? initRowsAngle,\r\n \"rowsDistance\": props.store.getState()?.field?.rowsDistance ?? initRowsDistance,\r\n \"aroundPerimeter\": props.store.getState()?.field?.aroundPerimeter ?? initAroundPerimeter,\r\n \"captcha\": '',\r\n \"areFieldDataCompleted\": getAreFieldDataCompleted()\r\n });\r\n\r\n const [errors, setErrors] = React.useState({rowsAngle: '', rowsDistance: '', rowsLinesOnly: '', aroundPerimeter: ''}); \r\n const [actualDrawState, setactualDrawState] = React.useState(drawState.MOVEMAP); \r\n const [redirect, setRedirect] = React.useState(areRoverDataComplete()? Pages.Field: Pages.Rover); \r\n const [showModalDefineFieldGeometry, setShowModalDefineFieldGeometry] = React.useState(false); \r\n const [showModalDefineFieldRows, setShowModalDefineFieldRows] = React.useState(false); \r\n const [isZoomedToDraw, setIsZoomedToDraw] = React.useState(false); \r\n const [hideZoomedToDrawWarning, setHideZoomedToDrawWarning] = React.useState(false); \r\n const [captchaImg, setCaptchaImg] = React.useState(null);\r\n const [drawScenario] = React.useState(createDrawScenarioWithReduxAction); \r\n const [removeScenario] = React.useState(createRemoveScenarioWithReduxAction); \r\n\r\n useEffect(()=>{\r\n loadImage();\r\n setactualDrawState(getInitialDrawState());\r\n const unsubscribe = subscribeStateToReduxStore();\r\n if (!areFieldDataAlreadySet())\r\n initReduxStore(props.store);\r\n\r\n document.title = \"Field | Route Planning\";\r\n return () => {\r\n unsubscribe();\r\n }\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n useEffect(() => {\r\n ReactGA.send({ hitType: \"pageview\", page: window.location.pathname });\r\n }, []);\r\n\r\n function getAreFieldDataCompleted() {\r\n let field = props.store.getState().field;\r\n return field.start && field.end && field.areaPolygon && field.rowsDistance\r\n }\r\n\r\n function areRoverDataComplete() {\r\n let rover = props.store.getState().rover;\r\n return rover.length && rover.turningRadius && rover.wheelDistance;\r\n }\r\n\r\n function initReduxStore(store) {\r\n store.dispatch(fieldAdded({rowsDistance:initRowsDistance}));\r\n store.dispatch(fieldAdded({rowsAngle:initRowsAngle}));\r\n store.dispatch(fieldAdded({aroundPerimeter:initAroundPerimeter}));\r\n store.dispatch(fieldAdded({captcha:''}));\r\n }\r\n\r\n function areFieldDataAlreadySet() {\r\n return props.store.getState()?.field && !isObjectEmpty(props.store.getState()?.field);\r\n }\r\n\r\n if (redirect === Pages.Field)\r\n {\r\n let positionOfRotationAxis = props.store.getState().rover.positionOfRotationAxis;\r\n let positionOfGnsReceiver = props.store.getState().rover.positionOfGnsReceiver;\r\n return <>\r\n
\r\n
\r\n setactualDrawState(drawState.MOVEMAP)}>\r\n \r\n \r\n
\r\n setactualDrawState(drawState.START)} disabled={!isZoomedToDraw}>\r\n Start Start\r\n \r\n setactualDrawState(drawState.END )} disabled={!isZoomedToDraw}>\r\n End End\r\n \r\n
\r\n setactualDrawState(drawState.AREAPOLYGON)} disabled={!isZoomedToDraw}>\r\n Field\r\n \r\n { props.store.dispatch(fieldMapReseted()); }} className='btn-danger'>\r\n Clear map\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {positionOfRotationAxis && }\r\n {positionOfGnsReceiver && }\r\n \r\n \r\n
\r\n \r\n
\r\n

1) Define start and end point

\r\n
\r\n \r\n Start point\r\n
\r\n
\r\n \r\n End point\r\n
\r\n
\r\n
\r\n
\r\n

2) Define field geometry

\r\n \r\n
\r\n
\r\n \r\n Field geometry\r\n
\r\n
\r\n
\r\n
\r\n

3) Define field rows

\r\n \r\n
\r\n { props.store.dispatch(fieldAdded({rowsDistance:processNumber(e.target.value, 0, 100)}))} } \r\n />\r\n props.store.dispatch(fieldAdded({rowsAngle:processNumber(e.target.value, 0, 360)}))}\r\n />\r\n props.store.dispatch(fieldAdded({aroundPerimeter:e.target.checked})) }\r\n />\r\n
\r\n {captchaImg &&\r\n
\r\n
\r\n loadImage()}/>\r\n
\r\n
\r\n \r\n
\r\n props.store.dispatch(fieldAdded({captcha:e.target.value}))}\r\n onKeyPress={handleCaptchaKeypress}\r\n />\r\n
\r\n {errors[\"captcha\"] && {errors[\"captcha\"]}} \r\n
\r\n
\r\n }\r\n \r\n
\r\n
\r\n {/*this.state.error && { this.setState({error: null});}} variant='danger'>{this.state.error}*/}\r\n {!isZoomedToDraw \r\n && !hideZoomedToDrawWarning \r\n && { setHideZoomedToDrawWarning(true)}} variant='info'>\"Your map view is too large. Please zoom in to draw your field. (Field size can be up to 8 km2)\"}\r\n
\r\n {showModalDefineFieldGeometry && { setShowModalDefineFieldGeometry(false) }} header = { \"Define field geometry\" }/> } \r\n {showModalDefineFieldRows && { setShowModalDefineFieldRows(false) }} header = { \"Define field rows\" }/>}\r\n \r\n }\r\n else\r\n return \r\n\r\n function handleCaptchaKeypress(e) {\r\n if (e.charCode === 13) {\r\n generateRoute();\r\n }\r\n };\r\n\r\n async function generateRoute() {\r\n let captchaOk = await processCaptcha();\r\n if (captchaOk && handleValidation() && fields[\"areFieldDataCompleted\"] && handleValidation()) {\r\n setRedirect(Pages.FieldResult);\r\n }\r\n }\r\n\r\n function afterFeatureAdded() {\r\n setactualDrawState(drawState.MOVEMAP)\r\n }\r\n\r\n function onZoomChanged(val) {\r\n let isZoomedToDraw = val >= 15;\r\n setIsZoomedToDraw(isZoomedToDraw);\r\n }\r\n\r\n function createDrawScenarioWithReduxAction() {\r\n let drawScenario = new Map();\r\n drawScenario.set(drawState.START, (point) => \r\n { \r\n return fieldAdded({start: point})\r\n });\r\n drawScenario.set(drawState.END, (point) => { \r\n return fieldAdded({end: point})}\r\n );\r\n drawScenario.set(drawState.AREAPOLYGON, (coordinates) => { \r\n return fieldAdded({areaPolygon: coordinates})}\r\n );\r\n\r\n drawScenario.set(drawState.MOVEMAP, null); \r\n return drawScenario;\r\n }\r\n\r\n function createRemoveScenarioWithReduxAction() {\r\n let removeScenario = new Map();\r\n removeScenario.set(drawState.START, () => \r\n { \r\n return fieldAdded({start: null})\r\n });\r\n removeScenario.set(drawState.END, () => { \r\n return fieldAdded({end: null})}\r\n );\r\n removeScenario.set(drawState.AREAPOLYGON, () => { \r\n return fieldAdded({areaPolygon: null})}\r\n );\r\n\r\n removeScenario.set(drawState.MOVEMAP, null); \r\n return removeScenario;\r\n }\r\n\r\n function subscribeStateToReduxStore() {\r\n return props.store.subscribe(() => {\r\n let formFields = {};\r\n let field = props.store.getState().field;\r\n\r\n formFields[\"rowsDistance\"] = field.rowsDistance;\r\n formFields[\"rowsAngle\"] = field.rowsAngle; \r\n formFields[\"aroundPerimeter\"] = field.aroundPerimeter; \r\n formFields[\"start\"] = field.start;\r\n formFields[\"end\"] = field.end;\r\n formFields[\"areaPolygon\"] = field.areaPolygon;\r\n formFields[\"captcha\"] = field.captcha;\r\n formFields[\"areFieldDataCompleted\"] = (field.start && field.end && field.areaPolygon && field.rowsDistance);\r\n setFields(formFields);\r\n });\r\n }\r\n\r\n function getFeatureIdBystate(myactualDrawState) {\r\n let field = props.store.getState().field;\r\n switch(myactualDrawState) {\r\n case drawState.START:\r\n return field?.start?.Id;\r\n case drawState.END:\r\n return field?.end?.Id;\r\n case drawState.AREAPOLYGON:\r\n return Array.isArray(field?.areaPolygon) && field?.areaPolygon?.length > 0? field?.areaPolygon[0]?.Id: null;\r\n default:\r\n return null; \r\n }\r\n }\r\n\r\n function getPreventUnorientedPoint(myactualDrawState) {\r\n return myactualDrawState === drawState.START;\r\n }\r\n\r\n function isFeatureDone(stepState) {\r\n return props.store.getState().field[stepState]? \"done\" : null;\r\n }\r\n\r\n function handleValidation() {\r\n let error = {};\r\n return (checkValueIsSetOrAddError(\"rowsDistance\", ValidationType.NumberGreaterThanZero, error)\r\n & ((captchaImg === null || captchaImg === undefined) || checkValueIsSetOrAddError(\"captcha\", ValidationType.MandatoryText, error)))\r\n & checkValueIsSetOrAddError(\"rowsAngle\", ValidationType.NumberGreaterThanZeroOrZero, error, true)\r\n }\r\n\r\n function checkValueIsSetOrAddError(propertyName, validationType, error, setState = false) {\r\n let result = true;\r\n\r\n if (validationType === ValidationType.NumberGreaterThanZero) {\r\n if ((fields[propertyName] === \"\" || isNaN(fields[propertyName])) || parseFloat(fields[propertyName]) <= 0) {\r\n error[propertyName] = \"Must be a number greater than zero.\";\r\n result = false;\r\n }\r\n }\r\n else if (validationType === ValidationType.NumberGreaterThanZeroOrZero) {\r\n if ((fields[propertyName] === \"\" || isNaN(fields[propertyName])) || parseFloat(fields[propertyName]) < 0) {\r\n error[propertyName] = \"Must be a number greater than or equal to 0.\";\r\n result = false;\r\n }\r\n }\r\n else if (validationType === ValidationType.MandatoryText) {\r\n if(!fields[propertyName]){\r\n error[propertyName] = \"Value can not be empty.\";\r\n result = false;\r\n }\r\n }\r\n \r\n if (setState && !isObjectEmpty(error))\r\n setErrors(error);\r\n return result;\r\n }\r\n \r\n function getInitialDrawState() {\r\n let field = props.store.getState().field;\r\n if (field.areaPolygon) return drawState.MOVEMAP;\r\n if (field.end) return drawState.AREAPOLYGON;\r\n if (field.start) return drawState.END;\r\n \r\n return drawState.MOVEMAP;\r\n }\r\n\r\n function processNumber(value, min, max) {\r\n if (!value || isNaN(parseFloat(value))) \r\n return value;\r\n let number = parseFloat(value);\r\n if (number < min) return min;\r\n if (number > max) return max;\r\n\r\n return number;\r\n }\r\n\r\n async function processCaptcha() {\r\n if (setCaptchaImg)\r\n return true;\r\n\r\n return (!await loadImage());\r\n }\r\n\r\n async function loadImage() {\r\n let response = null;\r\n try {\r\n response = await fetch('/api/Home/GetCaptchaImage',\r\n {\r\n mode: 'cors',\r\n credentials: 'include'\r\n });\r\n }\r\n catch {}\r\n\r\n if (response.status === \"204\") return false;\r\n // console.log(response.text);\r\n let blob = await response.blob();\r\n setCaptchaImg(URL.createObjectURL(blob));\r\n return true;\r\n }\r\n \r\n function isObjectEmpty(obj) {\r\n return obj\r\n && Object.keys(obj).length === 0\r\n && Object.getPrototypeOf(obj) === Object.prototype\r\n }\r\n\r\n function objectPropsHasValues(obj) {\r\n for (const key in obj) {\r\n if (obj[key])\r\n return true;\r\n }\r\n return false;\r\n }\r\n};","import Modal from \"../components/modal\";\r\nimport react from 'react';\r\n\r\nexport default class DefineAreaPrecisionModal extends react.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = { \r\n show: props.show,\r\n hideAction: props.hideAction\r\n };\r\n this.handleClickOutside = this.handleClickOutside.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.addEventListener(\"mousedown\", this.handleClickOutside);\r\n }\r\n\r\n componentWillUnmount() {\r\n document.removeEventListener(\"mousedown\", this.handleClickOutside);\r\n }\r\n\r\n handleClickOutside() {\r\n this?.state?.hideAction && this?.state.hideAction();\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this.setState({ show: nextProps.show }); \r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n \r\n
\r\n

Fence

\r\n

The fence in which the route will be calculated. Smaller fences are faster for calculating. Start and end point has to be inside the fence.

\r\n \"Calculation\r\n
\r\n
\r\n

Precision

\r\n

Defines how much effort the generator will put for calculating the best route. Higher number increases possibility of finding better way but will take more time to calculate.

\r\n
\r\n \"Smaller\r\n
\r\n \"Higher\r\n
\r\n
\r\n \r\n \r\n );\r\n }\r\n};\r\n","import React, { useEffect } from 'react';\r\nimport drawState from './enums/drawState';\r\nimport { Redirect } from \"react-router-dom\";\r\nimport { PrevSettings, PrevSettingsContent, PrevSettingsItem } from './components/prevSettings';\r\nimport Pages from './enums/pages';\r\nimport { AsideLayout } from './components/asideLayout';\r\nimport { obstaclesAdded, obstaclesMapReseted, obstaclesRemoved } from './action';\r\nimport DefineAreaPrecisionModal from './modals/defineAreaPrecisionInfo';\r\nimport InputMap1 from './partials/input-map1';\r\nimport { MapButton } from './components/mapButton';\r\nimport Alert from './components/alert';\r\nimport ReactGA from \"react-ga4\";\r\n\r\nconst initialPrecision = 50;\r\nconst maxDrawZoom = 17;\r\n\r\nexport function Obstacles(props) {\r\n const [fields, setFields] =\r\n React.useState(\r\n {\r\n \"captcha\": '',\r\n \"areObstaclesDataCompleted\": getAreObstaclesDataCompleted(),\r\n \"obstaclesCount\": props.store.getState()?.obstacles?.obstacles?.length ?? 0,\r\n \"precision\": initialPrecision,\r\n \"start\" : props.store.getState()?.obstacles?.start,\r\n \"end\" : props.store.getState()?.obstacles?.end,\r\n \"areaPolygon\": props.store.getState()?.obstacles?.areaPolygon\r\n });\r\n\r\n const [errors, setErrors] = React.useState({ captcha: '' });\r\n const [actualDrawState, setActualDrawState] = React.useState(drawState.MOVEMAP);\r\n const [redirect, setRedirect] = React.useState(areRoverDataComplete() ? Pages.Obstacles : Pages.Rover);\r\n const [showDefineAreaPrecisionModal, setShowDefineAreaPrecisionModal] = React.useState(false);\r\n const [isZoomedToDraw, setIsZoomedToDraw] = React.useState(false);\r\n const [hideZoomedToDrawWarning, setHideZoomedToDrawWarning] = React.useState(false);\r\n const [captchaImg, setCaptchaImg] = React.useState(null);\r\n const [drawScenario] = React.useState(createDrawScenarioWithReduxAction);\r\n const [removeScenario] = React.useState(createRemoveScenarioWithReduxAction);\r\n\r\n useEffect(() => {\r\n loadImage();\r\n setActualDrawState(getInitialDrawState());\r\n const unsubscribe = subscribeStateToReduxStore();\r\n\r\n if (!areObstaclesDataAlreadySet())\r\n initReduxStore(props.store);\r\n document.title = \"Obstacles | Route Planning\";\r\n return () => {\r\n unsubscribe();\r\n }\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n useEffect(() => {\r\n ReactGA.send({ hitType: \"pageview\", page:window.location.pathname });\r\n }, []);\r\n\r\n function initReduxStore(store) {\r\n store.dispatch(obstaclesAdded({ precision: initialPrecision }));\r\n store.dispatch(obstaclesAdded({ captcha: '' }));\r\n }\r\n\r\n function areObstaclesDataAlreadySet() {\r\n return props.store.getState()?.obstacles && !isObjectEmpty(props.store.getState()?.obstacles) && props.store.getState()?.obstacles.precision;\r\n }\r\n\r\n function areRoverDataComplete() {\r\n let rover = props.store.getState().rover;\r\n return rover.length && rover.turningRadius && rover.wheelDistance;\r\n }\r\n\r\n function createDrawScenarioWithReduxAction() {\r\n let drawScenario = new Map();\r\n drawScenario.set(drawState.START, (point) => {\r\n return obstaclesAdded({ start: point })\r\n });\r\n drawScenario.set(drawState.END, (point) => {\r\n return obstaclesAdded({ end: point })\r\n });\r\n drawScenario.set(drawState.OBSTACLES, (coordinates) => {\r\n return setObstacleOrAreaPolygon(coordinates);\r\n });\r\n drawScenario.set(drawState.AREAPOLYGON, (coordinates) => {\r\n return obstaclesAdded({ areaPolygon: coordinates })\r\n });\r\n return drawScenario;\r\n }\r\n\r\n function createRemoveScenarioWithReduxAction() {\r\n let removeScenario = new Map();\r\n removeScenario.set(drawState.START, () => {\r\n return obstaclesAdded({ start: null })\r\n });\r\n removeScenario.set(drawState.END, () => {\r\n return obstaclesAdded({ end: null })\r\n });\r\n removeScenario.set(drawState.OBSTACLES, (id) => {\r\n return obstaclesRemoved(id)\r\n });\r\n removeScenario.set(drawState.AREAPOLYGON, () => {\r\n return obstaclesAdded({ areaPolygon: null })\r\n });\r\n return removeScenario;\r\n }\r\n\r\n function subscribeStateToReduxStore() {\r\n return props.store.subscribe(() => {\r\n let formFields = {};\r\n let obstacles = props.store.getState().obstacles;\r\n formFields[\"start\"] = obstacles.start;\r\n formFields[\"end\"] = obstacles.end;\r\n formFields[\"obstacles\"] = obstacles.obstacles;\r\n formFields[\"areaPolygon\"] = obstacles.areaPolygon;\r\n formFields[\"precision\"] = obstacles.precision;\r\n formFields[\"captcha\"] = obstacles.captcha;\r\n formFields[\"obstaclesCount\"] = props.store.getState()?.obstacles?.obstacles?.length ?? 0;\r\n formFields[\"areObstaclesDataCompleted\"] = getAreObstaclesDataCompleted();\r\n setFields(formFields);\r\n });\r\n }\r\n\r\n function getAreObstaclesDataCompleted() {\r\n let obstacles = props.store.getState().obstacles;\r\n return (obstacles.start && obstacles.end && obstacles.areaPolygon && Array.isArray(obstacles.obstacles) && obstacles.obstacles.length > 0);\r\n }\r\n\r\n if (redirect === Pages.Obstacles) {\r\n let positionOfRotationAxis = props.store.getState().rover.positionOfRotationAxis;\r\n let positionOfGnsReceiver = props.store.getState().rover.positionOfGnsReceiver;\r\n let routePlanningEnabled = fields[\"areObstaclesDataCompleted\"] && !objectPropsHasValues(errors);\r\n let precision = fields[\"precision\"] ? fields[\"precision\"] : initialPrecision;\r\n\r\n return <>\r\n {/* [BLOCK] Map */}\r\n
\r\n
\r\n setActualDrawState(drawState.MOVEMAP)}>\r\n \r\n \r\n
\r\n setActualDrawState(drawState.START)} disabled={!isZoomedToDraw}>\r\n Start Start\r\n \r\n setActualDrawState(drawState.END)} disabled={!isZoomedToDraw}>\r\n End End\r\n \r\n
\r\n setActualDrawState(drawState.OBSTACLES)} disabled={!isZoomedToDraw}>\r\n Obstacles\r\n \r\n setActualDrawState(drawState.AREAPOLYGON)} disabled={!isZoomedToDraw}>\r\n Area\r\n \r\n { props.store.dispatch(obstaclesMapReseted()); }} className='btn-danger'>\r\n Clear map\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {positionOfRotationAxis && }\r\n {positionOfGnsReceiver && }\r\n \r\n \r\n
\r\n \r\n
\r\n

1) Define start and end point

\r\n
\r\n \r\n Start point\r\n
\r\n
\r\n \r\n End point\r\n
\r\n
\r\n
\r\n

2) Draw your obstacles

\r\n
\r\n {fields[\"obstaclesCount\"]}\r\n Obstacles\r\n
\r\n
\r\n
\r\n
\r\n

3) Define fence and precision

\r\n \r\n
\r\n
\r\n \r\n Fence\r\n
\r\n
\r\n \r\n {\r\n props.store.dispatch(obstaclesAdded({ precision: e.target.value }))\r\n }\r\n }\r\n />\r\n
\r\n Low\r\n ({precision})\r\n High\r\n
\r\n
\r\n
\r\n {captchaImg &&\r\n
\r\n
\r\n loadImage()} />\r\n
\r\n
\r\n \r\n
\r\n props.store.dispatch(obstaclesAdded({ captcha: e.target.value }))}\r\n onKeyPress={handleCaptchaKeypress}\r\n />\r\n
\r\n {errors[\"captcha\"] && {errors[\"captcha\"]}}\r\n
\r\n
\r\n }\r\n \r\n
\r\n
\r\n {/*this.state.error && { setActualDrawState({ error: null }); }} variant='danger'>{this.state.error}*/}\r\n {!isZoomedToDraw\r\n && !hideZoomedToDrawWarning\r\n && { setHideZoomedToDrawWarning(true); }} variant='info'>\"Your map view is too large. Please zoom in to draw your obstacles. (Obstacle area size can be up to 50 000 m2)\"}\r\n
\r\n { setShowDefineAreaPrecisionModal(false) }} />\r\n \r\n }\r\n else\r\n return \r\n\r\n async function generateRoute(routePlanningEnabled) {\r\n let captchaOk = await processCaptcha();\r\n if (captchaOk && routePlanningEnabled && handleValidation()) {\r\n setRedirect(Pages.ObstaclesResult);\r\n }\r\n }\r\n\r\n function handleCaptchaKeypress(e) {\r\n if (e.charCode === 13) {\r\n e.preventDefault();\r\n let routePlanningEnabled = fields[\"areObstaclesDataCompleted\"] && !objectPropsHasValues(errors);\r\n generateRoute(routePlanningEnabled);\r\n }\r\n };\r\n\r\n function afterFeatureAdded() {\r\n setActualDrawState(drawState.MOVEMAP)\r\n }\r\n\r\n function onZoomChanged(val) {\r\n let isZoomedToDraw = val >= maxDrawZoom;\r\n setIsZoomedToDraw(isZoomedToDraw);\r\n }\r\n\r\n function handleValidation() {\r\n let errors = {};\r\n let formIsValid = true;\r\n\r\n if (captchaImg && (fields[\"captcha\"] === null || fields[\"captcha\"] === undefined)) {\r\n formIsValid = false;\r\n errors[\"captcha\"] = \"Cannot be empty\";\r\n }\r\n\r\n setErrors(errors);\r\n return formIsValid;\r\n }\r\n\r\n async function processCaptcha() {\r\n if (captchaImg)\r\n return true;\r\n\r\n return (!await loadImage());\r\n }\r\n\r\n function getFeatureIdBystate(myDrawState) {\r\n let obstaclesReduxState = props.store.getState()?.obstacles;\r\n switch (myDrawState) {\r\n case drawState.START: return obstaclesReduxState?.start?.Id;\r\n case drawState.END: return obstaclesReduxState?.end?.Id;\r\n case drawState.AREAPOLYGON:\r\n return Array.isArray(obstaclesReduxState?.areaPolygon) && obstaclesReduxState?.areaPolygon?.length > 0 ? obstaclesReduxState?.areaPolygon[0]?.Id : null;\r\n default: return null;\r\n }\r\n }\r\n\r\n function drawStateHandler(drawState) {\r\n setActualDrawState(drawState);\r\n }\r\n\r\n function isFeatureDone(stepState) {\r\n return fields[stepState] ? \"done\" : \"\";\r\n }\r\n\r\n function setObstacleOrAreaPolygon(coordinates) {\r\n if (coordinates[0] && coordinates[0][0] && coordinates[0][0][0] !== coordinates[0][coordinates.length - 1][0] && coordinates[0][0][1] !== coordinates[0][coordinates.length - 1][1])\r\n coordinates[0].push(coordinates[0][0]);\r\n return obstaclesAdded({ obstacles: coordinates[0] });\r\n }\r\n\r\n function getPreventUnorientedPoint(myDrawState) {\r\n return myDrawState === drawState.START;\r\n }\r\n\r\n function getInitialDrawState() {\r\n /* let obstacles = props.store.getState().obstacles;\r\n if (obstacles.areaPolygon) return drawState.NONE;\r\n if (obstacles.obstacles && obstacles.obstacles.length > 0) return drawState.OBSTACLES;\r\n if (obstacles.end) return drawState.OBSTACLES;\r\n if (obstacles.start) return drawState.END;*/\r\n return drawState.MOVEMAP\r\n }\r\n\r\n async function loadImage() {\r\n let response = null;\r\n try {\r\n response = await fetch('/api/Home/GetCaptchaImage',\r\n {\r\n mode: 'cors',\r\n credentials: 'include'\r\n });\r\n }\r\n catch { }\r\n\r\n if (response.status === \"204\") return false;\r\n // console.log(response.text);\r\n let blob = await response.blob();\r\n setCaptchaImg(URL.createObjectURL(blob));\r\n return true;\r\n }\r\n\r\n function isObjectEmpty(obj) {\r\n return obj\r\n && Object.keys(obj).length === 0\r\n && Object.getPrototypeOf(obj) === Object.prototype\r\n }\r\n\r\n function objectPropsHasValues(obj) {\r\n for (const key in obj) {\r\n if (obj[key])\r\n return true;\r\n }\r\n return false;\r\n } \r\n};","import React, {useEffect} from 'react';\r\nimport InputMap1 from './partials/input-map1';\r\nimport drawState from './enums/drawState';\r\nimport { pointsMapReseted } from './action';\r\nimport { Redirect } from \"react-router-dom\";\r\nimport Pages from './enums/pages';\r\nimport { PrevSettings, PrevSettingsContent, PrevSettingsItem } from './components/prevSettings';\r\n//import Alert from './components/alert';\r\nimport { AsideLayout } from './components/asideLayout';\r\nimport { pointAdded, pointRemoved } from './action';\r\nimport { MapButton } from './components/mapButton';\r\nimport ReactGA from \"react-ga4\";\r\n\r\nexport function Points(props) {\r\n const [fields, setFields] = React.useState({\r\n \"captcha\": '',\r\n \"arePointsDataCompleted\": getArePointsDataCompleted(),\r\n \"pointsCount\": props.store.getState().trajectoryPoints?.points?.length ?? 0,\r\n \"start\": props.store.getState().trajectoryPoints?.start,\r\n \"end\": props.store.getState().trajectoryPoints?.end\r\n });\r\n const [errors, setErrors] = React.useState({captcha: ''}); \r\n const [actualDrawState, setActualDrawState] = React.useState(drawState.MOVEMAP); \r\n const [redirect, setRedirect] = React.useState(areRoverDataComplete()? Pages.Points: Pages.Rover); \r\n const [captchaImg, setCaptchaImg] = React.useState(null); \r\n const [drawScenario] = React.useState(createDrawScenarioWithReduxAction); \r\n const [removeScenario] = React.useState(createRemoveScenarioWithReduxAction);\r\n\r\n function getArePointsDataCompleted() {\r\n let trajectoryPoints = props.store.getState().trajectoryPoints;\r\n return trajectoryPoints?.start && trajectoryPoints?.end && trajectoryPoints?.points\r\n }\r\n\r\n useEffect(()=>{\r\n loadImage();\r\n setActualDrawState(getInitialDrawState());\r\n const unsubscribe = subscribeStateToReduxStore();\r\n if (!arePointsDataAlreadySet())\r\n initReduxStore(props.store);\r\n\r\n document.title = \"Points | Route Planning\";\r\n\r\n return () => {\r\n unsubscribe();\r\n }\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n useEffect(() => {\r\n ReactGA.send({ hitType: \"pageview\", page: window.location.pathname });\r\n }, []);\r\n\r\n function initReduxStore(store) {\r\n store.dispatch(pointAdded({captcha:''}));\r\n }\r\n\r\n function subscribeStateToReduxStore() {\r\n return props.store.subscribe(() => {\r\n\r\n let trajectoryPoints = props.store.getState().trajectoryPoints;\r\n let formFields = {};\r\n formFields[\"start\"] = trajectoryPoints?.start;\r\n formFields[\"points\"] = trajectoryPoints?.points;\r\n formFields[\"end\"] = trajectoryPoints?.end;\r\n formFields[\"captcha\"] = trajectoryPoints?.captcha;\r\n formFields[\"arePointsDataCompleted\"] = trajectoryPoints.start && trajectoryPoints.end && trajectoryPoints.points;\r\n formFields[\"pointsCount\"] = trajectoryPoints?.points && trajectoryPoints.points.length > 0 ? trajectoryPoints.points.length : 0;\r\n setFields(formFields);\r\n });\r\n }\r\n\r\n function arePointsDataAlreadySet() {\r\n return props.store.getState()?.trajectoryPoints && !isObjectEmpty(props.store.getState()?.trajectoryPoints) && props.store.getState()?.trajectoryPoints.captcha !== undefined && props.store.getState()?.trajectoryPoints.captcha !== null;\r\n }\r\n\r\n function areRoverDataComplete() {\r\n let rover = props.store.getState().rover;\r\n return rover.length && rover.turningRadius && rover.wheelDistance;\r\n }\r\n\r\n if (redirect === Pages.Points)\r\n {\r\n let positionOfRotationAxis = props.store.getState().rover.positionOfRotationAxis;\r\n let positionOfGnsReceiver = props.store.getState().rover.positionOfGnsReceiver;\r\n let points = [];\r\n\r\n if (props.store.getState().trajectoryPoints.start)\r\n points.push(props.store.getState().trajectoryPoints.start);\r\n points = points.concat(props.store.getState().trajectoryPoints.points);\r\n if (props.store.getState().trajectoryPoints.end)\r\n points.push(props.store.getState().trajectoryPoints.end);\r\n\r\n return <>\r\n {/* [BLOCK] Map */}\r\n
\r\n
\r\n setActualDrawState(drawState.MOVEMAP)}>\r\n \r\n \r\n setActualDrawState(drawState.START)}>\r\n Start Start\r\n \r\n setActualDrawState( drawState.POINTS)}>\r\n Waypoints Waypoints\r\n \r\n setActualDrawState(drawState.END)}>\r\n End End\r\n \r\n { props.store.dispatch(pointsMapReseted()); }} className='btn-danger'>\r\n Clear map\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {positionOfRotationAxis && }\r\n {positionOfGnsReceiver && }\r\n \r\n \r\n
\r\n {/* [BLOCK] Aside */}\r\n \r\n
\r\n

1) Define start point

\r\n
\r\n \r\n Start point\r\n
\r\n
\r\n
\r\n

2) Define waypoints

\r\n
\r\n {fields[\"pointsCount\"]}\r\n Waypoints\r\n
\r\n
\r\n
\r\n

1) Define end point

\r\n
\r\n \r\n End point\r\n
\r\n
\r\n \r\n {captchaImg &&\r\n
\r\n
\r\n loadImage()}/>\r\n
\r\n
\r\n \r\n
\r\n props.store.dispatch(pointAdded({captcha:e.target.value}))}\r\n onKeyPress={handleCaptchaKeypress}\r\n />\r\n
\r\n {errors[\"captcha\"] && {errors[\"captcha\"]}} \r\n
\r\n
\r\n }\r\n\r\n \r\n
\r\n
\r\n {/*error && { setErrors(null)}} variant='danger'>{error}*/}\r\n
\r\n \r\n }\r\n else\r\n return \r\n\r\n async function generateRoute() {\r\n let captchaOk = await processCaptcha();\r\n if (captchaOk && handleValidation() && fields[\"arePointsDataCompleted\"] && !objectPropsHasValues(errors)) {\r\n setRedirect(Pages.PointsResult);\r\n }\r\n }\r\n\r\n function handleCaptchaKeypress(e) {\r\n if (e.charCode === 13) {\r\n e.preventDefault();\r\n generateRoute();\r\n }\r\n };\r\n\r\n function handleValidation() {\r\n let error = {};\r\n return (((captchaImg === null || captchaImg === undefined) || checkValueIsSetOrAddError(\"captcha\", error, true)));\r\n }\r\n\r\n function afterFeatureAdded() {\r\n setActualDrawState(drawState.MOVEMAP)\r\n }\r\n\r\n function checkValueIsSetOrAddError(propertyName, error, setState = false) {\r\n let result = true;\r\n if(!fields[propertyName]){\r\n error[propertyName] = \"Cannot be empty\";\r\n result = false;\r\n }\r\n \r\n if (setState && !isObjectEmpty(error))\r\n setErrors(error);\r\n return result;\r\n }\r\n\r\n async function processCaptcha() {\r\n if (captchaImg)\r\n return true;\r\n\r\n return (!await loadImage());\r\n }\r\n\r\n function createDrawScenarioWithReduxAction() {\r\n let drawScenario = new Map();\r\n //start pro prvni bod..end nebude\r\n drawScenario.set(drawState.START, (point) => { \r\n return pointAdded({start: point})\r\n });\r\n drawScenario.set(drawState.POINTS, (point) => { \r\n return pointAdded({points: point});\r\n });\r\n\r\n drawScenario.set(drawState.END, (point) => { \r\n return pointAdded({end: point});\r\n });\r\n return drawScenario; \r\n }\r\n\r\n function createRemoveScenarioWithReduxAction() {\r\n let removeScenario = new Map();\r\n removeScenario.set(drawState.START, () => { \r\n return pointAdded({start: null})\r\n });\r\n removeScenario.set(drawState.POINTS, (id) => { \r\n return pointRemoved(id);\r\n });\r\n\r\n removeScenario.set(drawState.END, () => { \r\n return pointAdded({end: null});\r\n });\r\n return removeScenario; \r\n }\r\n\r\n function getFeatureIdBystate(myDrawState) {\r\n switch(myDrawState) {\r\n case drawState.START: return props.store.getState()?.trajectoryPoints?.start?.Id;\r\n case drawState.END: return props.store.getState()?.trajectoryPoints?.end?.Id;\r\n default: return null; \r\n }\r\n }\r\n\r\n function isFeatureDone(stepState) {\r\n return fields[stepState]? \"done\" : \"\";\r\n }\r\n\r\n /*function drawStateHandler(state) {\r\n let newState = {drawState:state};\r\n if (state === drawState.NONE)\r\n newState.drawing = false;\r\n this.setState(newState);\r\n }*/\r\n\r\n function getInitialDrawState() {\r\n let points = props.store.getState().trajectoryPoints.points;\r\n if (points && points.length >= 2) return drawState.END;\r\n if (points && points.length === 1) return drawState.POINTS;\r\n \r\n return drawState.START\r\n }\r\n\r\n function getPreventUnorientedPoint(myDrawState) {\r\n return myDrawState === drawState.START;\r\n }\r\n\r\n async function loadImage() {\r\n let response = await fetch('/api/Home/GetCaptchaImage',\r\n {\r\n mode: 'cors',\r\n credentials: 'include'\r\n });\r\n\r\n if (response.status === \"204\") return false;\r\n // console.log(response.text);\r\n let blob = await response.blob();\r\n setCaptchaImg(URL.createObjectURL(blob));\r\n return true;\r\n }\r\n\r\n function isObjectEmpty(obj) {\r\n return obj\r\n && Object.keys(obj).length === 0\r\n && Object.getPrototypeOf(obj) === Object.prototype\r\n } \r\n\r\n function objectPropsHasValues(obj) {\r\n for (const key in obj) {\r\n if (obj[key])\r\n return true;\r\n }\r\n return false;\r\n } \r\n};","import React, { useEffect } from 'react';\r\nimport ReactGA from \"react-ga4\";\r\n\r\nconst PageNotFound = () => {\r\n useEffect(() => {\r\n ReactGA.send({ \r\n hitType: \"pageview\", page: window.location.pathname });\r\n }, []);\r\n\r\n return (\r\n <>\r\n
\r\n

Error 404

\r\n
\r\n \"Error\r\n

Sorry...

\r\n

The page you are looking for does not exist.

\r\n
\r\n Home\r\n
\r\n
\r\n
{/* [ALERTS]*/}
\r\n \r\n )\r\n}\r\n\r\nexport default PageNotFound","import React, { useEffect } from 'react';\r\nimport ReactGA from \"react-ga4\";\r\n\r\nconst InternalServerError= () => {\r\n useEffect(() => {\r\n ReactGA.send({ \r\n hitType: \"pageview\", page: window.location.pathname });\r\n }, []);\r\n\r\n return (\r\n
\r\n

Error 500

\r\n
\r\n \"Error\r\n

Sorry...

\r\n

We have some troubles with our server.

\r\n

Refresh the site or feel free to contact us.

\r\n
\r\n Home\r\n Contact us\r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default InternalServerError;","import react from 'react';\n\nclass ErrorBoundary extends react.Component {\n constructor(props) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error) {\n // Update state so the next render will show the fallback UI.\n return { hasError: true };\n }\n\n componentDidCatch(error, errorInfo) {\n // You can also log the error to an error reporting service\n // logErrorToMyService(error, errorInfo); report and log\n }\n\n render() {\n if (this.state.hasError) {\n // You can render any custom fallback UI\n return
\n
\n \"Error\n

Sorry...

\n

Something went wrong.

\n

Refresh the site. If the error persists, feel free to contact us.

\n \n
\n
\n }\n\n return this.props.children; \n }\n}\n\nexport default ErrorBoundary;","import { useEffect } from \"react\";\r\nimport {Rover} from './Rover';\r\nimport {Field} from './Field';\r\nimport PointsResult from './Points-Result';\r\nimport FieldResult from './Field-Result';\r\nimport ObstaclesResult from './Obstacles-Result';\r\nimport {Obstacles} from './Obstacles';\r\nimport {Points} from './Points';\r\nimport {BrowserRouter, Route, Switch} from 'react-router-dom';\r\nimport PageNotFound from './errors/404';\r\nimport InternalServerError from './errors/500';\r\nimport ErrorBoundary from './components/errorBoundary';\r\nimport CookieConsent, {\r\n getCookieConsentValue,\r\n Cookies,\r\n} from \"react-cookie-consent\";\r\nimport ReactGA from \"react-ga4\";\r\n\r\nconst TRACKING_ID = \"G-KDC397W07D\"; \r\n\r\nfunction App(props) {\r\n const handleAcceptCookie = () => {\r\n ReactGA.initialize(TRACKING_ID);\r\n };\r\n\r\n const handleDeclineCookie = () => {\r\n //remove google analytics cookies\r\n Cookies.remove(\"_ga\");\r\n Cookies.remove(\"_gat\");\r\n Cookies.remove(\"_gid\");\r\n };\r\n\r\n useEffect(() => {\r\n const isConsent = getCookieConsentValue();\r\n if (isConsent === \"true\") {\r\n handleAcceptCookie();\r\n }\r\n }, []); \r\n \r\n const simulateCookieConsentAcceptClick = () => {\r\n document.getElementById(\"rcc-confirm-button\").click();\r\n }\r\n \r\n return (\r\n <>\r\n
\r\n \"GNSS\r\n \"Navmatix\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

We use cookies

\r\n
\r\n
\r\n

We use cookies to ensure that we give you the best experience on our website. If you continue to use this site we will assume that you agree with it.

\r\n Privacy policy\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n );\r\n}\r\n\r\nexport default App;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\n\r\nimport reducer from './reducer';\r\nimport { createStore } from 'redux';\r\nimport { BrowserRouter } from \"react-router-dom\";\r\n\r\nconst store = createStore(reducer);\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('app')\r\n);","const drawState = {\n\tNONE: 'none',\n\tSTART: 'start',\n\tEND: 'end',\n\tAREAPOLYGON: 'areaPolygon',\n\tOBSTACLES: 'obstacles',\n\tPOINTS: 'points',\n}\nexport default drawState;\n\nexport function doNotAutochangeState(comparedDrawState) {\n\treturn (comparedDrawState === drawState.OBSTACLES);\n}","export const SET_ROVER = 'SET_ROVER';\r\nexport const SET_FIELD = 'SET_FIELD';\r\nexport const REMOVE_FIELD = 'REMOVE_FIELD';\r\nexport const RESET_FIELD_MAP = 'RESET_FIELD_MAP';\r\nexport const SET_OBSTACLES = 'SET_OBSTACLES';\r\nexport const REMOVE_OBSTACLES = 'REMOVE_OBSTACLES';\r\nexport const RESET_OBSTACLES_MAP = 'RESET_OBSTACLES_MAP';\r\nexport const SET_POINTS = 'SET_POINTS';\r\nexport const REMOVE_POINTS = 'REMOVE_POINTS';\r\nexport const RESET_POINTS_MAP = 'RESET_POINTS_MAP';\r\nexport const FIELD_RESULT_PAGE_LOADED = 'FIELD_RESULT_PAGE_LOADED';\r\nexport const FIELD_RESULT_PAGE_UNLOADED = 'FIELD_RESULT_PAGE_UNLOADED';\r\n\r\n\r\n","const pointType = {\n\tSTART: 1,\n\tEND: 2,\n\tUNORIENTED: 4,\n TRANSIT: 8,\n}\n\nexport default pointType;\n","import { createStore } from 'redux';\nimport reducer from './reducer';\n\nconst store = createStore(reducer);\nexport default store;","import react from 'react';\r\n\r\nexport default class Alert extends react.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = { \r\n onClick: props.onClick,\r\n variant: props.variant,\r\n children: props.children\r\n };\r\n }\r\n\r\n componentWillReceiveProps(props) {\r\n this.setState(\r\n { \r\n message: props.message, \r\n }); \r\n }\r\n\r\n render() {\r\n // Set alert variant class\r\n let variantClass = '';\r\n switch (this.state.variant) {\r\n case 'danger' || 'error':\r\n variantClass = 'alert-danger';\r\n break;\r\n case 'warning':\r\n variantClass = 'alert-warning';\r\n break;\r\n case 'success':\r\n variantClass = 'alert-success';\r\n break;\r\n case 'info':\r\n variantClass = 'alert-info';\r\n break;\r\n default:\r\n variantClass = 'alert-secondary';\r\n }\r\n\r\n return
\r\n
\r\n {this.state.children} \r\n
\r\n {this.state.onClick && }\r\n
\r\n }\r\n}","import React from \"react\";\r\nimport Mp from \"ol/Map\";\r\nimport View from \"ol/View\";\r\nimport * as source from 'ol/source';\r\nimport * as control from 'ol/control';\r\nimport * as layer from 'ol/layer';\r\nimport Feature from 'ol/Feature';\r\nimport * as geom from 'ol/geom';\r\nimport * as style from 'ol/style';\r\nimport pointType from \"../enums/pointType\";\r\nimport drawState from '../enums/drawState';\r\nimport \"../mapComponent/map.css\";\r\nimport 'ol/ol.css';\r\nimport { DEFAULT_RADIUS} from 'ol/sphere';\r\nimport * as olProj from 'ol/proj';\r\n\r\nconst upperZIndex = 100;\r\nconst lowerZIndex = 99;\r\n\r\nclass ResultMap extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.mapRef = React.createRef();\r\n this.overlayRef = React.createRef();\r\n this.wayPoints = props.wayPoints;\r\n this.trajectoryPoints = this.transfromTrajectoryPoints(props.trajectoryPoints);\r\n this.loaded = props.loaded;\r\n this.wheelDistance = props.wheelDistance;\r\n this.polygons = props.polygons;\r\n this.areaPolygon = props.areaPolygon;\r\n this.linesBetweenPoints = props.linesBetweenPoints;\r\n this.map = undefined;\r\n this.sourceLine = undefined;\r\n this.vectorLine = undefined;\r\n this.sourceLineToChosenPoint = undefined;\r\n this.vectorLineToChosenPoint = undefined;\r\n this.displaySource = undefined;\r\n this.displayLineSource = undefined;\r\n this.displayVectorLayer = undefined;\r\n this.movementLayer = undefined;\r\n this.polygonSource = undefined;\r\n this.polygonVectorLayer = undefined;\r\n this.vectorSource = undefined;\r\n this.animationSource = undefined;\r\n this.props = props;\r\n this.inAnimation = false;\r\n this.pause = false;\r\n this.animationStep = 3;\r\n this.clickPointCallback = this.clickPointCallback.bind(this);\r\n this.setAnimationSpeed = this.setAnimationSpeed.bind(this);\r\n this.animationDelay = 2;\r\n this.animationDelayEveryNTh = 1;\r\n }\r\n\r\n clickPointCallback(actualTrajectoryPointNo) {\r\n this.draw_movement_route_to_point(actualTrajectoryPointNo);\r\n }\r\n\r\n transfromTrajectoryPoints(points) {\r\n let transformedPoints = { points:[]};\r\n if (!Array.isArray(this.wayPoints) || this.wayPoints.length === 0 || !points || !Array.isArray(points.points))\r\n return;\r\n let startPoint = this.wayPoints[0];\r\n\r\n points.points.forEach(pointCoords => {\r\n let startPointTransformed = olProj.transform([startPoint.Lon, startPoint.Lat], 'EPSG:3857', 'EPSG:4326');\r\n let transformedCoords = this.transformPointToESPG3857Units(pointCoords[0], pointCoords[1], startPointTransformed);\r\n let transformedCircleCenter = (pointCoords[3] || pointCoords[4]) ? this.transformPointToESPG3857Units(pointCoords[3], pointCoords[4], startPointTransformed) : [0,0];\r\n transformedPoints.points.push([...transformedCoords, pointCoords[2], transformedCircleCenter[0], transformedCircleCenter[1]])\r\n });\r\n\r\n return transformedPoints;\r\n }\r\n\r\n transformPointToESPG3857Units(relativeLon, relativeLat, startPoint) {\r\n let lat = startPoint[1] + this.toDegrees(Math.sin((relativeLat/DEFAULT_RADIUS)/2) * 2.0);\r\n let middleLatRadius = Math.cos(this.toRadians(startPoint[1] + ((lat - startPoint[1])/2))) * DEFAULT_RADIUS;\r\n let lon = startPoint[0] + this.toDegrees(Math.sin((relativeLon/middleLatRadius)/2) * 2.0);\r\n\r\n return olProj.transform([lon, lat], 'EPSG:4326', 'EPSG:3857');\r\n }\r\n\r\n toDegrees (angle) {\r\n return angle * (180 / Math.PI);\r\n }\r\n\r\n toRadians (angle) {\r\n return angle * (Math.PI/180);\r\n }\r\n \r\n pauseAnimation() {\r\n this.pause = true;\r\n }\r\n resumeAnimation() {\r\n this.pause = false;\r\n }\r\n\r\n redrawAnimation() {\r\n if (this.inAnimation) {\r\n this.skipAnimation = true;\r\n }\r\n else { \r\n this.draw_movement_animation();\r\n this.skipAnimation = true;\r\n }\r\n this.pause = false;\r\n }\r\n\r\n drawAnimation() {\r\n this.pause = false;\r\n if (!this.inAnimation) { \r\n this.draw_movement_animation();\r\n }\r\n //pauza\r\n else if (this.pause) {\r\n this.pause = false;\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.displaySource = new source.Vector();\r\n this.displayLineSource = new source.Vector();\r\n this.polygonSource = new source.Vector();\r\n\r\n let raster = new layer.Tile({\r\n source: new source.OSM()\r\n });\r\n\r\n this.vectorSource = new source.Vector({\r\n projection: 'EPSG:3857',\r\n });\r\n\r\n this.animationSource = new source.Vector({\r\n projection: 'EPSG:3857',\r\n });\r\n\r\n this.draw_inputs();\r\n \r\n this.displayVectorLayer = new layer.Vector({\r\n source: this.displaySource,\r\n style: this.displayStyleFunction.bind(this),\r\n });\r\n\r\n this.displayLineLayer = new layer.Vector({\r\n source: this.displayLineSource,\r\n style: this.displayLineStyleFunction.bind(this),\r\n });\r\n\r\n this.polygonVectorLayer = new layer.Vector({\r\n source: this.polygonSource,\r\n });\r\n\r\n this.map = new Mp({\r\n layers: [raster, this.displayVectorLayer, this.displayLineLayer, this.polygonVectorLayer],\r\n target: 'map',\r\n controls: control.defaults({ attribution: false, zoom : true, rotate: false }),\r\n renderer: 'webgl',\r\n view: new View({\r\n center: [2022044.5499328873, 6354139.831606114],\r\n projection: 'EPSG:3857',\r\n zoom: 19\r\n })\r\n });\r\n\r\n this.set_map_position();\r\n\r\n this.map.getView().setZoom(\r\n this.map.getView().getZoom() - 1,\r\n )\r\n\r\n if (!this.trajectoryPoints)\r\n return;\r\n\r\n this.draw_movement_route(this.trajectoryPoints.points, this.wheelDistance);\r\n }\r\n\r\n set_map_position() {\r\n var polygons = this.polygonSource.getFeatures();\r\n if (polygons.length > 0) {\r\n let dataExtent = this.polygonSource.getExtent();\r\n if (dataExtent)\r\n this.map.getView().fit(dataExtent, this.map.getSize());\r\n }\r\n else {\r\n let dataExtent = this.displaySource.getExtent();\r\n if (dataExtent)\r\n this.map.getView().fit(dataExtent, this.map.getSize());\r\n }\r\n }\r\n\r\n draw_inputs() {\r\n if (this.areaPolygon)\r\n this.draw_input_polygon(this.areaPolygon[0]);\r\n\r\n if (this.wayPoints) {\r\n for (let wayPoint of this.wayPoints) {\r\n this.draw_input_point(wayPoint);\r\n }\r\n\r\n if (this.linesBetweenPoints)\r\n this.redrawLinesBetweenPonts();\r\n }\r\n\r\n if (this.polygons) {\r\n for (let polygon of this.polygons) {\r\n this.draw_input_polygon(polygon);\r\n }\r\n }\r\n }\r\n\r\n redrawLinesBetweenPonts() {\r\n this.displayLineSource.clear();\r\n let lastPoint;\r\n let allPoints = this.wayPoints;\r\n for (let point of allPoints) {\r\n if (!point || !lastPoint) {\r\n lastPoint = point;\r\n continue;\r\n }\r\n let points = [\r\n [lastPoint.Lon, lastPoint.Lat], [point.Lon, point.Lat]\r\n ];\r\n let feature = new Feature({\r\n geometry: new geom.LineString(points),\r\n });\r\n this.displayLineSource.addFeature(feature);\r\n \r\n lastPoint = point;\r\n }\r\n }\r\n\r\n displayStyleFunction(feature) {\r\n let styles = [];\r\n if (feature.values_.rotation !== undefined && feature.values_.rotation !== null) {\r\n styles.push(\r\n new style.Style({\r\n image: new style.Icon({\r\n src: this.getIconByPointType(feature?.pointType),\r\n rotateWithView: true,\r\n rotation: -feature.values_.rotation\r\n }),\r\n })\r\n );\r\n }\r\n return styles;\r\n };\r\n\r\n displayLineStyleFunction(feature) {\r\n let styles = [];\r\n\r\n styles.push(\r\n new style.Style({\r\n stroke: new style.Stroke({\r\n color: [250, 166, 34, 255],\r\n width: 5,\r\n lineDash: [10],\r\n lineDashOffset: 30\r\n })\r\n })\r\n );\r\n return styles;\r\n}\r\n\r\n draw_input_point(point) {\r\n if (!point)\r\n return;\r\n\r\n let rotation = Math.atan2(point.VectorY, point.VectorX);\r\n let feature = new Feature({\r\n geometry: new geom.Point([point.Lon, point.Lat]),\r\n rotation: rotation\r\n });\r\n feature.pointType = point.PointType;\r\n this.displaySource.addFeature(feature);\r\n }\r\n\r\n draw_input_polygon(polygon) {\r\n if (!polygon && polygon.length !== 1)\r\n return;\r\n\r\n let feature = new Feature({\r\n geometry: new geom.Polygon(polygon.coordinates)\r\n });\r\n this.set_polygon_style(feature, polygon);\r\n this.polygonSource.addFeature(feature);\r\n }\r\n\r\n set_polygon_style(feature, polygon) {\r\n if (polygon.drawStateContext === drawState.AREAPOLYGON) {\r\n //this.removeOldPolygon(this.state.drawState);\r\n feature.setStyle(\r\n new style.Style({\r\n stroke: new style.Stroke({\r\n color: [52, 168, 158, 255],\r\n width: 2,\r\n }),\r\n fill: new style.Fill({\r\n color: [190, 235, 214, 0.3]\r\n })\r\n }));\r\n }\r\n else {\r\n feature.setStyle(\r\n new style.Style({\r\n stroke: new style.Stroke({\r\n color: [86, 92, 94, 255],\r\n width: 2,\r\n }),\r\n fill: new style.Fill({\r\n color: [164, 163, 153, 0.3]\r\n })\r\n }));\r\n }\r\n }\r\n\r\n draw_arc(start_point, end_point, circle, turn_direction, line_style = null, return_points = false, source) {\r\n let translation = [circle[0], circle[1]]\r\n let start_recalc = [start_point[0] - translation[0], start_point[1] - translation[1]]\r\n let end_recalc = [end_point[0] - translation[0], end_point[1] - translation[1]]\r\n let arg_start_recalc = this.calculate_argument(start_recalc)\r\n let arg_end_recalc = this.calculate_argument(end_recalc)\r\n let turning_angle = this.calc_turning_angle(turn_direction, arg_start_recalc, arg_end_recalc)\r\n let radius = this.calc_point_distance(circle, start_point)\r\n let nmb_of_dots = this.get_count_of_arc_points(radius, turning_angle)\r\n let rot_angle_init = turning_angle / nmb_of_dots\r\n let points = this.get_arc_points(nmb_of_dots, rot_angle_init, start_point, circle)\r\n if (return_points)\r\n return points\r\n if (points.length > 0) {\r\n let featureLine = new Feature({\r\n geometry: new geom.LineString(points)\r\n });\r\n if (line_style)\r\n featureLine.setStyle(line_style);\r\n source.addFeature(featureLine);\r\n }\r\n }\r\n \r\n draw_line(start_point, end_point, line_style, source) {\r\n let points = [\r\n [start_point[0], start_point[1]],\r\n [end_point[0], end_point[1]],\r\n ];\r\n \r\n let featureLine = new Feature({\r\n geometry: new geom.LineString(points)\r\n });\r\n featureLine.setStyle(line_style);\r\n source.addFeature(featureLine); \r\n }\r\n\r\n // return angle from 0 to 2pi\r\n calculate_argument(point) {\r\n let x = point[0]\r\n let y = point[1]\r\n if (x > 0 && y >= 0)\r\n return Math.atan(y/x)\r\n if (x === 0 && y >= 0)\r\n return Math.PI/2\r\n if (x < 0 && y > 0)\r\n return Math.PI - Math.atan(y/(-x))\r\n if (x < 0 && y === 0)\r\n return Math.PI\r\n if (x < 0 && y < 0)\r\n return Math.atan(y/x) + Math.PI\r\n if (x === 0 && y < 0)\r\n return Math.PI*1.5\r\n if (x > 0 && y < 0)\r\n return 2*Math.PI - Math.atan((-y)/x)\r\n }\r\n \r\n calc_point_distance(start, end) {\r\n return Math.sqrt(Math.pow(start[0] - end[0], 2) + Math.pow(start[1] - end[1], 2))\r\n }\r\n \r\n calc_turning_angle(turn_direction, arg_start_recalc, arg_end_recalc) {\r\n if (turn_direction === 0) // turn right\r\n {\r\n if (arg_start_recalc <= arg_end_recalc)\r\n return -(2 * Math.PI - (arg_end_recalc - arg_start_recalc))\r\n else\r\n return -(arg_start_recalc - arg_end_recalc)\r\n }\r\n else // turn left\r\n {\r\n if (arg_start_recalc <= arg_end_recalc)\r\n return arg_end_recalc - arg_start_recalc\r\n else\r\n return 2 * Math.PI - (arg_start_recalc - arg_end_recalc)\r\n }\r\n }\r\n\r\n skipPointIfDistanceToNextPointIsLessThan1cm(start_point, end_point) {\r\n return Math.sqrt((start_point[0] - end_point[0])**2 + (start_point[1] - end_point[1])**2) < 0.01;\r\n }\r\n\r\n clearTrajectory() { this.vectorSource.clear(); this.sourceLine.clear(); }\r\n\r\n draw_movement_route(movement_points, line_width) {\r\n let line_style = new style.Style({\r\n stroke: new style.Stroke({\r\n color: 'rgba(255, 199, 5, 0.9)',\r\n width: line_width\r\n }),\r\n })\r\n\r\n this.sourceLine = new source.Vector();\r\n this.vectorLine = new layer.Vector({\r\n source: this.sourceLine\r\n });\r\n\r\n this.draw_movement(movement_points, movement_points.length, line_style, this.sourceLine)\r\n this.map.addLayer(this.vectorLine);\r\n }\r\n\r\n draw_movement_route_to_point(toPointNo) {\r\n //this.tryClearAnimation();\r\n let firstCall = false;\r\n this.tryClearRouteToPoint();\r\n if (this.vectorLineToChosenPoint== null) {\r\n this.sourceLineToChosenPoint = new source.Vector();\r\n this.vectorLineToChosenPoint = new layer.Vector({\r\n source: this.sourceLineToChosenPoint\r\n });\r\n firstCall = true;\r\n }\r\n\r\n //todo line_width\r\n let line_to_chosen_point_style = new style.Style({\r\n stroke: new style.Stroke({\r\n color: 'rgba(255, 0, 0, 0.9)',\r\n width: this.wheelDistance\r\n }),\r\n })\r\n\r\n this.draw_movement(this.trajectoryPoints.points, toPointNo, line_to_chosen_point_style, this.sourceLineToChosenPoint);\r\n if (firstCall)\r\n this.map.addLayer(this.vectorLineToChosenPoint);\r\n\r\n this.vectorLineToChosenPoint.setZIndex(upperZIndex);\r\n if (this.movementLayer)\r\n this.movementLayer.setZIndex(lowerZIndex);\r\n }\r\n\r\n tryClearRouteToPoint() {\r\n if (this.vectorLineToChosenPoint != null) { \r\n var features = this.vectorLineToChosenPoint.getSource().getFeatures();\r\n features.forEach((feature) => {\r\n this.vectorLineToChosenPoint.getSource().removeFeature(feature);\r\n });\r\n }\r\n }\r\n\r\n tryClearAnimation() {\r\n this.animationSource.clear();\r\n }\r\n \r\n draw_movement(movement_points, drawedPointsNo, style, source) {//style, points count, jaka hladina??\r\n for (let i = 0; i < drawedPointsNo - 1; i++) {\r\n let start_point = [movement_points[i][0], movement_points[i][1]]\r\n let end_point = [movement_points[i + 1][0], movement_points[i + 1][1]]\r\n if (this.skipPointIfDistanceToNextPointIsLessThan1cm(start_point, end_point))\r\n continue;\r\n if (movement_points[i][2] === -1) // go straight\r\n this.draw_line(start_point, end_point, style, source)\r\n else if (movement_points[i][2] === 0) // turn right\r\n this.draw_arc(start_point, end_point, [movement_points[i][3], movement_points[i][4]], movement_points[i][2], style, false, source)\r\n else // turn left\r\n this.draw_arc(start_point, end_point, [movement_points[i][3], movement_points[i][4]], movement_points[i][2], style, false, source)\r\n }\r\n }\r\n\r\n resetAnimation() {\r\n if (this.animationSource)\r\n {\r\n this.skipAnimation = true;\r\n this.animationSource.clear();\r\n }\r\n }\r\n\r\n setAnimationSpeed(speedString) {\r\n let speed = parseFloat(speedString)\r\n if (isNaN(speed))\r\n return;\r\n let speed025 = Math.round(speed / 0.25) * 0.25;\r\n\r\n switch(speed025) {\r\n case 3:\r\n this.animationDelay = 0;\r\n this.animationDelayEveryNTh = 3;\r\n break;\r\n case 2.75:\r\n this.animationDelay = 1;\r\n this.animationDelayEveryNTh = 3;\r\n break; \r\n case 2.5:\r\n this.animationDelay = 2;\r\n this.animationDelayEveryNTh = 3;\r\n break;\r\n case 2.25:\r\n this.animationDelay = 3;\r\n this.animationDelayEveryNTh = 2;\r\n break; \r\n case 2:\r\n this.animationDelay = 4;\r\n this.animationDelayEveryNTh = 2;\r\n break;\r\n case 1.75:\r\n this.animationDelay = 5;\r\n this.animationDelayEveryNTh = 2;\r\n break; \r\n case 1.5:\r\n this.animationDelay = 4;\r\n this.animationDelayEveryNTh = 1;\r\n break;\r\n case 1.25:\r\n this.animationDelay = 6;\r\n this.animationDelayEveryNTh = 1;\r\n break; \r\n case 1:\r\n this.animationDelay = 12;\r\n this.animationDelayEveryNTh = 1;\r\n break;\r\n case 0.75:\r\n this.animationDelay = 20;\r\n this.animationDelayEveryNTh = 1;\r\n break; \r\n case 0.5:\r\n this.animationDelay = 30;\r\n this.animationDelayEveryNTh = 1;\r\n break;\r\n case 0.25:\r\n this.animationDelay = 90;\r\n this.animationDelayEveryNTh = 1;\r\n break; \r\n default:\r\n this.animationDelay = 0;\r\n this.animationDelayEveryNTh = 1;\r\n } \r\n } \r\n\r\n async draw_movement_animation() {\r\n this.tryClearRouteToPoint();\r\n this.inAnimation = true;\r\n\r\n if (this.animationSource)\r\n this.animationSource.clear();\r\n let movement_points = this.trajectoryPoints.points; \r\n let line_width = this.wheelDistance;\r\n let animationWasResumed = false;\r\n\r\n var line_style = new style.Style({\r\n stroke: new style.Stroke({\r\n color: 'rgba(119, 13, 255, 0.5)',\r\n width: line_width\r\n }),\r\n });\r\n\r\n this.movementLayer = new layer.Vector({\r\n source: this.animationSource,\r\n });\r\n\r\n this.movementLayer.setZIndex(upperZIndex);\r\n if (this.vectorLineToChosenPoint)\r\n this.vectorLineToChosenPoint.setZIndex(lowerZIndex);\r\n this.map.addLayer(this.movementLayer);\r\n\r\n for (let i = 0; i < movement_points.length; i++) {\r\n let actualAnimationstep = this.animationStep;\r\n let circleAnimationStep = this.animationStep/4;\r\n if (this?.props?.actualPointCallback)\r\n this.props.actualPointCallback(i);\r\n //last point was alredy drawn \r\n if (i === movement_points.length - 1) {\r\n this.inAnimation = false;\r\n return;\r\n }\r\n\r\n let start_point = [movement_points[i][0], movement_points[i][1]]\r\n let end_point = [movement_points[i + 1][0], movement_points[i + 1][1]]\r\n if (this.skipPointIfDistanceToNextPointIsLessThan1cm(start_point, end_point))\r\n continue;\r\n\r\n if (movement_points[i][2] === -1) //go straight\r\n {\r\n let vector = [movement_points[i + 1][0] - movement_points[i][0], movement_points[i + 1][1] - movement_points[i][1]]\r\n let vector_norm = Math.sqrt(Math.pow(vector[0], 2) + Math.pow(vector[1], 2))\r\n vector[0] /= vector_norm;\r\n vector[1] /= vector_norm;\r\n let actual_point = [movement_points[i][0], movement_points[i][1]];\r\n for (let j = 0; j < Math.floor(this.calc_point_distance(movement_points[i], movement_points[i + 1]) / actualAnimationstep); j++) {\r\n if (this.skipAnimation) {\r\n this.resetAnimation();\r\n this.skipAnimation = false;\r\n this.inAnimation = false;\r\n return;\r\n }\r\n\r\n while (this.pause) {\r\n // code block to be executed\r\n await this.resolveAfterMs(1000);\r\n if (this.skipAnimation) {\r\n this.resetAnimation();\r\n this.skipAnimation = false;\r\n this.inAnimation = false;\r\n return;\r\n }\r\n if (!animationWasResumed)\r\n animationWasResumed = true;\r\n }\r\n //bod\r\n if (animationWasResumed) {\r\n animationWasResumed = false;\r\n this.tryClearRouteToPoint();\r\n this.movementLayer.setZIndex(upperZIndex);\r\n //smazat caru \r\n }\r\n //speedup animation with lowering delay frequency\r\n if (j % this.animationDelayEveryNTh === 0)\r\n await this.delay(this.animationDelay);\r\n let nextPoint = [actual_point[0] + vector[0] * actualAnimationstep, actual_point[1] + vector[1] * actualAnimationstep];\r\n let points = [\r\n [actual_point[0], actual_point[1]],\r\n nextPoint\r\n ];\r\n actual_point =nextPoint\r\n let featureLine = new Feature({\r\n geometry: new geom.LineString(points)\r\n });\r\n featureLine.setStyle(line_style);\r\n this.animationSource.addFeature(featureLine);\r\n }\r\n if (this.calc_point_distance(movement_points[i], movement_points[i + 1]) % actualAnimationstep !== 0) // do the rest of the last step\r\n {\r\n let calculatedStep = this.calc_point_distance(movement_points[i], movement_points[i + 1]) % actualAnimationstep;\r\n\r\n await this.delay(this.AnimationDelay); \r\n let points = [\r\n [actual_point[0], actual_point[1]],\r\n [actual_point[0] + vector[0] * calculatedStep, actual_point[1] + vector[1] * calculatedStep],\r\n ];\r\n let featureLine = new Feature({\r\n geometry: new geom.LineString(points)\r\n });\r\n featureLine.setStyle(line_style);\r\n this.animationSource.addFeature(featureLine);\r\n }\r\n }\r\n else // turn left or right\r\n {\r\n let translation = [movement_points[i][3], movement_points[i][4]]\r\n let start_recalc = [start_point[0] - translation[0], start_point[1] - translation[1]]\r\n let end_recalc = [end_point[0] - translation[0], end_point[1] - translation[1]]\r\n let arg_start_recalc = this.calculate_argument(start_recalc)\r\n let arg_end_recalc = this.calculate_argument(end_recalc)\r\n let turning_angle = this.calc_turning_angle(movement_points[i][2], arg_start_recalc, arg_end_recalc)\r\n let radius_of_circle = this.calc_point_distance(translation, start_point);\r\n let angle_step =0;\r\n if (movement_points[i][2] === 0)\r\n angle_step = -1 * circleAnimationStep / radius_of_circle\r\n else\r\n angle_step = circleAnimationStep / radius_of_circle\r\n if ((angle_step < 2 * Math.PI) && (angle_step < Math.abs(turning_angle))) {\r\n let actual_point_recalc = start_recalc\r\n let rot_matrix = [[Math.cos(angle_step), -Math.sin(angle_step)], [Math.sin(angle_step), Math.cos(angle_step)]]\r\n for (let j = 0; j < Math.floor(Math.abs(turning_angle) / Math.abs(angle_step)); j++) {\r\n if (this.skipAnimation) {\r\n this.resetAnimation();\r\n this.inAnimation = false;\r\n this.skipAnimation = false;\r\n return;\r\n }\r\n //speedup animation with lowering delay frequency\r\n if (j % this.animationDelayEveryNTh/2 === 0)\r\n await this.delay(this.AnimationDelay);\r\n\r\n let points = [\r\n [actual_point_recalc[0] + translation[0], actual_point_recalc[1] + translation[1]],\r\n [rot_matrix[0][0] * actual_point_recalc[0] + rot_matrix[0][1] * actual_point_recalc[1] + translation[0], rot_matrix[1][0] * actual_point_recalc[0] + rot_matrix[1][1] * actual_point_recalc[1] + translation[1]],\r\n ];\r\n actual_point_recalc = [rot_matrix[0][0] * actual_point_recalc[0] + rot_matrix[0][1] * actual_point_recalc[1], rot_matrix[1][0] * actual_point_recalc[0] + rot_matrix[1][1] * actual_point_recalc[1]]\r\n //never used actual_point = [actual_point_recalc[0] + translation[0], actual_point_recalc[1] + translation[1]]\r\n let featureLine = new Feature({\r\n geometry: new geom.LineString(points)\r\n });\r\n featureLine.setStyle(line_style);\r\n this.animationSource.addFeature(featureLine);\r\n }\r\n if (Math.abs(turning_angle) % Math.abs(angle_step) !== 0) // do rest of the last step\r\n {\r\n angle_step = Math.abs(turning_angle) % Math.abs(angle_step)\r\n if (movement_points[i][2] === 0)\r\n angle_step = -angle_step\r\n let rot_matrix = [[Math.cos(angle_step), -Math.sin(angle_step)], [Math.sin(angle_step), Math.cos(angle_step)]]\r\n let points = [\r\n [actual_point_recalc[0] + translation[0], actual_point_recalc[1] + translation[1]],\r\n [rot_matrix[0][0] * actual_point_recalc[0] + rot_matrix[0][1] * actual_point_recalc[1] + translation[0], rot_matrix[1][0] * actual_point_recalc[0] + rot_matrix[1][1] * actual_point_recalc[1] + translation[1]],\r\n ];\r\n let featureLine = new Feature({\r\n geometry: new geom.LineString(points)\r\n });\r\n featureLine.setStyle(line_style);\r\n this.animationSource.addFeature(featureLine);\r\n }\r\n }\r\n }\r\n }\r\n this.inAnimation = false;\r\n }\r\n\r\n resolveAfterMs(ms) {\r\n return new Promise(resolve => {\r\n setTimeout(() => {\r\n resolve('resolved');\r\n }, ms);\r\n });\r\n }\r\n\r\n delay = ms => new Promise(res => setTimeout(setTimeout(res, ms), 0));\r\n \r\n get_arc_points(nmb_of_dots, rot_angle_init, start_point, circle) {\r\n let translation = [circle[0], circle[1]]\r\n let start_recalc = [start_point[0] - translation[0], start_point[1] - translation[1]]\r\n let points = [];\r\n for (let i = 0; i <= nmb_of_dots; i++) // draw arc\r\n {\r\n let rot_angle = i * rot_angle_init\r\n let rot_matrix = [[Math.cos(rot_angle), -Math.sin(rot_angle)], [Math.sin(rot_angle), Math.cos(rot_angle)]]\r\n let point = [rot_matrix[0][0] * start_recalc[0] + rot_matrix[0][1] * start_recalc[1], rot_matrix[1][0] * start_recalc[0] + rot_matrix[1][1] * start_recalc[1]]\r\n point = [point[0] + translation[0], point[1] + translation[1]]\r\n points.push(point);\r\n }\r\n return points\r\n }\r\n \r\n get_count_of_arc_points(radius, angle) {\r\n let percentage_step = 0.01\r\n let length_of_arc = (2 * Math.PI * radius * angle) / (2 * Math.PI)\r\n let step = percentage_step * length_of_arc\r\n let count_of_points = Math.round(length_of_arc / step) + 1\r\n return count_of_points\r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n
\r\n
Overlay
\r\n \r\n );\r\n }\r\n\r\n getIconByPointType(myPointType) {\r\n if (!myPointType)\r\n return '/arrow.png';\r\n\r\n switch(myPointType) {\r\n case pointType.START: {\r\n return '/start-oriented.png';\r\n }\r\n case pointType.END: {\r\n return '/end-oriented.png';\r\n }\r\n case pointType.UNORIENTED | pointType.TRANSIT: {\r\n return '/point.png';\r\n }\r\n case pointType.TRANSIT: {\r\n return '/point-oriented.png';\r\n }\r\n default:\r\n return '/point-oriented.png'; \r\n }\r\n }\r\n}\r\n\r\nexport default ResultMap;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import superagentPromise from 'superagent-promise';\r\nimport _superagent from 'superagent';\r\nimport {getDistance} from 'ol/sphere';\r\nimport * as olProj from 'ol/proj';\r\n\r\nconst superagent = superagentPromise(_superagent, global.Promise);\r\nconst responseBody = res => res.body;\r\n\r\nconst optimalTrajectoryRequests = {\r\n //get data from redux\r\n get: (\r\n url,\r\n captcha,\r\n points, \r\n length,\r\n wheelDistance, \r\n radiusMiddle,\r\n positionOfRotationAxis,\r\n positionOfGnsReceiver,\r\n startLon,\r\n startLat,\r\n startVectX,\r\n startVectY,\r\n endLon,\r\n endLat,\r\n endVectX,\r\n endVectY,\r\n rowsDistance, \r\n rowsAngle,\r\n aroundPerimeter,\r\n ) =>\r\n superagent.get(`${url}`)\r\n .query({captchaText:captcha}) \r\n .query({ points:points})\r\n .query({ length: length })\r\n .query({ wheelDistance: wheelDistance })\r\n .query({ radiusMiddle: radiusMiddle })\r\n .query({ positionOfRotationAxis: positionOfRotationAxis })\r\n .query({ positionOfGnsReceiver: positionOfGnsReceiver })\r\n .query({ startLon: startLon }) \r\n .query({ startLat: startLat })\r\n .query({ startVectX: startVectX })\r\n .query({ startVectY: startVectY })\r\n .query({ endLon: endLon })\r\n .query({ endLat: endLat })\r\n .query({ endVectX: endVectX })\r\n .query({ endVectY: endVectY })\r\n .query({ lineDistance: rowsDistance })\r\n .query({ lineAngle: rowsAngle })\r\n .query({ aroundPerimeter: aroundPerimeter })\r\n .withCredentials()\r\n \r\n .then(responseBody),\r\n};\r\n\r\nconst OptimalTrajectory = {\r\n getTrajectoryPoints(rover, field) {\r\n let startTransformed = distanceFromRefPoint1(field.start, field.start);\r\n let endTransformed = distanceFromRefPoint1(field.end, field.start);\r\n let startVectorTransformed = distanceFromRefPoint1({Lon: (field.start.Lon + field.start.VectorX), Lat: (field.start.Lat + field.start.VectorY)}, field.start);\r\n let endVectorTransformed = distanceFromRefPoint1({Lon: field.end.Lon + field.end.VectorX, Lat: field.end.Lat + field.end.VectorY}, field.end);\r\n\r\n return optimalTrajectoryRequests.get(\r\n '/api/TrajectoryPlanning/Points',\r\n field.captcha,\r\n JSON.stringify(pointsArrayToDistancesFromRefPoint(field.areaPolygon[0].coordinates[0], field.start)),\r\n rover.length, \r\n rover.wheelDistance, \r\n rover.turningRadius,\r\n rover.positionOfRotationAxis,\r\n rover.positionOfGnsReceiver,\r\n startTransformed.lonMeters,\r\n startTransformed.latMeters,\r\n startVectorTransformed.lonMeters,\r\n startVectorTransformed.latMeters,\r\n endTransformed.lonMeters,\r\n endTransformed.latMeters,\r\n endVectorTransformed.lonMeters,\r\n endVectorTransformed.latMeters,\r\n field.rowsDistance, \r\n field.rowsAngle,\r\n field.aroundPerimeter\r\n )\r\n }\r\n};\r\n\r\nconst pointsRequests = {\r\n //get data from redux\r\n get: (\r\n url,\r\n captcha,\r\n points, \r\n length,\r\n wheelDistance, \r\n radiusMiddle,\r\n positionOfRotationAxis,\r\n positionOfGnsReceiver,\r\n ) =>\r\n superagent.get(`${url}`)\r\n .query({captchaText:captcha}) \r\n .query({points:points})\r\n .query({ length: length })\r\n .query({ width: wheelDistance })//todo width\r\n .query({ radiusMiddle: radiusMiddle })\r\n .query({ positionOfRotationAxis: positionOfRotationAxis })\r\n .query({ positionOfGnsReceiver: positionOfGnsReceiver })\r\n .withCredentials()\r\n .then(responseBody),\r\n};\r\n\r\nconst Points = {\r\n getTrajectoryPoints: (trajectoryPoints,rover) => pointsRequests.get(\r\n '/api/OptimalTrajectory/Points',\r\n trajectoryPoints.captcha,\r\n JSON.stringify(pointsToDistanceFromRefPointArray([...[trajectoryPoints.start],...trajectoryPoints.points,...[trajectoryPoints.end]]), trajectoryPoints.start),\r\n rover.length, \r\n rover.wheelDistance, \r\n rover.turningRadius,\r\n rover.positionOfRotationAxis,\r\n rover.positionOfGnsReceiver\r\n )\r\n};\r\n\r\nconst obstaclesRequests = {\r\n //get data from redux\r\n get: (\r\n url,\r\n captcha,\r\n points, \r\n obstacles, \r\n length,\r\n wheelDistance, \r\n radiusMiddle,\r\n positionOfRotationAxis,\r\n positionOfGnsReceiver,\r\n startLon,\r\n startLat,\r\n startVectX,\r\n startVectY,\r\n endLon,\r\n endLat,\r\n endVectX,\r\n endVectY,\r\n precision\r\n ) =>\r\n superagent.get(`${url}`)\r\n .query({captchaText:captcha}) \r\n .query({points:points})\r\n .query({ obstacles:obstacles })\r\n .query({ length: length })\r\n .query({ wheelDistance: wheelDistance })\r\n .query({ radiusMiddle: radiusMiddle })\r\n .query({ positionOfRotationAxis: positionOfRotationAxis })\r\n .query({ positionOfGnsReceiver: positionOfGnsReceiver })\r\n .query({ startLon: startLon }) \r\n .query({ startLat: startLat })\r\n .query({ startVectX: startVectX })\r\n .query({ startVectY: startVectY })\r\n .query({ endLon: endLon })\r\n .query({ endLat: endLat })\r\n .query({ endVectX: endVectX })\r\n .query({ endVectY: endVectY }) \r\n .query({ precision: precision })\r\n .withCredentials()\r\n .then(responseBody),\r\n};\r\n\r\nconst Obstacles = {\r\n getTrajectoryPoints(rover, obstacles) { \r\n\r\n let startTransformed = distanceFromRefPoint1(obstacles.start, obstacles.start);\r\n let endTransformed = distanceFromRefPoint1(obstacles.end, obstacles.start);\r\n let startVectorTransformed = distanceFromRefPoint1({Lon: (obstacles.start.Lon + obstacles.start.VectorX), Lat: (obstacles.start.Lat + obstacles.start.VectorY)}, obstacles.start);\r\n let endVectorTransformed = distanceFromRefPoint1({Lon: obstacles.end.Lon + obstacles.end.VectorX, Lat: obstacles.end.Lat + obstacles.end.VectorY}, obstacles.end);\r\n \r\n return obstaclesRequests.get(\r\n '/api/AvoidingObstacles/Points',\r\n obstacles.captcha,\r\n JSON.stringify(pointsArrayToDistancesFromRefPoint(obstacles.areaPolygon[0].coordinates[0], obstacles.start)),\r\n JSON.stringify(obstaclesToDistanceFromRefPointArray(obstacles, obstacles.start)),\r\n rover.length, \r\n rover.wheelDistance, \r\n rover.turningRadius,\r\n rover.positionOfRotationAxis,\r\n rover.positionOfGnsReceiver,\r\n startTransformed.lonMeters,\r\n startTransformed.latMeters,\r\n startVectorTransformed.lonMeters,\r\n startVectorTransformed.latMeters,\r\n endTransformed.lonMeters,\r\n endTransformed.latMeters,\r\n endVectorTransformed.lonMeters,\r\n endVectorTransformed.latMeters,\r\n obstacles.precision \r\n )\r\n }\r\n};\r\n\r\nfunction obstaclesToDistanceFromRefPointArray(obstacles, refPoint) {\r\n let pointsArray = [];\r\n for (let obstacle of obstacles.obstacles) {\r\n let transformedCoords = [];\r\n for (let cooridinate of obstacle.coordinates[0]) {\r\n let pointTransformed = distanceFromRefPoint1({Lon: cooridinate[0], Lat: cooridinate[1]}, refPoint);\r\n transformedCoords.push([pointTransformed.lonMeters, pointTransformed.latMeters]);\r\n }\r\n pointsArray.push(transformedCoords);\r\n }\r\n return pointsArray;\r\n}\r\n\r\nfunction pointsToDistanceFromRefPointArray(points) {\r\n let pointsArray = [];\r\n if (!points || points.length === 0)\r\n return [];\r\n\r\n let startPoint = points[0];\r\n for (let point of points) {\r\n let pointTransformed = distanceFromRefPoint1(point, startPoint);\r\n let vectorTransformed = distanceFromRefPoint1({Lon: point.Lon + point.VectorX, Lat: point.Lat + point.VectorY}, point)\r\n\r\n pointsArray.push([\r\n pointTransformed.lonMeters,\r\n pointTransformed.latMeters,\r\n vectorTransformed.lonMeters,\r\n vectorTransformed.latMeters,\r\n ]);\r\n }\r\n return pointsArray;\r\n}\r\n\r\nfunction distanceFromRefPoint1(value, refPoint) {\r\n if (!value || !refPoint)\r\n return null\r\n\r\n let middleLon = ((value.Lon - refPoint.Lon)/2) + refPoint.Lon;\r\n let refPontTransformedLat = olProj.transform([middleLon, refPoint.Lat], 'EPSG:3857', 'EPSG:4326');\r\n let pointTransformedLat = olProj.transform([middleLon, value.Lat], 'EPSG:3857', 'EPSG:4326');\r\n\r\n let middleLat = ((value.Lat - refPoint.Lat)/2) + refPoint.Lat;\r\n let refPontTransformedLon = olProj.transform([refPoint.Lon, middleLat], 'EPSG:3857', 'EPSG:4326');\r\n let pointTransformedLon = olProj.transform([value.Lon, middleLat], 'EPSG:3857', 'EPSG:4326');\r\n\r\n let lonMeters = getDistance(pointTransformedLon, refPontTransformedLon) * (pointTransformedLon[0] >= refPontTransformedLon[0] ? 1 : -1);\r\n let latMeters = getDistance(pointTransformedLat, refPontTransformedLat) * (pointTransformedLat[1] >= refPontTransformedLat[1] ? 1 : -1);\r\n return {lonMeters: lonMeters, latMeters:latMeters}\r\n};\r\n\r\nfunction pointsArrayToDistancesFromRefPoint(array, refPoint) {\r\n let transformedArray = [];\r\n\r\n array.forEach(item => {\r\n let transformedPoint = distanceFromRefPoint1({Lon:item[0], Lat:item[1]}, refPoint);\r\n transformedArray.push([transformedPoint.lonMeters, transformedPoint.latMeters]);\r\n });\r\n\r\n return transformedArray;\r\n}\r\n\r\nconst isReadyRequests = {\r\n get: (url\r\n ) =>\r\n superagent.get(`${url}`)\r\n .timeout({\r\n response: 500, \r\n deadline: 500,\r\n })\r\n .then(responseBody),\r\n};\r\n\r\nconst IsReady = {\r\n testRequests: () => isReadyRequests.get(\r\n '/api/Home/IsReady', \r\n )\r\n};\r\n\r\nexport {\r\n OptimalTrajectory,\r\n Points,\r\n Obstacles, \r\n IsReady\r\n};"],"sourceRoot":""}