示例#1
0
文件: Form1.cs 项目: slavabulin/gpx
        public int CountDistance(trackSegment tracksegment)
        {
            if (tracksegment == null) return 0;

            decimal dist_in_decimal;
            double cos_lat1, cos_lat2, dist_in_double, sin_delta_lat_half, sin_delta_lon_half;

            cos_lat1 = Math.Cos(Decimal.ToDouble(tracksegment.start.Lat));
            cos_lat2 = Math.Cos(Decimal.ToDouble(tracksegment.end.Lat));

            sin_delta_lat_half = Math.Sin(Decimal.ToDouble((tracksegment.end.Lat - tracksegment.start.Lat) / 2));
            sin_delta_lon_half = Math.Sin(Decimal.ToDouble((tracksegment.end.Lon - tracksegment.start.Lon) / 2));

            dist_in_double = 6372795 * 2 * Math.Asin(Math.Sqrt(sin_delta_lat_half * sin_delta_lat_half +
                cos_lat1 * cos_lat2 * sin_delta_lon_half * sin_delta_lon_half));

            try
            {
                dist_in_decimal = (decimal)dist_in_double;
                return Decimal.ToInt32(Decimal.Round(dist_in_decimal, 0));
            }
            catch (Exception ex)
            {
                return 0;
            }
        }
示例#2
0
文件: Form1.cs 项目: slavabulin/gpx
        public decimal CountSpeed(trackSegment tracksegment)
        {
            TimeSpan timespan;
            decimal timespan_dec, speed;
            timespan = tracksegment.start.time - tracksegment.end.time;

            try
            {
                timespan_dec = (Decimal)timespan.TotalSeconds;
                timespan_dec = Decimal.Round(timespan_dec, 0);
                speed = tracksegment.distance / timespan_dec;
                if (speed <= 0)
                {
                    return speed * (-1);
                }
                else
                    return speed;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
示例#3
0
文件: Form1.cs 项目: slavabulin/gpx
        void FormTrack()
        {
            if (ptList == null) return;

            //minLat = ptList.ElementAt(0).lat; //minY
            //maxLat = ptList.ElementAt(0).lat; //maxY
            //minLon = ptList.ElementAt(0).lon; // minX
            //maxLon = ptList.ElementAt(0).lon; // maxX
            if((minLat==0)&&(minLon==0)&&(maxLat==0)&&(maxLon==0))
            {
                //преобразуем градусы в радианы
                minLat = (Decimal)Degr2Rad(180);
                minLon = (Decimal)Degr2Rad(180);
                maxLat = (Decimal)Degr2Rad(0);
                maxLon = (Decimal)Degr2Rad(0);

                //вычисляем крайние точки трека
                for (int y = 0; y < ptList.Count; y++)
                {
                    ptList.ElementAt(y).lat = (Decimal)Degr2Rad(ptList.ElementAt(y).lat);
                    ptList.ElementAt(y).lon = (Decimal)Degr2Rad(ptList.ElementAt(y).lon);

                    if (minLat >= ptList.ElementAt(y).lat)
                    {
                        minLat = ptList.ElementAt(y).lat;
                    }
                    if (maxLat <= ptList.ElementAt(y).lat)
                    {
                        maxLat = ptList.ElementAt(y).lat;
                    }
                    if (minLon >= ptList.ElementAt(y).lon)
                    {
                        minLon = ptList.ElementAt(y).lon;
                    }
                    if (maxLon <= ptList.ElementAt(y).lon)
                    {
                        maxLon = ptList.ElementAt(y).lon;
                    }
                }
            }

            //a = (maxLat - minLat) / (base.Size.Height * 10);
            a = (maxLat - minLat) / (base.Size.Height);
            b = (maxLon - minLon) / base.Size.Width;

            //------------------------------------------------------------
            track = new trackSegment[ptList.Count - 1];
            for (int t = 0; t < ptList.Count - 1; t++)
            {
                track[t] = new trackSegment();
                track[t].start = new mapPoint();
                track[t].end = new mapPoint();

                track[t].start.Lat = ptList.ElementAt(t).lat;
                track[t].start.Lon = ptList.ElementAt(t).lon;
                track[t].start.time = ptList.ElementAt(t).time;

                track[t].end.Lat = ptList.ElementAt(t + 1).lat;
                track[t].end.Lon = ptList.ElementAt(t + 1).lon;
                track[t].end.time = ptList.ElementAt(t + 1).time;

                ////--------test data--------------
                //track[t].start.Lat = (Decimal)Degr2Rad((Decimal)77.1539);
                //track[t].start.Lon = (Decimal)Degr2Rad((Decimal)(-120.398));
                //track[t].end.Lat = (Decimal)Degr2Rad((Decimal)77.1804);
                //track[t].end.Lon = (Decimal)Degr2Rad((Decimal)129.55);
                ////  2332669
                ////-------------------------------
                track[t].distance = CountDistance(track[t]);

                //tracklenght = tracklenght + track[t].distance;

                try
                {
                    track[t].speed = CountSpeed(track[t]);
                }
                catch (Exception ex)
                {
                    track[t].speed = 0;
                }

                track[t].start.Y = Decimal.ToInt32(Decimal.Round((ptList.ElementAt(t).lat - minLat) / a, 0));
                track[t].start.X = Decimal.ToInt32(Decimal.Round((ptList.ElementAt(t).lon - minLon) / b, 0));
                track[t].end.Y = Decimal.ToInt32(Decimal.Round((ptList.ElementAt(t + 1).lat - minLat) / a, 0));
                track[t].end.X = Decimal.ToInt32(Decimal.Round((ptList.ElementAt(t + 1).lon - minLon) / b, 0));
            }
        }