public double GetBearing(EarthquakeData datafrom, EarthquakeData datato) { var dLon = datato.Longitude - datafrom.Longitude; var y = Math.Sin(dLon) * Math.Cos(datato.Latitude); var x = Math.Cos(datafrom.Latitude) * Math.Sin(datato.Latitude) - Math.Sin(datafrom.Latitude) * Math.Cos(datato.Latitude) * Math.Cos(dLon); double angle = Rad2deg(Math.Atan2(y, x)); if (angle < 0) { angle += 180; } return(Math.Round(angle, 3)); }
public double GetDistance(EarthquakeData datafrom, EarthquakeData datato) { if (datafrom.Latitude == datato.Latitude && datafrom.Longitude == datato.Longitude) { return(0); } double theta = datafrom.Longitude - datato.Longitude; double dist = Math.Sin(Deg2rad(datafrom.Latitude)) * Math.Sin(Deg2rad(datato.Latitude)) + Math.Cos(Deg2rad(datafrom.Latitude)) * Math.Cos(Deg2rad(datato.Latitude)) * Math.Cos(Deg2rad(theta)); dist = Math.Acos(dist); dist = Rad2deg(dist); dist = dist * 60 * 1.1515; dist = dist * 1.609344; return(Math.Round(Math.Abs(dist), 3)); }
private List <Earthquake> ConvertRawDataToViewModel(EarthquakeData data) { List <Earthquake> result = new List <Earthquake>(); foreach (var feature in data.features) { DateTime dt = new DateTime(1970, 1, 1); Earthquake item = new Earthquake(); item.AlertType = feature.properties.alert; item.Depth = feature.geometry.coordinates[2]; item.Latitude = Convert.ToDecimal(feature.geometry.coordinates[1]); item.Longitude = Convert.ToDecimal(feature.geometry.coordinates[0]); item.EventDate = dt.AddMilliseconds(Convert.ToInt64(feature.properties.time.ToString())); item.URL = feature.properties.url; item.Magnitude = feature.properties.mag; item.Title = feature.properties.place; result.Add(item); } return(result); }
private void ReadSingleRow(IDataRecord record) { // Console.WriteLine(String.Format("{0}, {1},{2}, {3},{4}, {5},{6}, {7}", record[0], record[1], record[2], record[3], record[4], record[5], record[6], record[7])); EarthquakeData data = new EarthquakeData(); data.EarthquakeID = record[0].ToString(); data.Latitude = float.Parse(record[2].ToString()); data.Longitude = float.Parse(record[3].ToString()); try { if (data.EarthquakeID.Length == 4) { m_dicEarthquakes.Add(data.EarthquakeID, data); } } catch { } }
private void ReadSingleRowWithYear(IDataRecord record, string year) { // Console.WriteLine(String.Format("{0}, {1},{2}, {3},{4}, {5},{6}, {7}", record[0], record[1], record[2], record[3], record[4], record[5], record[6], record[7])); EarthquakeData data = new EarthquakeData(); data.EarthquakeID = record[0].ToString(); DateTime years = Convert.ToDateTime(record[1]); string FinalYear = String.Format("{0:yyyy}", years); data.Latitude = float.Parse(record[2].ToString()); data.Longitude = float.Parse(record[3].ToString()); try { if (FinalYear == year) { m_dicEarthquakes.Add(data.EarthquakeID, data); m_lstEarthQdata.Add(m_dicEarthquakes[data.EarthquakeID]); UpdateRoute(); } } catch { } }
/// <summary> /// Utility function to get earthquake acitivity /// </summary> /// <param name="feedUrl"></param> /// <returns></returns> private GetEarthquakeActivityResponse GetEarthquakeActivityUtil(string feedUrl) { var startTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); try { var geoRequest = WebRequest.Create(feedUrl); var geoResponse = geoRequest.GetResponse(); var dataStream = geoResponse.GetResponseStream(); if (dataStream == null) { return(null); } FeatureCollection featureCollection; using (var reader = new StreamReader(dataStream)) { var data = reader.ReadToEnd(); featureCollection = JsonConvert.DeserializeObject <FeatureCollection>(data); reader.Close(); geoResponse.Close(); if (featureCollection == null) { return(null); } } var earthquakeDataList = new List <EarthquakeData>(); foreach (var feature in featureCollection.Features) { //Reset distances _minDist1 = double.MaxValue; _minDist2 = double.MaxValue; _minDist3 = double.MaxValue; var earthquakeData = new EarthquakeData(); var earthquakeTime = feature.Properties["time"]; var earthquakeMagnitude = feature.Properties["mag"]; var earthquakePoint = feature.Geometry as GeoJSON.Net.Geometry.Point; if (earthquakePoint != null) { var position = earthquakePoint.Coordinates as GeoJSON.Net.Geometry.GeographicPosition; if (position != null) { earthquakeData.Longitude = position.Longitude; earthquakeData.Latitude = position.Latitude; //If it's the first feature we are processing we should generate the list of cities if (_cityDataList == null) { _cityDataList = CreateListOfCities(position.Longitude, position.Latitude); } else { GetAffectedCities(position.Longitude, position.Latitude, _cityDataList); } var cities = new List <string> { _city1, _city2, _city3 }; earthquakeData.AffectedCities = cities; } } earthquakeData.DateTime = startTime.AddMilliseconds(long.Parse(earthquakeTime.ToString())).ToLocalTime(); earthquakeData.Magnitude = double.Parse(earthquakeMagnitude.ToString()); earthquakeDataList.Add(earthquakeData); } return(GetEarthquakeActivityResponse.Create(earthquakeDataList)); } catch (Exception) { //TODO add logging return(null); } }