public int FindEnterenceVertexNo(int noOfVertices, int graphNo, int start, int placeID) { FindShortestPath find = new FindShortestPath(); int[,] graph, innerGraph; int[] dist_1, dist_2, distance, ids; int innerStart, innerEnd = 0, innerVerticesNo; if (graphNo == 0) { graph = Data.footRoutesGraph; } else { graph = Data.vehicleRoutesGraph; } ids = LocationData.GetDepartmentAndFloor(placeID); if (ids[0] == 1) { innerGraph = Data.CSDepartmentGraph; innerVerticesNo = Data.CSDepartmentGrapheVertices; } else { innerGraph = Data.footRoutesGraph; innerVerticesNo = Data.footGrapheVertices; } for (int j = 0; j < Data.CSMainPlaceMatch.Length; j++) { if (Data.CSMainPlaceMatch[j] == placeID) { innerEnd = j; break; } } dist_1 = find.GetShortestDistanceList(graph, noOfVertices, start); distance = new int[Data.EntranceOuterMatch.Length]; for (int i = 0; i < Data.EntranceOuterMatch.Length; i++) { distance[i] = dist_1[Data.EntranceOuterMatch[i]]; innerStart = Data.CSMainEntranceInnerMatch[i]; dist_2 = find.GetShortestDistanceList(innerGraph, innerVerticesNo, innerStart); distance[i] += dist_2[innerEnd]; } //according to the department,Entrance outer match should change return(Data.EntranceOuterMatch[Array.IndexOf(distance, distance.Min())]); }
public IActionResult GetFloorWithPlace(int placeID) { int n = 0; int[] ids = LocationData.GetDepartmentAndFloor(placeID); List <double[]> lst = new List <double[]>(); var final = new Hashtable(); double[] temp = new double[2]; double[,] floorLocations = LocationData.GetFloorLocations(ids[0], ids[1]); Dictionary <string, double[]> places = LocationData.GetFloorPlaces(ids[0], ids[1]); Dictionary <string, double[]> place = LocationData.GetPlaceWithName(placeID); Place[] arr = new Place[places.Count]; Place pl = new Place(); for (int i = 0; i < floorLocations.GetLength(0); i++) { lst.Add(new double[] { floorLocations[i, 0], floorLocations[i, 1] }); } //this should change according to the department if (ids[1] == 0) { final.Add("floor_0_locations", lst); } else if (ids[1] == 1) { final.Add("floor_1_locations", lst); } else { final.Add("floor_2_locations", lst); } foreach (KeyValuePair <string, double[]> pair_0 in place)//only once { foreach (KeyValuePair <string, double[]> pair in places) { if (pair_0.Key == pair.Key) { temp = pair.Value; pl = new Place() { name = pair.Key, lat = temp[0], lon = temp[1] }; } else { temp = pair.Value; arr[n++] = new Place() { name = pair.Key, lat = temp[0], lon = temp[1] }; } } } final.Add("places", arr); final.Add("place", pl); return(Json(final)); }
public IActionResult GetPlace(double startLAT, double startLON, int placeID, string method) { List <double[]> lst = new List <double[]>(); List <double[]> zeroFloorRouteSet = new List <double[]>(); List <double[]> stair_0_1_RouteSet = new List <double[]>(); List <double[]> stair_1_2_RouteSet = new List <double[]>(); List <double[]> firstFloorRouteSet = new List <double[]>(); List <double[]> secondFloorRouteSet = new List <double[]>(); double distance = 0, time = 0; var final = new Hashtable(); double[,] routeLocations; double[] temp = new double[2], distanceAndTime; Calculations cal = new Calculations(); int V_No, graphNo, start, localEnd, innerStart = 0, innerEnd = 0; int[] ids, routes; double[,] floorLocations; Dictionary <string, double[]> place; Place pl; switch (method) { case "f": V_No = Data.footGrapheVertices; graphNo = 0; break; case "v": V_No = Data.vehicleGrapheVertices; graphNo = 1; break; default: V_No = Data.footGrapheVertices; graphNo = 0; break; } start = cal.GetNearestVertexNo(V_No, graphNo, startLAT, startLON); localEnd = cal.FindEnterenceVertexNo(V_No, graphNo, start, placeID); if (start != localEnd) { int[] route = cal.GetRouteNumbers(graphNo, start, localEnd); distanceAndTime = cal.FindDistanceAndTime(graphNo, start, localEnd); distance += distanceAndTime[0]; time += distanceAndTime[1]; foreach (int r in route) { if (graphNo == 0) { routeLocations = LocationData.GetFootRoute(r); } else { routeLocations = LocationData.GetVehicleRoute(r); } lst.AddRange(new List <double[]>(cal.ValidateRoute(start, localEnd, graphNo, r, routeLocations))); } final.Add("outerroutelocations", new List <double[]>(lst)); } lst.Clear(); for (int i = 0; i < Data.CSMainOuterInnerMatch.Length; i++) { if (Data.CSMainOuterInnerMatch[i] == localEnd) { innerStart = i; break; } } for (int i = 0; i < Data.CSMainPlaceMatch.Length; i++) { if (Data.CSMainPlaceMatch[i] == placeID) { innerEnd = i; break; } } graphNo = 2; ids = LocationData.GetDepartmentAndFloor(placeID); routes = cal.GetRouteNumbers(graphNo, innerStart, innerEnd); distanceAndTime = cal.FindDistanceAndTime(graphNo, innerStart, innerEnd); distance += distanceAndTime[0]; time += distanceAndTime[1]; //according to the department,no of arrays should change foreach (int rt in routes) { if (Data.CSFloor_0_RouteNumbers.Contains(rt)) { routeLocations = LocationData.GetInnerRoute(ids[0], rt); zeroFloorRouteSet.AddRange(new List <double[]>(cal.ValidateRoute(innerStart, innerEnd, graphNo, rt, routeLocations))); } else if (Data.CSFloor_1_RouteNumbers.Contains(rt)) { routeLocations = LocationData.GetInnerRoute(ids[0], rt); firstFloorRouteSet.AddRange(new List <double[]>(cal.ValidateRoute(innerStart, innerEnd, graphNo, rt, routeLocations))); } else if (Data.CSFloor_2_RouteNumbers.Contains(rt)) { routeLocations = LocationData.GetInnerRoute(ids[0], rt); secondFloorRouteSet.AddRange(new List <double[]>(cal.ValidateRoute(innerStart, innerEnd, graphNo, rt, routeLocations))); } else if (Data.CSStairBetwenn_0_1.Contains(rt)) { routeLocations = LocationData.GetInnerRoute(ids[0], rt); stair_0_1_RouteSet.AddRange(new List <double[]>(cal.ValidateRoute(innerStart, innerEnd, graphNo, rt, routeLocations))); } else if (Data.CSStairBetwenn_1_2.Contains(rt)) { routeLocations = LocationData.GetInnerRoute(ids[0], rt); stair_1_2_RouteSet.AddRange(new List <double[]>(cal.ValidateRoute(innerStart, innerEnd, graphNo, rt, routeLocations))); } } if (zeroFloorRouteSet.Count != 0) { final.Add("floor_0_routelocations", new List <double[]>(zeroFloorRouteSet)); lst.Clear(); floorLocations = LocationData.GetFloorLocations(ids[0], 0); for (int i = 0; i < floorLocations.GetLength(0); i++) { lst.Add(new double[] { floorLocations[i, 0], floorLocations[i, 1] }); } final.Add("floor_0_locations", new List <double[]>(lst)); } if (firstFloorRouteSet.Count != 0) { final.Add("floor_1_routelocations", new List <double[]>(firstFloorRouteSet)); lst.Clear(); floorLocations = LocationData.GetFloorLocations(ids[0], 1); for (int i = 0; i < floorLocations.GetLength(0); i++) { lst.Add(new double[] { floorLocations[i, 0], floorLocations[i, 1] }); } final.Add("floor_1_locations", new List <double[]>(lst)); } if (secondFloorRouteSet.Count != 0) { final.Add("floor_2_routelocations", new List <double[]>(secondFloorRouteSet)); lst.Clear(); floorLocations = LocationData.GetFloorLocations(ids[0], 2); for (int i = 0; i < floorLocations.GetLength(0); i++) { lst.Add(new double[] { floorLocations[i, 0], floorLocations[i, 1] }); } final.Add("floor_2_locations", new List <double[]>(lst)); } if (stair_0_1_RouteSet.Count != 0) { final.Add("stair_0_1_locations", stair_0_1_RouteSet); } if (stair_1_2_RouteSet.Count != 0) { final.Add("stair_1_2_locations", stair_1_2_RouteSet); } place = LocationData.GetPlaceWithName(placeID); pl = new Place(); foreach (KeyValuePair <string, double[]> pair in place)//only once { temp = pair.Value; pl = new Place() { name = pair.Key, lat = temp[0], lon = temp[1] }; } final.Add("place", pl); final.Add("distance_time", new double[] { distance, Math.Round(time, 1) }); return(Json(final)); }