Example #1
0
        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));
        }
Example #2
0
        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);
        }
Example #4
0
        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
            {
            }
        }
Example #5
0
        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);
            }
        }