public void eventArrived(Event ev) { //time to return to the Drone Station PathPlanner pathPlanner = PathPlanner.getInstance(); double calculatedTime; double eventLat = ev.getCoordinates().Item1; double eventLng = ev.getCoordinates().Item2; double[] weather = ev.getWeather(); bool[] b_weather = ev.get_b_weather(); DroneStation station = ev.getStation(); int droneIndex = ev.getDroneIndex(); Drone drone = station.drones[droneIndex]; double stationLat = station.stationLat; double stationLng = station.stationLng; calculatedTime = pathPlanner.calcTravelTime(eventLat, eventLng, stationLat, stationLng, maxSpeed, weather); //time when drone reach the station DateTime droneArrivalTime = ev.getOccuredDate().AddSeconds(calculatedTime); //battery consumption DroneStationFinder f = new DroneStationFinder(ev); double distance = f.getDistanceFromRecentEvent(stationLat, stationLng); drone.fly(distance); //event of arriving Event.eventType type = Event.eventType.E_STATION_ARRIVAL; Event e = new Event(eventLat, eventLng, droneArrivalTime, droneArrivalTime, type); e.setStationDroneIdx(station, droneIndex); eventSet.Add(e, e); }
public string getEventsFromCSV(string fpath) { try { if (events.Count != 0) { events.Clear(); } Excel.Application excelApp = null; Excel.Workbook wb = null; Excel.Worksheet ws = null; try { excelApp = new Excel.Application(); wb = excelApp.Workbooks.Open(fpath); ws = wb.Worksheets.get_Item(1) as Excel.Worksheet; Excel.Range rng1 = ws.get_Range("I2", "I16799"); //time Excel.Range rng2 = ws.get_Range("L2", "L16799"); //time Excel.Range rng3 = ws.get_Range("R2", "S16799"); //date Excel.Range rng4 = ws.get_Range("AU2", "AZ16799"); //weather Excel.Range rng5 = ws.get_Range("BJ2", "BN16799"); //boolean weather Excel.Range rng6 = ws.get_Range("AR2", "AS16799"); //coordinates Excel.Range rng7 = ws.get_Range("AP2", "AP16799"); //korean address object[,] occrTime = rng1.Value; object[,] ambTime = rng2.Value; object[,] oDate = rng3.Value; object[,] wData = rng4.Value; object[,] bWeather = rng5.Value; object[,] cData = rng6.Value; object[,] kAddr = rng7.Value; for (int r = 1; r <= occrTime.GetLength(0); r++) { if (cData[r, 1] == null || cData[r, 2] == null || oDate[r, 1] == null || oDate[r, 2] == null || occrTime[r, 1] == null || ambTime[r, 1] == null || bWeather[r, 1] == null || bWeather[r, 2] == null || bWeather[r, 3] == null || bWeather[r, 5] == null || wData[r, 1] == null || wData[r, 3] == null || wData[r, 4] == null || kAddr[r, 1] == null) { continue; } double longitude = System.Convert.ToDouble(cData[r, 1]); double latitude = System.Convert.ToDouble(cData[r, 2]); DateTime date = DateTime.Parse(oDate[r, 1].ToString()); DateTime time = DateTime.Parse(occrTime[r, 1].ToString()); DateTime occuredDate = new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, 0); DateTime a_date = DateTime.Parse(oDate[r, 2].ToString()); DateTime a_time = DateTime.Parse(ambTime[r, 1].ToString()); DateTime ambulDate = new DateTime(a_date.Year, a_date.Month, a_date.Day, a_time.Hour, a_time.Minute, 0); string _addr = kAddr[r, 1].ToString(); Address addr = new Address(_addr); double e_temp = System.Convert.ToDouble(wData[r, 1]); double e_rain = 0; if (wData[r, 2] != null) { e_rain = System.Convert.ToDouble(wData[r, 2]); } double e_winds = System.Convert.ToDouble(wData[r, 3]); double e_windd = System.Convert.ToDouble(wData[r, 4]); double e_snow = 0; if (wData[r, 5] != null) { e_snow = System.Convert.ToDouble(wData[r, 5]); } double e_sight = -10; if (wData[r, 6] != null) { e_sight = System.Convert.ToDouble(wData[r, 6]); } double[] e_weather = { e_temp, e_rain, e_winds, e_windd, e_snow, e_sight }; bool ep_subzero = System.Convert.ToBoolean(bWeather[r, 1]); bool ep_rain = System.Convert.ToBoolean(bWeather[r, 2]); bool ep_light = System.Convert.ToBoolean(bWeather[r, 3]); bool ep_snow = System.Convert.ToBoolean(bWeather[r, 4]); bool ep_sight = System.Convert.ToBoolean(bWeather[r, 5]); bool[] eb_weather = { ep_subzero, ep_rain, ep_light, ep_snow, ep_sight }; Event.eventType e = new Event.eventType(); e = Event.eventType.E_EVENT_OCCURED; events.Add(new Event(latitude, longitude, occuredDate, ambulDate, e, addr, e_weather, eb_weather)); } wb.Close(0); excelApp.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp); } catch (Exception ex) { throw ex; } /* * String path = "../../EventAddress.csv"; * System.IO.StreamReader readAddressFile = new System.IO.StreamReader(path); * foreach(Event e in events) * { * var line = readAddressFile.ReadLine(); * var record = line.Split(','); * if(record.Length < 4) throw new Exception("Too Short Address"); * * string premise = ""; * for(int i = 4; i < record.Length; i++) premise += record[i] + " "; * * Address addr = new Address(record[0], record[1], record[2], record[3], premise); * e.setAddress(addr); * } * readAddressFile.Close(); */ } catch (Exception e) { return(e.Message); } return(null); }
public void eventOccured(Event ev) { Tuple <double, double> coordinates = ev.getCoordinates(); DateTime occuredTime = ev.getOccuredDate(); double[] weather = ev.getWeather(); bool[] b_weather = ev.get_b_weather(); ev.setResult(Event.eventResult.FAILURE); // temp, rain, wind, snow, sight, light if (w_temp_high < weather[0] || weather[0] < w_temp_low || (weather[0] < 0 && !p_subzero)) { ev.setReason(Event.failReason.WEAHTER); ev.setWthFailRsn(0); } if (b_weather[1] && (!p_rain || w_rain < weather[1])) { ev.setReason(Event.failReason.WEAHTER); ev.setWthFailRsn(1); } if (w_winds < weather[2]) { ev.setReason(Event.failReason.WEAHTER); ev.setWthFailRsn(2); } if (b_weather[3] && (!p_snow || weather[4] > w_snow)) { ev.setReason(Event.failReason.WEAHTER); ev.setWthFailRsn(3); } if (weather[5] < w_sight && weather[5] > 0) { ev.setReason(Event.failReason.WEAHTER); ev.setWthFailRsn(4); } if (b_weather[2] && !p_light) { ev.setReason(Event.failReason.WEAHTER); ev.setWthFailRsn(5); } if (ev.getReason() == Event.failReason.WEAHTER) { return; } //find stations and drone DroneStationFinder finder = new DroneStationFinder(ev); Tuple <string, int> stationDroneIdx = finder.findAvailableDrone(); if (stationDroneIdx.Item1.Length == 0) { return; } DroneStation s = stationDict[stationDroneIdx.Item1]; Drone drone = s.drones[stationDroneIdx.Item2]; double distance = finder.getDistanceFromRecentEvent(s.stationLat, s.stationLng); //calculate time PathPlanner pathPlanner = PathPlanner.getInstance(); double calculatedTime; calculatedTime = pathPlanner.calcTravelTime(s.stationLat, s.stationLng, coordinates.Item1, coordinates.Item2, maxSpeed, weather); DateTime droneArrivalTime = ev.getOccuredDate().AddSeconds(calculatedTime); ev.setDroneDate(droneArrivalTime); ev.setResult(Event.eventResult.SUCCESS); ev.setStationDroneIdx(s, stationDroneIdx.Item2); //battery consumption drone.fly(distance); drone.setStatus(Drone.droneType.D_FLYING); //declare coming event Event.eventType type = Event.eventType.E_EVENT_ARRIVAL; Event e = new Event(coordinates.Item1, coordinates.Item2, droneArrivalTime, droneArrivalTime, type, ev.getAddress(), weather, b_weather); e.setStationDroneIdx(s, stationDroneIdx.Item2); eventSet.Add(e, e); }