Ejemplo n.º 1
0
        private bool ServerQueryToSpeedVectors(bool isMinutes, int updateInterval)
        {
            string    neoResultText;
            string    urlSearch;
            WebClient client = new WebClient();

            System.Net.ServicePointManager.ServerCertificateValidationCallback = (senderX, certificate, chain, sslPolicyErrors) => { return(true); };
            try
            {
                urlSearch     = URL_NEO_search + MakeSearchQuery(GetTargetName(), MPC_Observatory.BestObservatory.MPC_Code);
                neoResultText = client.DownloadString(urlSearch);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Download Error: " + ex.Message + "\n Possibly the NEO target is not available on Scout for ephemeris.");
                return(false);
            };
            List <SpeedVector> BasicRateTable = new List <SpeedVector>();

            UpdateRateTable = new List <SpeedVector>();
            ScoutResultsX   = JsonConvert.DeserializeXNode(neoResultText, "Root");
            IEnumerable <XElement> sEphXList        = ScoutResultsX.Element("Root").Elements("eph");
            SpeedVector            priorSpeedVector = null;
            SpeedVector            currentSpeedVector;
            double changeRaArcSec  = 0;
            double changeDecArcSec = 0;

            foreach (XElement ephX in sEphXList)
            {
                IEnumerable <XElement> sPositionX    = ephX.Element("data").Elements("data");
                List <XElement>        sPositionList = sPositionX.ToList();
                currentSpeedVector = new SpeedVector
                {
                    Time_UTC             = Convert.ToDateTime(ephX.Element("time").Value),
                    Rate_ArcsecPerMinute = Convert.ToDouble(sPositionList[idx_rate].Value), //Arcsec/min
                    PA_Degrees           = (Convert.ToDouble(sPositionList[idx_pa].Value)),
                    RA_Degrees           = Convert.ToDouble(sPositionList[idx_ra].Value),   //Scout delivers RA in degrees
                    Dec_Degrees          = Convert.ToDouble(sPositionList[idx_dec].Value),
                    Elevation_KM         = Convert.ToDouble(sPositionList[idx_el].Value),
                    Range_AU             = Convert.ToDouble(sPositionList[idx_reO].Value) //AU
                };

                if (priorSpeedVector != null)
                {
                    //This is not the first vector,
                    //  Calculate the change in RA and Dec, save it in the prior vector and save the prior vector
                    //  then set the current vector as the prior vector
                    double interval_Minutes = (currentSpeedVector.Time_UTC - priorSpeedVector.Time_UTC).TotalMinutes;
                    changeRaArcSec = Transform.DegreesToArcSec(currentSpeedVector.RA_Degrees - priorSpeedVector.RA_Degrees);
                    priorSpeedVector.Rate_RA_CosDec_ArcsecPerMinute = changeRaArcSec / interval_Minutes;
                    changeDecArcSec = Transform.DegreesToArcSec(currentSpeedVector.Dec_Degrees - priorSpeedVector.Dec_Degrees);
                    priorSpeedVector.Rate_Dec_ArcsecPerMinute = changeDecArcSec / interval_Minutes;
                    BasicRateTable.Add(priorSpeedVector);
                    priorSpeedVector = currentSpeedVector;
                }
                else
                {
                    priorSpeedVector = currentSpeedVector;   //This is the first vector.  Set it as prior and get the next one.
                }
            }
            //The last prior vector will not have been saved, nor the RA and Dec rates filled in
            //  and there is no next vector to calculate RA and Dec differences, so use the last ones because
            //  the Scout dRA/dDec data is all f****d up
            priorSpeedVector.Rate_RA_CosDec_ArcsecPerMinute = changeRaArcSec;
            priorSpeedVector.Rate_Dec_ArcsecPerMinute       = changeDecArcSec;
            BasicRateTable.Add(priorSpeedVector);

            if (isMinutes)
            {
                UpdateRateTable = BasicRateTable;
            }
            else
            {
                for (int bIdx = 0; bIdx < BasicRateTable.Count - 1; bIdx++)
                {
                    UpdateRateTable.Add(BasicRateTable[bIdx]);
                    Interpolate intp = new Interpolate(BasicRateTable[bIdx], BasicRateTable[bIdx + 1], updateInterval);
                    foreach (SpeedVector sv in intp.WayPoints)
                    {
                        UpdateRateTable.Add(sv);
                    }
                }
            }
            return(true);
        }
Ejemplo n.º 2
0
        private bool ServerQueryToSpeedVectors(bool isMinutes, int updateInterval)
        {
            string    neoResultText;
            string    urlSearch;
            WebClient client = new WebClient();

            System.Net.ServicePointManager.ServerCertificateValidationCallback = (senderX, certificate, chain, sslPolicyErrors) => { return(true); };
            try
            {
                urlSearch     = URL_NEO_search + MakeSearchQuery(TgtName, MPC_Observatory.BestObservatory.MPC_Code);
                neoResultText = client.DownloadString(urlSearch);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Download Error: " + ex.Message + "\n Possibly the NEO target is not available on Scout for ephemeris.");
                return(false);
            };
            List <SpeedVector> BasicRateTable = new List <SpeedVector>();

            UpdateRateTable = new List <SpeedVector>();
            ScoutResultsX   = JsonConvert.DeserializeXNode(neoResultText, "Root");
            IEnumerable <XElement> sEphXList = ScoutResultsX.Element("Root").Elements("eph");
            SpeedVector            currentSpeedVector;

            foreach (XElement ephX in sEphXList)
            {
                IEnumerable <XElement> sPositionX    = ephX.Element("data").Elements("data");
                List <XElement>        sPositionList = sPositionX.ToList();
                currentSpeedVector = new SpeedVector
                {
                    Time_UTC             = Convert.ToDateTime(ephX.Element("time").Value),
                    Rate_ArcsecPerMinute = Convert.ToDouble(sPositionList[idx_rate].Value), //Arcsec/min
                    PA_Degrees           = (Convert.ToDouble(sPositionList[idx_pa].Value)),
                    RA_Degrees           = Convert.ToDouble(sPositionList[idx_ra].Value),   //Scout delivers RA in degrees
                    Dec_Degrees          = Convert.ToDouble(sPositionList[idx_dec].Value),
                    Elevation_KM         = Convert.ToDouble(sPositionList[idx_el].Value),
                    Range_AU             = Convert.ToDouble(sPositionList[idx_reO].Value) //AU
                };
                currentSpeedVector.Rate_RA_CosDec_ArcsecPerMinute = Utils.PARateToRA(currentSpeedVector.PA_Degrees, currentSpeedVector.Rate_ArcsecPerMinute);
                currentSpeedVector.Rate_Dec_ArcsecPerMinute       = Utils.PARateToDec(currentSpeedVector.PA_Degrees, currentSpeedVector.Rate_ArcsecPerMinute);
                BasicRateTable.Add(currentSpeedVector);
            }
            if (isMinutes)
            {
                UpdateRateTable = BasicRateTable;
            }
            else
            {
                //must add interpolated ephemeras
                for (int bIdx = 0; bIdx < BasicRateTable.Count - 1; bIdx++)
                {
                    UpdateRateTable.Add(BasicRateTable[bIdx]);
                    Interpolate intp = new Interpolate(BasicRateTable[bIdx], BasicRateTable[bIdx + 1], updateInterval);
                    foreach (SpeedVector sv in intp.WayPoints)
                    {
                        UpdateRateTable.Add(sv);
                    }
                }
            }
            return(true);
        }