示例#1
0
        /// <summary>
        /// 计算
        /// </summary>
        /// <param name="geoCoord"></param>
        /// <param name="Time"></param>
        /// <returns></returns>
        public DopValue Calculate(GeoCoord geoCoord, Time Time)
        {
            // var prns = this.EphemerisService.Prns.FindAll(m=>this.SatelliteTypes.Contains(m.SatelliteType));
            this.Time = Time;

            List <Ephemeris> ephs = new List <Ephemeris>();

            foreach (var prn in Prns)
            {
                if (SatWeights != null && !SatWeights.Contains(prn))
                {
                    continue;
                }
                ephs.Add(this.EphemerisService.Get(prn, Time));
            }
            var sats = EphemerisUtil.GetSatsInVisible(geoCoord, ephs, CutOffAngle);
            var xyz  = CoordTransformer.GeoCoordToXyz(geoCoord);

            if (sats.Count == 0)
            {
                return(null);
            }
            if (sats.Count < 4)
            {
                return(new DopValue()
                {
                    StationXYZ = xyz, Time = sats[0].Time, SatCount = sats.Count
                });
            }
            return(GetDopValue(xyz, sats));
        }
示例#2
0
        /// <summary> 获取湿分量的系数
        ///对流层延迟,第一个是干分量的延迟量,第二个值是湿分量的映射函数系数
        /// 高精度的对流层改正
        /// 对流层延迟由干、湿分量组成,常用天顶方向的干、湿分量和相应的映射函数表示:detDtrop=detDdry*Mdry(E)+detDwet*Mwet(E)
        /// 采用Saastamoinen模型改正对流层延迟干分量,将湿延迟分量作为未知参数进行估计,计算湿分量的系数
        /// 对流层映射函数采用NMF映射函数
        /// lat:测站纬度(弧度),h:测站高程(km),P:测站大气压强(mbar),TProduct:测站温度(k),e:大气中的水汽压(mbar)
        /// </summary>
        /// <returns></returns>
        public static double[] GetDryTropCorrectValue(Time gpsTime, XYZ satPos, XYZ receiverXyz)
        {
            Polar p = CoordTransformer.XyzToGeoPolar(satPos, receiverXyz);

            Geo.Coordinates.GeoCoord geoCoord = Geo.Coordinates.CoordTransformer.XyzToGeoCoord(receiverXyz, Geo.Coordinates.AngleUnit.Radian);
            //double troCorect = MeteorologyInfluence.TroposphereDelay(geoCoord.Lat, geoCoord.Height, info.ElevatAngle, gpsTime)

            //double SS = Math.Asin(1);
            //double SSS = Math.Asin(0);

            double[] NMF = NeillMF(gpsTime.DayOfYear, geoCoord.Lat, geoCoord.Height, p.Elevation);

            double zpd   = tropol(90, geoCoord.Height / 1000d);
            double zpd1  = tropol(geoCoord.Lat, geoCoord.Height / 1000d);
            double zpd11 = tropol1(geoCoord.Lat, geoCoord.Height / 1000.0);

            double dryZpd = MetSeason(geoCoord.Height, geoCoord.Lat, gpsTime);

            double TropE = dryZpd * NMF[0];//干分量改正

            double[] DryWet = new double[2];
            DryWet[0] = TropE;

            double wetCo = NMF[2];//湿分量系数

            DryWet[1] = wetCo;

            //return wetCo;
            return(DryWet);
        }
示例#3
0
        /// <summary>
        /// 获取卫星在指定时刻,相对于测站的信息
        /// </summary>
        /// <param name="service"></param>
        /// <param name="prn"></param>
        /// <param name="time"></param>
        /// <returns></returns>
        public StationSatInfo GetInstantSatInfo(IEphemerisService service, SatelliteNumber prn, Time time)
        {
            Geo.Coordinates.XYZ satPos = service.Get(prn, time).XYZ;
            GeoCoord            coord  = CoordTransformer.XyzToGeoCoord(satPos);

            Geo.Coordinates.Polar p = CoordTransformer.XyzToGeoPolar(satPos, StationPos);
            if (p.Elevation < EleAngle)
            {
                return(null);
            }

            this.LonLats.Add(new Vector(coord.Lon, coord.Lat)
            {
                Tag = prn.ToString()
            });

            //显示到表格
            return(new StationSatInfo()
            {
                PRN = prn,
                Time = time,
                Azimuth = p.Azimuth,
                ElevatAngle = p.Elevation,
                Distance = p.Range,
                Lat = coord.Lat,
                Lon = coord.Lon,
                Height = coord.Height,
                X = satPos.X,
                Y = satPos.Y,
                Z = satPos.Z
            });
        }
示例#4
0
        private void Looper_Looping(Geo.Times.Time time)
        {
            TableObject.NewRow();
            TableObject.AddItem("Epoch", time);
            string prefix   = "";
            int    satCount = Prns.Count;

            foreach (var prn in Prns)
            {
                var eph = EphemerisService.Get(prn, time);
                if (eph == null)
                {
                    continue;
                }
                var satXyz = eph.XYZ;
                var polar  = CoordTransformer.XyzToGeoPolar(satXyz, siteXyz, AngleUnit.Degree);
                if (cutOff > polar.Elevation)
                {
                    continue;
                }
                prefix = prn.ToString() + "_";
                TableObject.AddItem(prefix + "Elevation", polar.Elevation);
                TableObject.AddItem(prefix + "Azimuth", polar.Azimuth);
            }
        }
示例#5
0
 private void button_showOnMap_Click(object sender, EventArgs e)
 {
     if (ShowLayer != null && BaseLineNet != null)
     {
         List <AnyInfo.Geometries.Point> pts = new List <AnyInfo.Geometries.Point>();
         int           netIndex   = 0;
         List <string> addedNames = new List <string>();
         foreach (var kv in BaseLineNet.KeyValues)
         {
             foreach (var line in kv.Value)
             {
                 var name = netIndex + "-" + line.BaseLineName.RovName;
                 if (!addedNames.Contains(name))
                 {
                     pts.Add(new AnyInfo.Geometries.Point(line.EstimatedGeoCoordOfRov, null, name));
                     addedNames.Add(name);
                 }
                 name = netIndex + "-" + line.BaseLineName.RefName;
                 if (!addedNames.Contains(name))
                 {
                     var geoCoord = CoordTransformer.XyzToGeoCoord(line.ApproxXyzOfRef);
                     pts.Add(new AnyInfo.Geometries.Point(geoCoord, null, name));
                     addedNames.Add(name);
                 }
             }
             netIndex++;
         }
         AnyInfo.Layer layer = AnyInfo.LayerFactory.CreatePointLayer(pts);
         ShowLayer(layer);
     }
 }
示例#6
0
        private void button_xyzTogeo_Click(object sender, EventArgs e)
        {
            try
            {
                string splliter = "\t";

                AngleUnit unit = AngleUnit;
                Geo.Referencing.Ellipsoid ellipsoid = Ellipsoid;

                List <XYZ> xyzs = new List <XYZ>();
                foreach (var item in this.textBox_xyz.Lines)
                {
                    if (item == "")
                    {
                        continue;
                    }
                    xyzs.Add(XYZ.Parse(item));
                }
                StringBuilder sb      = new StringBuilder();
                var           spliter = IsOutSplitByTab ? "\t" : ", ";
                foreach (var item in xyzs)
                {
                    GeoCoord geeCoord = CoordTransformer.XyzToGeoCoord(item, ellipsoid, unit);
                    sb.AppendLine(geeCoord.ToString("0.0000000000", spliter));
                }
                this.textBox_geo.Text = sb.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
示例#7
0
        private void button_xyzToNeu_Click(object sender, EventArgs e)
        {
            try
            {
                List <XYZ> originEcefXyz = GetOriginEcefXyz();
                List <XYZ> targetEcefXyz = GetTargetEcefXyz();

                ObjectTableManager manager = new ObjectTableManager();
                var table = manager.AddTable("ENU");
                int count = originEcefXyz.Count;
                for (int i = 0; i < count; i++)
                {
                    var oXyz = originEcefXyz[i];
                    var tXyz = targetEcefXyz[i];
                    var enu  = CoordTransformer.XyzToEnu(tXyz, oXyz);

                    table.NewRow();
                    table.AddItem("Index", i);
                    table.AddItem("E", enu.E);
                    table.AddItem("N", enu.N);
                    table.AddItem("U", enu.U);
                }

                this.objectTableControl1.DataBind(table);
            }catch (Exception ex)
            {
                Geo.Utils.FormUtil.ShowErrorMessageBox(ex.Message);
            }
        }
示例#8
0
        private void button_read_Click(object sender, EventArgs e)
        {
            if (fileOpenControl1.FilePathes.Length == 0)
            {
                Geo.Utils.FormUtil.ShowWarningMessageBox("文件不存在!");
                return;
            }
            Headers = ReadFileHeaders(fileOpenControl1.FilePathes);

            ObjectTableStorage table = new ObjectTableStorage();

            foreach (var header in Headers)
            {
                table.NewRow();
                table.AddItem("Name", header.FileName);
                table.AddItem("StartEpoch", header.StartTime);
                table.AddItem("ObsCodes", header.GetReadableObsCodes());
                var geocoord = CoordTransformer.XyzToGeoCoord(header.ApproxXyz);
                table.AddItem("GeoCoord", geocoord);
                table.AddItem("Interval", header.Interval);
                table.AddItem("Version", header.Version);
                table.AddItem("ReceiverType", header.SiteInfo.ReceiverType);
                table.AddItem("ReceiverNumber", header.SiteInfo.ReceiverNumber);
                table.AddItem("AntennaType", header.SiteInfo.AntennaType);
                table.AddItem("AntennaNumber", header.SiteInfo.AntennaNumber);
                table.AddItem("ApproxXyz", header.ApproxXyz);
                table.AddItem("EndEpoch(MayBe)", header.EndTime);
            }

            BindDataSource(table);
        }
示例#9
0
        /// <summary>
        /// 电离层模型改正。返回时间延迟,单位:秒。
        /// broadcast iono (coeff.v. icd-200)
        /// input time:    fraction of ut (or gps time of secondOfWeek)      (machts nicht)
        /// </summary>
        /// <param name="weekSecond">周秒</param>
        /// <param name="satXyz">卫星位置</param>
        /// <param name="rcvXyz">接收机位置</param>
        /// <returns>time delay in fraction</returns>
        public static double IonoCorrection(double weekSecond, XYZ satXyz, XYZ rcvXyz, IIonoParam ionParam)
        {
            //*** divide by pi to funcKeyToDouble radians to semicircles
            Polar p = CoordTransformer.XyzToGeoPolar(satXyz, rcvXyz, AngleUnit.Radian); //myV.GetLocalPolar(rxPos);
            //azimuth angle between the user and satellite, measured clockwise positive from the true North (semi-circles)
            double A = p.Azimuth;                                                       // 只参与三角计算,故单位为弧度radians here
            //elevation angle between the user and satellite (semi-circles)
            double E = p.Elevation / PI;                                                //半周

            GeoCoord geo    = CoordTransformer.XyzToGeoCoord(rcvXyz, AngleUnit.Radian);
            double   rcvLat = geo.Lat / PI; //半周
            double   rcvLon = geo.Lon / PI; //半周

            //earth's central angle between the user position and the earth projection of ionospheric intersection point (semi-circles)
            double psi = GetEarthsCentralAngle(E);

            double inoLat  = GetIonLat(A, rcvLat, psi);
            double inoLon  = GetIonLon(A, rcvLon, psi, inoLat);
            double ionMLat = GetMeanIonLat(inoLat, inoLon);

            //*** local time from gps or ut time
            double tlocal = GetLocalTime(weekSecond, inoLon);

            //*** magnification factor, amplitude, and period
            double f   = GetF(E);
            double amp = GetAMP(ionParam, ionMLat);
            double x   = GetX(ionParam, ionMLat, tlocal);

            return(GetTimeDelay(f, amp, x));
        }
示例#10
0
        private void button_showOnMap_Click(object sender, EventArgs e)
        {
            if (ShowLayer != null && this.param != null)
            {
                double time = 0;
                OrbitParamCaculator caculator = new OrbitParamCaculator();
                List <XYZ>          xyzs      = new List <XYZ>();
                for (int i = 0; i < 500; i++)
                {
                    time = i * 10000;
                    XYZ xyz = caculator.GetSatPos(param, time);
                    xyzs.Add(xyz);
                }


                List <AnyInfo.Geometries.Point> lonlats = new List <AnyInfo.Geometries.Point>();
                int j = 0;
                foreach (var item in xyzs)
                {
                    GeoCoord geoCoord = CoordTransformer.XyzToGeoCoord(item);
                    lonlats.Add(new AnyInfo.Geometries.Point(geoCoord, j + ""));
                    j++;
                }
                Layer layer = LayerFactory.CreatePointLayer(lonlats);
                ShowLayer(layer);
            }
        }
示例#11
0
        private void button1_Click(object sender, EventArgs e)
        {
            Time time = new Time(this.dateTimePicker1.Value);

            MoonPosition moon    = new MoonPosition();
            XYZ          moonPos = moon.GetPosition(time);

            moonGeo = CoordTransformer.XyzToGeoCoord(moonPos);

            StringBuilder moonSb = new StringBuilder();

            moonSb.AppendLine("XYZ:" + moonPos.ToString());
            moonSb.AppendLine("GeoCoord:" + moonGeo.ToString());
            this.textBox_moon.Text = moonSb.ToString();


            SunPosition sun    = new SunPosition();
            XYZ         sunPos = sun.GetPosition(time);

            sunGeo = CoordTransformer.XyzToGeoCoord(sunPos);

            StringBuilder sunSb = new StringBuilder();

            sunSb.AppendLine("XYZ:" + sunPos.ToString());
            sunSb.AppendLine("GeoCoord:" + sunGeo.ToString());
            this.textBox_sun.Text = sunSb.ToString();
        }
示例#12
0
        /// <summary>
        ///  对流程改正。 对流程的改正符号为负数。
        /// </summary>
        /// <param name="gpsTime"></param>
        /// <param name="satPos"></param>
        /// <param name="receiverXyz"></param>
        /// <returns></returns>
        public static double GetTropoCorrectValue(Time gpsTime, XYZ satPos, XYZ receiverXyz)
        {
            Polar p = CoordTransformer.XyzToGeoPolar(satPos, receiverXyz, Geo.Coordinates.AngleUnit.Radian);

            Geo.Coordinates.GeoCoord geoCoord = Geo.Coordinates.CoordTransformer.XyzToGeoCoord(receiverXyz, Geo.Coordinates.AngleUnit.Radian);
            double troCorect = MeteorologyInfluence.TroposphereDelay(geoCoord.Lat, geoCoord.Height, p.Elevation, gpsTime);

            return(troCorect);
        }
示例#13
0
        /// <summary>
        /// 斜距
        /// </summary>
        /// <param name="time"></param>
        /// <param name="siteXyz"></param>
        /// <param name="satXyz"></param>
        /// <returns></returns>
        public RmsedNumeral GetSlope(Time time, XYZ siteXyz, XYZ satXyz)
        {
            var punctPoint       = XyzUtil.GetIntersectionXyz(siteXyz, satXyz, HeightOfModel);
            var geocentricLonLat = Geo.Coordinates.CoordTransformer.XyzToSphere(punctPoint);
            var SpherePolar      = CoordTransformer.XyzToSpherePolar(satXyz, siteXyz, AngleUnit.Degree);

            var tec = GetSlope(time, geocentricLonLat, SpherePolar.Elevation);

            return(tec);
        }
示例#14
0
        private void button_read_Click(object sender, EventArgs e)
        {
            entities = new List <SP3ViewEntity>();
            string    path = this.textBox_Path.Text;
            Sp3Reader r    = new Sp3Reader(path);

            sp3 = r.ReadAll();

            this.textBox_headInfo.Text = sp3.Header.ToString();


            List <SatelliteNumber> Prns = new List <SatelliteNumber>();

            foreach (Sp3Section sec in sp3)
            {
                foreach (var rec in sec)
                {
                    if (!Prns.Contains(rec.Prn))
                    {
                        Prns.Add(rec.Prn);
                    }

                    SP3ViewEntity ent = new SP3ViewEntity();
                    ent.Time = sec.Time;

                    ent.PRN = rec.Prn;
                    ent.X   = rec.XYZ.X;
                    ent.Y   = rec.XYZ.Y;
                    ent.Z   = rec.XYZ.Z;

                    GeoCoord coord = CoordTransformer.XyzToGeoCoord(rec.XYZ);
                    ent.Lon    = coord.Lon;
                    ent.Lat    = coord.Lat;
                    ent.Height = coord.Height;

                    if (rec.XyzDot != null)
                    {
                        ent.Xdot = rec.XyzDot.X;
                        ent.Ydot = rec.XyzDot.Y;
                        ent.Zdot = rec.XyzDot.Z;
                    }
                    ent.ClockRate = rec.ClockDrift;
                    ent.Clock     = rec.ClockBias;

                    entities.Add(ent);
                }
            }
            this.bindingSource_prns.DataSource = Prns;
            this.bindingSource1.DataSource     = entities;

            ////设置时间间隔
            this.dateTimePicker_from.Value = entities[0].Time.DateTime;
            this.dateTimePicker_to.Value   = entities[entities.Count - 1].Time.DateTime;
        }
示例#15
0
        public XYZ GetSiteCoord()
        {
            var coordStr = this.textBox_siteCoord.Text;

            if (this.radioButton_geo.Checked)
            {
                var geoCoord = GeoCoord.Parse(coordStr);
                return(CoordTransformer.GeoCoordToXyz(geoCoord));
            }

            return(XYZ.Parse(coordStr));
        }
示例#16
0
        private void button_xyzToNeu_Click(object sender, EventArgs e)
        {
            var           siteXYZ = GetSiteCoord();
            StringBuilder sb      = new StringBuilder();

            foreach (var item in GetXyzs())
            {
                var neu = CoordTransformer.XyzToEnu(item, siteXYZ);
                sb.AppendLine(neu.ToString());
            }
            this.richTextBox_neu.Text = sb.ToString();
        }
示例#17
0
        private void button_neuToXyz_Click(object sender, EventArgs e)
        {
            var           siteXYZ = GetSiteCoord();
            StringBuilder sb      = new StringBuilder();

            foreach (var item in GetEnus())
            {
                var xyz = CoordTransformer.EnuToXyz(item, siteXYZ);
                sb.AppendLine(xyz.ToString());
            }
            this.richTextBox_ecefXyz.Text = sb.ToString();
        }
示例#18
0
        private void button_getLonLatFromObsFile_Click(object sender, EventArgs e)
        {
            if (openFileDialog_obs.ShowDialog() == DialogResult.OK)
            {
                RinexObsFileHeader h = new Data.Rinex.RinexObsFileReader(openFileDialog_obs.FileName).GetHeader();
                this.textBox_stationCoord.Text = CoordTransformer.XyzToGeoCoord(h.ApproxXyz, Ellipsoid.WGS84).ToString();

                Init();

                this.sathelper.StationPos = StationPos;
            }
        }
示例#19
0
        private void button_exportSatHeight_Click(object sender, EventArgs e)
        {
            if (!CheckOrInit())
            {
                return;
            }
            Time          from = new Time(this.dateTimePicker_from.Value);
            Time          to   = new Time(this.dateTimePicker_to.Value);
            StringBuilder sb   = new StringBuilder();

            sb.Append("Time");
            sb.Append("\t");
            int i = 0;

            foreach (var item in this.navFile.Prns)
            {
                if (i != 0)
                {
                    sb.Append("\t");
                }
                sb.Append(item);
                i++;
            }
            sb.AppendLine();

            for (Time time = from; time < to; time = time + TimeSpan.FromMinutes(10))
            {
                sb.Append(time.ToString());
                sb.Append("\t");
                i = 0;
                foreach (var item in this.navFile.Prns)
                {
                    if (i != 0)
                    {
                        sb.Append("\t");
                    }
                    var satPos = navFile.Get(item, time);
                    // GeoCoord coord = CoordTransformer.XyzToGeoCoord(satPos.XYZ);
                    Polar p = CoordTransformer.XyzToGeoPolar(satPos.XYZ, StationPos);
                    sb.Append(p.Elevation);
                    //  sb.Append(satPos.XYZ.Radius());
                    i++;
                }
                sb.AppendLine();
            }

            string path = "D:\\satElevation.xls";

            File.WriteAllText(path, sb.ToString());
            Geo.Utils.FormUtil.ShowOkAndOpenFile(path);
        }
示例#20
0
        /// <summary>
        /// 根据卫星位置,计算可视卫星
        /// </summary>
        /// <param name="xyz"></param>
        /// <param name="geoCoord"></param>
        /// <param name="Ephemeries"></param>
        /// <param name="cutOffAngle">高度截止角</param>
        /// <returns></returns>
        public static List <Ephemeris> GetSatsInVisible(XYZ xyz, GeoCoord geoCoord, IEnumerable <Ephemeris> Ephemeries, double cutOffAngle = 5)
        {
            List <Ephemeris> list = new List <Ephemeris>();

            foreach (var item in Ephemeries)
            {
                var polar = CoordTransformer.XyzToPolar(item.XYZ, xyz, geoCoord.Lon, geoCoord.Lat);
                if (polar.Elevation > cutOffAngle)
                {
                    list.Add(item);
                }
            }
            return(list);
        }
示例#21
0
        /// <summary>
        /// 解析实时计算行结果。相隔一个字符串为内部,2个为外部。
        /// </summary>
        /// <param name="line"></param>
        /// <returns></returns>
        public static RtkrcvResultItem Parse(string line)
        {
            line = line.Replace("  ", "\t");
            string[] items      = line.Split(new char[] { '\t' }, StringSplitOptions.RemoveEmptyEntries);
            var      dateString = items[0];

            string one   = items[1];
            string two   = (items[2]);
            string three = (items[3]);

            RtkrcvResultItem item = new RtkrcvResultItem();

            item.Time = DateTime.Parse(dateString);

            double lon    = 0;
            double lat    = 0;
            double height = 0;

            if (one.Trim().Contains(' '))//查看坐标内部是否有空格,如果有,则是度分秒格式。
            {
                lat    = DMS.Parse(one).Degrees;
                lon    = DMS.Parse(two).Degrees;
                height = Double.Parse(three);
            }
            else
            { //查看是否是XYZ坐标,如果是,则需要转换
                //通过离地心距离判断
                double oneDouble   = Double.Parse(one);
                double twoDouble   = Double.Parse(two);
                double threeDouble = Double.Parse(three);
                //经纬度如(180, 180, 8848) 到地心的距离小于6000 000(地球下400 000米) 则认为是经纬度,不是米
                if (Math.Sqrt(oneDouble * oneDouble + twoDouble * twoDouble + threeDouble * threeDouble) < 6000000)
                {
                    lat    = oneDouble;
                    lon    = twoDouble;
                    height = threeDouble;
                }
                else
                {
                    var geoCoord = CoordTransformer.XyzToGeoCoord(new XYZ(oneDouble, twoDouble, threeDouble));
                    lon    = geoCoord.Lon;
                    lat    = geoCoord.Lat;
                    height = geoCoord.Height;
                }
            }

            item.Coords = new double[] { lon, lat, height };
            return(item);
        }
        private LineString BuildLineString(int netIndex, EstimatedBaseline baseLine)
        {
            var name = netIndex + "-" + baseLine.BaseLineName.RovName;
            var ptA  = new AnyInfo.Geometries.Point(baseLine.EstimatedGeoCoordOfRov, null, name);

            name = netIndex + "-" + baseLine.BaseLineName.RefName;
            var geoCoord   = CoordTransformer.XyzToGeoCoord(baseLine.ApproxXyzOfRef);
            var ptB        = new AnyInfo.Geometries.Point(geoCoord, null, name);
            var lineString = new LineString(new List <AnyInfo.Geometries.Point>()
            {
                ptA, ptB
            }, netIndex + "-" + baseLine.Name);

            return(lineString);
        }
示例#23
0
        public List <AnyInfo.Geometries.Point> GetPoints(List <RinexObsFileHeader> Headers)
        {
            List <AnyInfo.Geometries.Point> coords = new List <AnyInfo.Geometries.Point>();
            int i = 0;

            foreach (var item in Headers)
            {
                var xyz      = item.ApproxXyz;
                var geocoord = CoordTransformer.XyzToGeoCoord(xyz);
                coords.Add(new AnyInfo.Geometries.Point(geocoord, i + "", item.MarkerName));

                i++;
            }
            return(coords);
        }
示例#24
0
 private void button_showOnMap_Click(object sender, EventArgs e)
 {
     if (ShowLayer != null && this.xyzs.Count > 0)
     {
         List <AnyInfo.Geometries.Point> lonlats = new List <AnyInfo.Geometries.Point>();
         int j = 0;
         foreach (var item in xyzs)
         {
             GeoCoord geoCoord = CoordTransformer.XyzToGeoCoord(item.Position);
             lonlats.Add(new AnyInfo.Geometries.Point(geoCoord, j + ""));
             j++;
         }
         Layer layer = LayerFactory.CreatePointLayer(lonlats);
         ShowLayer(layer);
     }
 }
        private void button_showOnMap_Click(object sender, EventArgs e)
        {
            var path = this.fileOpenControl_input.FilePath;

            if (!File.Exists(path))
            {
                Geo.Utils.FormUtil.ShowWarningMessageBox("没有文件!在下无能为力!"); return;
            }

            if (BaseLineNets != null)
            {
                BaseLineNets = LoadBaseLineNets();
            }

            if (ShowLayer != null && BaseLineNets != null)
            {
                List <AnyInfo.Geometries.Point> pts = new List <AnyInfo.Geometries.Point>();
                int           netIndex   = 0;
                List <string> addedNames = new List <string>();
                foreach (var kv in BaseLineNets.KeyValues)
                {
                    foreach (var line in kv.Value)
                    {
                        var name = netIndex + "-" + line.BaseLineName.RovName;
                        if (!addedNames.Contains(name))
                        {
                            pts.Add(new AnyInfo.Geometries.Point(line.EstimatedGeoCoordOfRov, null, name));
                            addedNames.Add(name);
                        }
                        name = netIndex + "-" + line.BaseLineName.RefName;
                        if (!addedNames.Contains(name))
                        {
                            var geoCoord = CoordTransformer.XyzToGeoCoord(line.ApproxXyzOfRef);
                            pts.Add(new AnyInfo.Geometries.Point(geoCoord, null, name));
                            addedNames.Add(name);
                        }
                    }
                    netIndex++;
                }
                if (pts.Count == 0)
                {
                    return;
                }
                AnyInfo.Layer layer = AnyInfo.LayerFactory.CreatePointLayer(pts);
                ShowLayer(layer);
            }
        }
示例#26
0
        private void button_extractcoords_Click(object sender, EventArgs e)
        {
            sinexfile = SinexReader.Read(textBox_sinexFile.Text);
            List <string> sites = sinexfile.GetSiteCods();

            double[] CoordArray = sinexfile.GetEstimateVector();
            sitecood = new Dictionary <string, xyzblh>();
            for (int i = 0; i < sites.Count; i++)
            {
                string   tmpsite   = sites[i];
                XYZ      tmpxyz    = new XYZ(CoordArray[3 * i + 0], CoordArray[3 * i + 1], CoordArray[3 * i + 2]);
                GeoCoord tmplonlat = CoordTransformer.XyzToGeoCoord(tmpxyz, Ellipsoid.WGS84);
                if (!sitecood.Keys.Contains(tmpsite))
                {
                    sitecood.Add(tmpsite, new xyzblh());
                    sitecood[tmpsite].truexyz = tmpxyz;
                    sitecood[tmpsite].lon     = tmplonlat.Lon;
                    sitecood[tmpsite].lat     = tmplonlat.Lat;
                }
            }

            SavePath = this.textBox_uotputpath.Text + "\\sinexcoord" + ".txt";
            //"C:\\Users\\lilinyang\\Desktop\\sinexcoord" + ".txt";
            FileInfo     aFile = new FileInfo(SavePath);
            StreamWriter SW    = aFile.CreateText();

            System.Globalization.NumberFormatInfo GN = new System.Globalization.CultureInfo("zh-CN", false).NumberFormat;
            GN.NumberDecimalDigits = 6;
            foreach (var item in sitecood)
            {
                SW.Write(item.Key.ToString());
                SW.Write(" ");
                SW.Write(item.Value.truexyz.X.ToString());
                SW.Write(" ");
                SW.Write(item.Value.truexyz.Y.ToString());
                SW.Write(" ");
                SW.Write(item.Value.truexyz.Z.ToString());
                SW.Write(" ");
                SW.Write(item.Value.lon.ToString());
                SW.Write(" ");
                SW.Write(item.Value.lat.ToString());
                SW.Write("\n");
            }
            SW.Close();
        }
示例#27
0
        /// <summary>
        /// 生成一个表格
        /// </summary>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <param name="interval"></param>
        /// <param name="siteXyz"></param>
        /// <param name="SatelliteTypes"></param>
        /// <param name="AngleCut"></param>
        /// <param name="EphemerisService"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static ObjectTableStorage BuildTable(
            Time startTime, Time endTime, double interval,
            XYZ siteXyz,
            List <SatelliteType> SatelliteTypes,
            double AngleCut = 10,
            IEphemerisService EphemerisService = null,
            string tableName = "卫星高度角")
        {
            var table = new ObjectTableStorage(tableName);

            if (siteXyz == null)
            {
                return(null);
            }
            for (Time time = startTime; time <= endTime; time += interval)
            {
                table.NewRow();
                table.AddItem("Epoch", time);

                foreach (var sat in EphemerisService.Prns)
                {
                    if (!SatelliteTypes.Contains(sat.SatelliteType))
                    {
                        continue;
                    }

                    var eph = EphemerisService.Get(sat, time);
                    if (eph == null)
                    {
                        continue;
                    }

                    var p   = CoordTransformer.XyzToGeoPolar(eph.XYZ, siteXyz);
                    var ele = p.Elevation;
                    if (ele >= AngleCut)
                    {
                        table.AddItem(sat, ele);
                    }
                }
                table.EndRow();
            }
            return(table);
        }
示例#28
0
        private void button_solve_Click(object sender, EventArgs e)
        {
            TwoLineElement tle = GetTwoLineElement();

            Gnsser.Orbits.Orbit orbit = new Gnsser.Orbits.Orbit(tle);

            double intervalMin = Double.Parse(this.textBox_intervalMin.Text);
            double count       = Int32.Parse(this.textBox_count.Text);
            List <TimedMotionState> sateStates = new List <TimedMotionState>();

            for (int i = 0; i < count; i++)
            {
                double           time    = i * intervalMin;
                TimedMotionState eciSDP4 = orbit.PositionEci(time);
                sateStates.Add(eciSDP4);
            }

            if (sateStates.Count == 0)
            {
                return;
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendLine(orbit.ToString());
            sb.AppendLine(tle.ToString());
            foreach (var item in sateStates)
            {
                sb.AppendLine(item.ToString());
            }

            this.textBox_show.Text = sb.ToString();

            int j = 0;

            lonlats = new List <AnyInfo.Geometries.Point>();
            foreach (var item in sateStates)
            {
                GeoCoord geoCoord = CoordTransformer.XyzToGeoCoord(item.Position * 1000, AngleUnit.Degree);
                lonlats.Add(new AnyInfo.Geometries.Point(geoCoord, j + "", item.Date.ToTime().ToString("hh:mm:ss")));
                j++;
            }
        }
示例#29
0
        private void button_showOnMap_Click(object sender, EventArgs e)
        {
            GeoCoords = new System.Collections.Generic.List <GeoCoord>();
            foreach (var item in AllPointsApproXyz)
            {
                var geoCoord = CoordTransformer.XyzToGeoCoord(item.Value);
                GeoCoords.Add(geoCoord);
            }

            if (showPointLayer != null && GeoCoords != null)
            {
                List <AnyInfo.Geometries.Point> lonlats = new List <AnyInfo.Geometries.Point>();
                foreach (GeoCoord g in GeoCoords)
                {
                    lonlats.Add(new AnyInfo.Geometries.Point(g, "1"));
                }
                Layer layer = LayerFactory.CreatePointLayer(lonlats);
                showPointLayer(layer);
            }
        }
示例#30
0
        /// <summary>
        /// 创建点图元素
        /// </summary>
        /// <param name="layer">图层</param>
        /// <param name="xyz">坐标</param>
        /// <param name="name">名称</param>
        /// <returns></returns>
        private static SimpleFeature CreatePtFeature(Layer layer, XYZ xyz, string name)
        {
            AnyInfo.Geometries.Point p = new AnyInfo.Geometries.Point(CoordTransformer.XyzToGeoCoord(xyz));
            p.Name = name;
            p.Id   = name + new Random().Next(10000);

            SimpleFeatureBuilder b = new SimpleFeatureBuilder(layer.FeatureSource.FeatureCollection.Schema);

            b.SetGeometry(p);
            b.SetName(p.Name);
            b.SetFeatureId(p.Id);
            b.SetStyle(new AnyInfo.Styles.PointStyle()
            {
                Color = System.Drawing.Color.Red, Diameter = 12
            });
            SimpleFeature sf = b.Build();

            layer.FeatureSource.FeatureCollection.Add(sf);
            layer.Extent.Expands(sf.Envelope);
            return(sf);
        }