Exemplo n.º 1
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);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 解析计算结果。
        /// </summary>
        /// <param name="lines">结果行</param>
        /// <returns></returns>
        public static RtkrcvResult Parse(string[] lines)
        {
            RtkrcvResult result = new RtkrcvResult();

            foreach (var item in lines)
            {
                if (String.IsNullOrEmpty(item))
                {
                    continue;
                }
                var line = item.Trim();
                if (line.StartsWith("%"))
                {
                    continue;
                }

                result.Items.Add(RtkrcvResultItem.Parse(line));
            }

            return(result);
        }