public async Task <int> findNearestSite() { try { geoLoc = new Geolocator { ReportInterval = 2000 }; var pos = await geoLoc.GetGeopositionAsync(); var p = pos.Coordinate.Point; var gpsPos = new GpsPoint { twd97Lat = p.Position.Latitude, twd97Lon = p.Position.Longitude }; var dists = new List <double>(); foreach (var s in sitesGeoDict) { dists.Add(StaticTaqModel.posDist(gpsPos, s.Value)); } var minId = dists.FindIndex(v => v == dists.Min()); nearestSite = sitesGeoDict.Keys.ToList()[minId]; } catch { throw new Exception(resLoader.GetString("positioningNearestSiteFail")); } return(0); }
// Reload air quality XML files. override public async Task <int> loadAq2Dict() { XDocument xd = new XDocument(); try { var dataXml = await ApplicationData.Current.LocalFolder.GetFileAsync(Params.aqDbFile); using (var s = await dataXml.OpenStreamForReadAsync()) { // Reload to xd. xd = XDocument.Load(s); } } catch { xd = XDocument.Load("Assets/" + Params.aqDbFile); } var dataX = from data in xd.Descendants("Data") select data; var geoDataX = from data in siteGeoXd.Descendants("Data") select data; sitesStrDict.Clear(); sitesGeoDict.Clear(); foreach (var d in dataX.OrderBy(x => x.Element("County").Value)) { var siteName = d.Descendants("SiteName").First().Value; var geoD = from gd in geoDataX where gd.Descendants("SiteName").First().Value == siteName select gd; var siteDict = d.Elements().ToDictionary(x => x.Name.LocalName, x => x.Value); var geoDict = geoD.Elements().ToDictionary(x => x.Name.LocalName, x => x.Value); siteDict.Add("TWD97Lat", geoDict["TWD97Lat"]); siteDict.Add("TWD97Lon", geoDict["TWD97Lon"]); sitesGeoDict.Add(siteName, new GpsPoint { twd97Lat = double.Parse(siteDict["TWD97Lat"]), twd97Lon = double.Parse(siteDict["TWD97Lon"]), }); // Shorten long status strings for map icons. siteDict.Add("ShortStatus", StaticTaqModel.getShortStatus(siteDict["Status"])); sitesStrDict.Add(siteName, siteDict); } return(0); }
public int getAqLevel(string siteName, string aqName) { var val = getAqVal(siteName, aqName); return(StaticTaqModel.getAqLevel(aqName, val)); }
// Reload air quality JSON files. override public async Task <int> loadAq2Dict() { JObject jTaqDb; try { var dataJson = await ApplicationData.Current.LocalFolder.GetFileAsync(Params.aqDbFile); jTaqDb = await readJObject(dataJson); } catch { var dataJson = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/" + Params.aqDbFile)); jTaqDb = await readJObject(dataJson); } var data = jTaqDb["result"]["records"]; var geoDataX = from gdata in siteGeoXd.Descendants("Data") select gdata; sitesStrDict.Clear(); sitesGeoDict.Clear(); foreach (var d in data) { var siteDict = d.ToObject <Dictionary <string, string> >(); var siteName = siteDict["SiteName"]; // Skip duplicate keys as possible. if (sitesStrDict.ContainsKey(siteName)) { continue; } var geoD = from gd in geoDataX where gd.Descendants("SiteName").First().Value == siteName select gd; var geoDict = geoD.Elements().ToDictionary(x => x.Name.LocalName, x => x.Value); string latStr, lonStr; // No corresponding site geo info in SiteGeo.xml!!! if (geoDict.Count == 0) { latStr = "0"; lonStr = "0"; } else { latStr = geoDict["TWD97Lat"]; lonStr = geoDict["TWD97Lon"]; } siteDict.Add("TWD97Lat", latStr); siteDict.Add("TWD97Lon", lonStr); sitesGeoDict.Add(siteName, new GpsPoint { twd97Lat = double.Parse(siteDict["TWD97Lat"]), twd97Lon = double.Parse(siteDict["TWD97Lon"]), }); // Shorten long status strings for map icons. siteDict.Add("ShortStatus", StaticTaqModel.getShortStatus(siteDict["Status"])); if (siteDict["ShortStatus"] == "維護") { foreach (var f in aqHistNames) { siteDict[f] = "N/A"; } } sitesStrDict.Add(siteName, siteDict); } return(0); }