/// <summary> /// FullBusRoute.xml - All Bus Route Available /// StaticData._busRoute /// </summary> private void LoadDataFile() { if (StaticData._busRoute == null) { StaticData._busRoute = new ObservableCollection <BusRoute>(); XDocument doc = XDocument.Load("Data/FullBusRoute.xml"); ObservableCollection <LocationPointWithId> tempGoLocationPoint; ObservableCollection <LocationPointWithId> tempBackLocationPoint; foreach (var item in doc.Element("root").Elements("BusRoute")) { tempGoLocationPoint = new ObservableCollection <LocationPointWithId>(); tempBackLocationPoint = new ObservableCollection <LocationPointWithId>(); foreach (var locationPoint in item.Element("GoDirection").Elements("LocationPoint")) { var newLocationPoint = new LocationPointWithId() { id = locationPoint.Attribute("Id").Value, longitude = Convert.ToDouble(locationPoint.Element("Lon").Value), latitude = Convert.ToDouble(locationPoint.Element("Lat").Value), }; tempGoLocationPoint.Add(newLocationPoint); } foreach (var locationPoint in item.Element("BackDirection").Elements("LocationPoint")) { var newLocationPoint = new LocationPointWithId() { id = locationPoint.Attribute("Id").Value, longitude = Convert.ToDouble(locationPoint.Element("Lon").Value), latitude = Convert.ToDouble(locationPoint.Element("Lat").Value), }; tempBackLocationPoint.Add(newLocationPoint); } var newBusRoute = new BusRoute() { id = item.Attribute("BusId").Value, goDirection = tempGoLocationPoint, backDirection = tempBackLocationPoint, }; StaticData._busRoute.Add(newBusRoute); } } //Enable Async //StorageFile destinationFile = await ApplicationData.Current.LocalFolder.CreateFileAsync( // "placeHolderData.dat", CreationCollisionOption.ReplaceExisting); //busRouteStatusTextBlock.Text = "Bus Routes Data Ready"; }
public static double Distance(LocationPointWithId a, LocationPointWithId b) { double e = (3.1415926538 * a.latitude / 180); double f = (3.1415926538 * a.longitude / 180); double g = (3.1415926538 * b.latitude / 180); double h = (3.1415926538 * b.longitude / 180); double i = (Math.Cos(e) * Math.Cos(g) * Math.Cos(f) * Math.Cos(h) + Math.Cos(e) * Math.Sin(f) * Math.Cos(g) * Math.Sin(h) + Math.Sin(e) * Math.Sin(g)); double j = (Math.Acos(i)); double k = (6371 * j); return(k); }
private async Task AddToCollection() { StaticData._stationCollection = new ObservableCollection <StationTotal>(); UTMConverter utmConverter = new UTMConverter(); MessageDialog msg = new MessageDialog("Location Service is not available!", "Error"); try { var pos = await _geolocator.GetGeopositionAsync(); if (pos != null) { Location location = new Location(pos.Coordinate.Latitude, pos.Coordinate.Longitude); LocationPointWithId a = new LocationPointWithId(); a.latitude = pos.Coordinate.Latitude; a.longitude = pos.Coordinate.Longitude; LocationPointWithId temp = new LocationPointWithId(); foreach (StationTotal b in StaticData._stationTotal) { utmConverter.ToLatLon(b.latitude, b.longitude, 48, 0); temp.latitude = utmConverter.Latitude; temp.longitude = utmConverter.Longitude; if (StaticMethod.Distance(a, temp) < StaticData.defaultDistance) { StaticData._stationCollection.Add(b); } } } } catch (Exception exception) { MessageDialog messageDialog = new MessageDialog("Error: " + exception.Message); messageDialog.ShowAsync(); //return; } }
private async Task AddToCollectionWithCustomLocation(Location location) { StaticData._stationCollection = new ObservableCollection <StationTotal>(); UTMConverter utmConverter = new UTMConverter(); LocationPointWithId a = new LocationPointWithId(); a.latitude = location.Latitude; a.longitude = location.Longitude; LocationPointWithId temp = new LocationPointWithId(); foreach (StationTotal b in StaticData._stationTotal) { utmConverter.ToLatLon(b.latitude, b.longitude, 48, 0); temp.latitude = utmConverter.Latitude; temp.longitude = utmConverter.Longitude; if (StaticMethod.Distance(a, temp) < StaticData.defaultDistance) { StaticData._stationCollection.Add(b); } } }
public static void Main(string[] args) { //For unicode output Console.OutputEncoding = System.Text.Encoding.Unicode; goto GetNewData; #region Load Old Data _stationTotal = Xml2Object <ObservableCollection <StationTotal> >("StationList.xml"); _busRoute = Xml2Object <ObservableCollection <BusRoute> >("FullBusRoute.xml"); _busStationCollection = Xml2Object <ObservableCollection <BusStationCollection> >("StationInfo.xml"); _busContent = Xml2Object <ObservableCollection <BusContent> >("StationDetail.xml"); newBusNameList = Xml2Object <BusNameList>("BusNameList.xml"); codedBusNameList = Xml2Object <CodedBusNameList>("CodedBusNameList.xml"); generalStationList = Xml2Object <GeneralStationList>("GeneralStationList.xml"); //TODO: skip to update data here //goto UpdateData; #endregion GetNewData: _stationTotal = Xml2Object <ObservableCollection <StationTotal> >("StationList.xml"); _busRoute = Xml2Object <ObservableCollection <BusRoute> >("FullBusRoute.xml"); _busStationCollection = Xml2Object <ObservableCollection <BusStationCollection> >("StationInfo.xml"); _busContent = Xml2Object <ObservableCollection <BusContent> >("StationDetail.xml"); #region Get List of buses //Reuse data string lobHtml = GetHttpAsString("http://www.buyttphcm.com.vn/TTLT.aspx"); HtmlDocument lobDocument = new HtmlDocument(); //goto GetBusesCode; lobDocument.LoadHtml(lobHtml); newBusNameList.busNameCollection = new ObservableCollection <BusName>(); var nodes = lobDocument.DocumentNode.SelectNodes("//select[@id='ctl00_ContentPlaceHolder1_DropDownList1']/option"); foreach (HtmlNode htmlNode in nodes) { BusName newBusName = new BusName(); newBusName.number = htmlNode.Attributes["value"].Value; if (newBusName.number == "0") { continue; } newBusName.name = UTF8Decode(htmlNode.NextSibling.InnerText); newBusNameList.busNameCollection.Add(newBusName); Console.WriteLine(newBusName.name); } //Object2Xml(newBusNameList, "BusNameList"); #endregion #region Get Buses text data foreach (BusName busName in newBusNameList.busNameCollection) { lobHtml = GetHttpAsString("http://www.buyttphcm.com.vn/Detail_TTLT.aspx?sl=" + busName.number); lobHtml = UTF8Decode(lobHtml); lobDocument.LoadHtml(lobHtml); BusTextData newBusTextData = new BusTextData(); nodes = lobDocument.DocumentNode.SelectNodes( "//div[@id='ctl00_ContentPlaceHolder1_UpdatePanel2']/table[2]"); newBusTextData.go = nodes[0].SelectNodes(".//tr[3]/td[@class='conten']")[0].InnerText.Trim(); newBusTextData.back = nodes[0].SelectNodes(".//tr[4]/td[@class='conten']")[0].InnerText.Trim(); newBusTextData.timeInfo = nodes[0].SelectNodes(".//tr[5]/td[@class='conten']")[0].InnerText.Trim(); busName.busTextData = newBusTextData; Console.WriteLine(newBusTextData.go); Console.WriteLine(newBusTextData.back); Console.WriteLine(newBusTextData.timeInfo); Console.WriteLine(busName.name + " - Bus Text Data added!"); } Object2Xml(newBusNameList, "BusNameList"); #endregion #region Get Buses name code GetBusesCode: codedBusNameList.codedBusNameCollection = new ObservableCollection <BusCodedName>(); lobHtml = GetHttpAsString("http://mapbus.ebms.vn/routeoftrunk.aspx"); lobDocument.LoadHtml(lobHtml); nodes = lobDocument.DocumentNode.SelectNodes("//select[@id='lstTuyen']/option"); foreach (HtmlNode htmlNode in nodes) { BusCodedName newBusName = new BusCodedName(); newBusName.number = Convert.ToInt32(htmlNode.Attributes["value"].Value); if (newBusName.number == 0) { continue; } newBusName.name = UTF8Decode(htmlNode.NextSibling.InnerText); codedBusNameList.codedBusNameCollection.Add(newBusName); Console.WriteLine("Coded: " + newBusName.number + " - " + newBusName.name); } #endregion #region Get List Route Station GetListRouteStation: foreach (BusCodedName bus in codedBusNameList.codedBusNameCollection) { bus.directionRouteCollection = new ObservableCollection <DirectionRoute>(); //Go Direction DirectionRoute directionGoRoute = new DirectionRoute(); directionGoRoute.isGo = true; lobHtml = GetHttpAsString("http://mapbus.ebms.vn/ajax.aspx?action=listRouteStations&rid=" + bus.number + "&isgo=true"); if (lobHtml == "null") { Console.WriteLine("Bus: " + bus.name + " don't have route. Skip"); continue; } lobHtml = UTF8Decode(lobHtml); JObject jObject = new JObject(); jObject = JObject.Parse(lobHtml); RootRouteStation rootRouteGoStation = jObject.ToObject <RootRouteStation>(); directionGoRoute.routeStationCollection = new ObservableCollection <RouteStation>(); directionGoRoute.routePoints = new ObservableCollection <GPSPoint>(); foreach (ROW row in rootRouteGoStation.TABLE[0].ROW) { RouteStation newRouteStation = new RouteStation(); newRouteStation.no = Convert.ToInt32(row.COL[0].DATA); newRouteStation.stationId = Convert.ToInt32(row.COL[1].DATA); if (row.COL[2].DATA != "") { newRouteStation.nextStationId = Convert.ToInt32(row.COL[2].DATA); } newRouteStation.route = row.COL[3].DATA; ObservableCollection <GPSPoint> gpsPoints = ConvertStringToGPSPoints(row.COL[3].DATA); foreach (GPSPoint point in gpsPoints) { directionGoRoute.routePoints.Add(point); } newRouteStation.name = row.COL[7].DATA; newRouteStation.lon = row.COL[9].DATA; newRouteStation.lat = row.COL[8].DATA; newRouteStation.address = row.COL[12].DATA; directionGoRoute.routeStationCollection.Add(newRouteStation); Console.WriteLine("New station added: " + newRouteStation.stationId); } bus.directionRouteCollection.Add(directionGoRoute); //Back Direction DirectionRoute directionBackRoute = new DirectionRoute(); directionBackRoute.isGo = false; lobHtml = GetHttpAsString("http://mapbus.ebms.vn/ajax.aspx?action=listRouteStations&rid=" + bus.number + "&isgo=false"); lobHtml = UTF8Decode(lobHtml); jObject = new JObject(); jObject = JObject.Parse(lobHtml); RootRouteStation rootRouteBackStation = jObject.ToObject <RootRouteStation>(); directionBackRoute.routeStationCollection = new ObservableCollection <RouteStation>(); directionBackRoute.routePoints = new ObservableCollection <GPSPoint>(); foreach (ROW row in rootRouteBackStation.TABLE[0].ROW) { RouteStation newRouteStation = new RouteStation(); newRouteStation.no = Convert.ToInt32(row.COL[0].DATA); newRouteStation.stationId = Convert.ToInt32(row.COL[1].DATA); if (row.COL[2].DATA != "") { newRouteStation.nextStationId = Convert.ToInt32(row.COL[2].DATA); } newRouteStation.route = row.COL[3].DATA; ObservableCollection <GPSPoint> gpsPoints = ConvertStringToGPSPoints(row.COL[3].DATA); foreach (GPSPoint point in gpsPoints) { directionBackRoute.routePoints.Add(point); } newRouteStation.name = row.COL[7].DATA; newRouteStation.lon = row.COL[9].DATA; newRouteStation.lat = row.COL[8].DATA; newRouteStation.address = row.COL[12].DATA; directionBackRoute.routeStationCollection.Add(newRouteStation); Console.WriteLine("New station added: " + newRouteStation.stationId); } bus.directionRouteCollection.Add(directionBackRoute); } #endregion #region Caculate RouteStation generalStationList.generalStationCollection = new ObservableCollection <GeneralStation>(); foreach (BusCodedName bus in codedBusNameList.codedBusNameCollection) { if (bus.directionRouteCollection.Count == 0) { continue; } //Go Direction foreach (RouteStation station in bus.directionRouteCollection[0].routeStationCollection) { GeneralStation generalStation = generalStationList.generalStationCollection.FirstOrDefault(i => i.stationId == station.stationId); if (generalStation != null) { //Existed in list //TODO: code here ThroughStationBus thStationBus = new ThroughStationBus(); thStationBus.name = bus.name; thStationBus.number = bus.number.ToString(); thStationBus.direction = DirectionType.Go; generalStation.throughStationBusCollection.Add(thStationBus); } else { //Not existed GeneralStation newGeneralStation = new GeneralStation(station); newGeneralStation.throughStationBusCollection = new ObservableCollection <ThroughStationBus>(); ThroughStationBus thStationBus = new ThroughStationBus(); thStationBus.name = bus.name; thStationBus.number = bus.number.ToString(); thStationBus.direction = DirectionType.Go; newGeneralStation.throughStationBusCollection.Add(thStationBus); Console.WriteLine("New General Station Added: " + newGeneralStation.stationId); generalStationList.generalStationCollection.Add(newGeneralStation); } } //Back Direction foreach (RouteStation station in bus.directionRouteCollection[1].routeStationCollection) { GeneralStation generalStation = generalStationList.generalStationCollection.FirstOrDefault(i => i.stationId == station.stationId); if (generalStation != null) { //Existed in list //TODO: code here ThroughStationBus thStationBus = new ThroughStationBus(); thStationBus.name = bus.name; thStationBus.number = bus.number.ToString(); thStationBus.direction = DirectionType.Go; bool isBoth = false; foreach (ThroughStationBus directionBus in generalStation.throughStationBusCollection) { if (directionBus.number == thStationBus.number) { directionBus.direction = DirectionType.Both; isBoth = true; break; } } if (!isBoth) { generalStation.throughStationBusCollection.Add(thStationBus); } } else { //Not existed GeneralStation newGeneralStation = new GeneralStation(station); newGeneralStation.throughStationBusCollection = new ObservableCollection <ThroughStationBus>(); ThroughStationBus thStationBus = new ThroughStationBus(); thStationBus.name = bus.name; thStationBus.number = bus.number.ToString(); thStationBus.direction = DirectionType.Back; newGeneralStation.throughStationBusCollection.Add(thStationBus); Console.WriteLine("New General Station Added: " + newGeneralStation.stationId); generalStationList.generalStationCollection.Add(newGeneralStation); } } } #endregion //Write to file Object2Xml(codedBusNameList, "CodedBusNameList"); Object2Xml(generalStationList, "GeneralStationList"); UpdateData: //Update old data to new one, using old structure //Update StationDetail foreach (BusName bus in newBusNameList.busNameCollection) { bool isOldData = false; foreach (BusContent content in _busContent) { if (bus.number == content.id) { content.id = bus.number; content.name = bus.name; content.go = bus.busTextData.go; content.back = bus.busTextData.back; content.detail = bus.busTextData.timeInfo; isOldData = true; break; } } if (!isOldData) { BusContent content = new BusContent(); content.id = bus.number; content.name = bus.name; content.go = bus.busTextData.go; content.back = bus.busTextData.back; content.detail = bus.busTextData.timeInfo; _busContent.Add(content); } } //Write Data Object2Xml(_busContent, "StationDetail"); //Update StationInfo foreach (BusCodedName bus in codedBusNameList.codedBusNameCollection) { bool isOldData = false; foreach (BusStationCollection content in _busStationCollection) { string name = bus.name.Split(']')[0].TrimStart('['); int busNum = 0; try { busNum = Convert.ToInt32(name); } catch (Exception) { //Cannot convert - new bus staton collection Console.WriteLine("New strange name bus detected: " + name); } if (busNum == Convert.ToInt32(content.id)) { content.id = busNum.ToString(); content.goDirection = new ObservableCollection <BusStation>(); content.backDirection = new ObservableCollection <BusStation>(); if (bus.directionRouteCollection[0].isGo) { //Correct go direction int i = 1; foreach (RouteStation station in bus.directionRouteCollection[0].routeStationCollection) { BusStation newStation = new BusStation(station); newStation.id = "[" + i + "]"; i++; content.goDirection.Add(newStation); } i = 1; foreach (RouteStation station in bus.directionRouteCollection[1].routeStationCollection) { BusStation newStation = new BusStation(station); newStation.id = "[" + i + "]"; i++; content.backDirection.Add(newStation); } } else { foreach (RouteStation station in bus.directionRouteCollection[0].routeStationCollection) { BusStation newStation = new BusStation(station); content.backDirection.Add(newStation); } foreach (RouteStation station in bus.directionRouteCollection[1].routeStationCollection) { BusStation newStation = new BusStation(station); content.goDirection.Add(newStation); } } isOldData = true; Console.WriteLine("Old bus: " + content.id); break; } } if (!isOldData) { BusStationCollection newStationCollection = new BusStationCollection(); newStationCollection.id = bus.name.Split(']')[0].TrimStart('['); newStationCollection.goDirection = new ObservableCollection <BusStation>(); newStationCollection.backDirection = new ObservableCollection <BusStation>(); if (bus.directionRouteCollection.Count == 0) { continue; } if (bus.directionRouteCollection[0].isGo) { //Correct go direction int i = 1; foreach (RouteStation station in bus.directionRouteCollection[0].routeStationCollection) { BusStation newStation = new BusStation(station); newStation.id = "[" + i + "]"; i++; newStationCollection.goDirection.Add(newStation); } i = 1; foreach (RouteStation station in bus.directionRouteCollection[1].routeStationCollection) { BusStation newStation = new BusStation(station); newStation.id = "[" + i + "]"; i++; newStationCollection.backDirection.Add(newStation); } } else { foreach (RouteStation station in bus.directionRouteCollection[0].routeStationCollection) { BusStation newStation = new BusStation(station); newStationCollection.backDirection.Add(newStation); } foreach (RouteStation station in bus.directionRouteCollection[1].routeStationCollection) { BusStation newStation = new BusStation(station); newStationCollection.goDirection.Add(newStation); } } Console.WriteLine("Strange bus added to updated data: " + bus.name); } } //Write Data Object2Xml(_busStationCollection, "StationInfo"); //Update FullBusRoute foreach (BusCodedName bus in codedBusNameList.codedBusNameCollection) { bool isOldData = false; foreach (BusRoute content in _busRoute) { string name = bus.name.Split(']')[0].TrimStart('['); int busNum = 0; try { busNum = Convert.ToInt32(name); } catch (Exception) { //Cannot convert - new bus staton collection Console.WriteLine("New strange name bus detected: " + name); } if (busNum == Convert.ToInt32(content.id)) { content.id = busNum.ToString(); content.goDirection = new ObservableCollection <LocationPointWithId>(); content.backDirection = new ObservableCollection <LocationPointWithId>(); if (bus.directionRouteCollection[0].isGo) { //Correct go direction int i = 1; foreach (GPSPoint station in bus.directionRouteCollection[0].routePoints) { LocationPointWithId newStation = new LocationPointWithId(station); newStation.id = "[" + i + "]"; i++; content.goDirection.Add(newStation); } i = 1; foreach (GPSPoint station in bus.directionRouteCollection[1].routePoints) { LocationPointWithId newStation = new LocationPointWithId(station); newStation.id = "[" + i + "]"; i++; content.backDirection.Add(newStation); } } else { int i = 1; foreach (GPSPoint station in bus.directionRouteCollection[0].routePoints) { LocationPointWithId newStation = new LocationPointWithId(station); newStation.id = "[" + i + "]"; i++; content.backDirection.Add(newStation); } i = 1; foreach (GPSPoint station in bus.directionRouteCollection[1].routePoints) { LocationPointWithId newStation = new LocationPointWithId(station); newStation.id = "[" + i + "]"; i++; content.goDirection.Add(newStation); } } isOldData = true; Console.WriteLine("Old bus: " + content.id); break; } } if (!isOldData) { BusRoute newStationCollection = new BusRoute(); newStationCollection.id = bus.name.Split(']')[0].TrimStart('['); newStationCollection.goDirection = new ObservableCollection <LocationPointWithId>(); newStationCollection.backDirection = new ObservableCollection <LocationPointWithId>(); if (bus.directionRouteCollection.Count == 0) { continue; } if (bus.directionRouteCollection[0].isGo) { //Correct go direction int i = 1; foreach (GPSPoint station in bus.directionRouteCollection[0].routePoints) { LocationPointWithId newStation = new LocationPointWithId(station); newStation.id = "[" + i + "]"; i++; newStationCollection.goDirection.Add(newStation); } i = 1; foreach (GPSPoint station in bus.directionRouteCollection[1].routePoints) { LocationPointWithId newStation = new LocationPointWithId(station); newStation.id = "[" + i + "]"; i++; newStationCollection.backDirection.Add(newStation); } } else { int i = 1; foreach (GPSPoint station in bus.directionRouteCollection[0].routePoints) { LocationPointWithId newStation = new LocationPointWithId(station); newStation.id = "[" + i + "]"; i++; newStationCollection.backDirection.Add(newStation); } i = 1; foreach (GPSPoint station in bus.directionRouteCollection[1].routePoints) { LocationPointWithId newStation = new LocationPointWithId(station); newStation.id = "[" + i + "]"; i++; newStationCollection.goDirection.Add(newStation); } } Console.WriteLine("Strange bus added to updated data: " + bus.name); } } //Write Data Object2Xml(_busRoute, "FullBusRoute"); //Update StationList.xml _stationTotal = new ObservableCollection <StationTotal>(); int StationListIndex = 0; UtmConverter converter; foreach (GeneralStation station in generalStationList.generalStationCollection) { StationTotal newStation = new StationTotal(); newStation.id = StationListIndex.ToString(); StationListIndex++; converter = new UtmConverter(); converter.ToUTM(Convert.ToDouble(station.lat), Convert.ToDouble(station.lon)); //newStation.latitude = converter.X; //newStation.longitude = converter.Y; newStation.latitude = Convert.ToDouble(station.lon); newStation.longitude = Convert.ToDouble(station.lat); newStation.stationId = station.stationId.ToString(); newStation.addressNum = station.name; newStation.addressStreet = station.address; newStation.addressDistrict = station.address.Split(',').LastOrDefault().Trim(); newStation.busList = new ObservableCollection <Bus>(); foreach (ThroughStationBus throughStationBus in station.throughStationBusCollection) { Bus newBus = new Bus(); newBus.busNumber = throughStationBus.name.Split(']')[0].TrimStart('['); if (newBus.busNumber.Contains("-")) { break; } else { newBus.busNumber = Convert.ToInt32(newBus.busNumber).ToString(); } newBus.name = throughStationBus.name; newBus.busDirection = new ObservableCollection <Direction>(); if (throughStationBus.direction == DirectionType.Go) { Direction newD = new Direction(); newD.direction = 0.ToString(); newBus.busDirection.Add(newD); Console.WriteLine("Go Direction added: " + newBus.busNumber); } if (throughStationBus.direction == DirectionType.Back) { Direction newD = new Direction(); newD.direction = 1.ToString(); newBus.busDirection.Add(newD); Console.WriteLine("Back Direction added: " + newBus.busNumber); } if (throughStationBus.direction == DirectionType.Both) { Direction newD = new Direction(); newD.direction = 0.ToString(); newBus.busDirection.Add(newD); Direction newD2 = new Direction(); newD2.direction = 1.ToString(); newBus.busDirection.Add(newD2); Console.WriteLine("Both Direction added: " + newBus.busNumber); } newStation.busList.Add(newBus); Console.WriteLine("New bus added: " + newBus.busNumber); } _stationTotal.Add(newStation); Console.WriteLine("Station added: " + newStation.stationId); } //Write Data Object2Xml(_stationTotal, "StationList"); }