/// <summary> /// 透過座標取得公車資訊 /// </summary> /// <param name="talkToken">要發送給誰</param> /// <param name="lat">緯度</param> /// <param name="lon">經度</param> /// <returns></returns> public string returnBusData(string talkToken, string lat, string lon) { PTXApi getBusLocation = new PTXApi(); string BusName = ""; //取得所有公車站座標 string APIUrl = "http://ptx.transportdata.tw/MOTC/v2/Bus/Station/City/Taipei?$format=JSON"; List <BusStopModels> getData = JsonConvert.DeserializeObject <List <Models.BusStopModels> >(CallAPIByHMAC(APIUrl)); //依照距離排序公車站 foreach (var data in getData) { var distance = Math.Abs(Geocoding.DistanceOfTwoPoints(Convert.ToDouble(data.StationPosition.PositionLat), Convert.ToDouble(data.StationPosition.PositionLon), Convert.ToDouble(lat), Convert.ToDouble(lon))); data.Distance = distance; } //取前三名 var finalLocation = getData.OrderBy(x => x.Distance).Take(3); //組字串 if (finalLocation.Count() > 0) { BusName = "附近的公車站:" + Environment.NewLine; foreach (var item in finalLocation) { BusName += item.StationName.Zh_tw + Environment.NewLine + "下一班進站公車:" + BusComing(item.StationName.Zh_tw) + Environment.NewLine; } return(BusName); } else { return(""); } }
/// <summary> /// 透過座標取得腳踏車資訊 /// </summary> /// <param name="talkToken">要發送給誰</param> /// <param name="lat">緯度</param> /// <param name="lon">經度</param> /// <returns></returns> public string returnBikeData(string talkToken, string lat, string lon) { PTXApi getBusLocation = new PTXApi(); string APIUrl = "http://ptx.transportdata.tw/MOTC/v2/Bike/Station/taipei?$format=JSON"; List <YoubikeModel> getData = JsonConvert.DeserializeObject <List <Models.YoubikeModel> >(CallAPIByHMAC(APIUrl)); foreach (var data in getData) { var distance = Math.Abs(Geocoding.DistanceOfTwoPoints(Convert.ToDouble(data.StationPosition.PositionLat), Convert.ToDouble(data.StationPosition.PositionLon), Convert.ToDouble(lat), Convert.ToDouble(lon))); data.Distance = distance; } var finalLocation = getData.OrderBy(x => x.Distance).Take(3); if (finalLocation.Count() > 0) { foreach (var item in finalLocation) { string stationStatus = BikeStationStatus(item.StationUID, "taipei"); SendRequest.SendLocation(talkToken, item.StationPosition.PositionLat, item.StationPosition.PositionLon, item.StationName.Zh_tw, stationStatus); } return("Youbike站台資訊如上"); } else { return(""); } }
/// <summary> /// 利用UID取得該站台可租借的車數有多少 /// </summary> /// <param name="stationUID"></param> /// <returns></returns> public string BikeStationStatus(string stationUID, string country) { PTXApi getBusLocation = new PTXApi(); string APIUrl = "http://ptx.transportdata.tw/MOTC/v2/Bike/Availability/" + country + "?$filter=StationUID%20eq%20'" + stationUID + "'&$format=JSON"; List <YoubikeStationStatusModel> getData = JsonConvert.DeserializeObject <List <YoubikeStationStatusModel> >(CallAPIByHMAC(APIUrl)); if (getData.First().ServieAvailable == "0") { return("此站台目前停止營運"); } else { return("目前可租借車數:" + getData.First().AvailableRentBikes + Environment.NewLine + "可歸還數:" + getData.First().AvailableReturnBikes); } }
/// <summary> /// 取得站位即將到站的公車 /// </summary> /// <param name="stationName">公車站名(中文)</param> /// <returns></returns> public string BusComing(string stationName) { string data = Uri.EscapeDataString(stationName); PTXApi getBusLocation = new PTXApi(); string APIUrl = "http://ptx.transportdata.tw/MOTC/v2/Bus/EstimatedTimeOfArrival/City/Taipei?$filter=StopName%2FZh_tw%20eq%20'" + data + "'%20and%20StopStatus%20eq%20null&$orderby=EstimateTime&$top=30&$format=JSON"; List <BusComingModels> getData = new List <Models.BusComingModels>(); getData = JsonConvert.DeserializeObject <List <Models.BusComingModels> >(CallAPIByHMAC(APIUrl)); string result = ""; var finalData = getData.Where(x => x.StopStatus == null).OrderBy(y => y.EstimateTime); //if (Convert.ToInt16(getData.First().EstimateTime) /60 <= 0) //{ // result = getData.First().RouteName.Zh_tw + ", 即將進站"; //} //else result = finalData.First().RouteName.Zh_tw + ",還有" + Math.Round(Convert.ToDecimal(finalData.First().EstimateTime) / 60, 2) + "分鐘"; return(result); }