⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 carform.cs

📁 gps
💻 CS
📖 第 1 页 / 共 2 页
字号:
                    if (m_carAngle > 180) m_lati -= lati / lUnit;
                    else if (m_carAngle < 180) m_lati += lati / lUnit;
                }
                else
                {
                    // 向s行驶
                    if (m_carAngle > 180) m_lati += lati / lUnit;
                    else if (m_carAngle < 180) m_lati -= lati / lUnit;
                }
                // 超出边界情况
                if (m_lati < 0)
                {
                    // 改变
                    if (m_latiType == LatitudeType.South) m_latiType = LatitudeType.North;
                    else m_latiType = LatitudeType.South;
                    m_lati = -m_lati;
                }
                else if (m_lati > 90)
                {
                    if (m_latiType == LatitudeType.South) m_latiType = LatitudeType.North;
                    else m_latiType = LatitudeType.South;
                    m_lati = 180 - m_lati;
                }
            }

            // 经度有变得情况
            if (m_carAngle != 90 && m_carAngle != 270)
            {
                if (m_longType == LongitudeType.East)
                {
                    // 向s行驶
                    if (m_carAngle > 90 && m_carAngle < 270) m_long -= Long / rUnit;
                    else m_long += Long / rUnit;
                }
                else
                {
                    // 向s行驶
                    if (m_carAngle > 90 && m_carAngle < 270) m_long += Long / rUnit;
                    else m_long -= Long / rUnit;
                }
                // 超出边界情况
                if (m_long < 0)
                {
                    // 改变
                    if (m_longType == LongitudeType.East) m_longType = LongitudeType.West;
                    else m_longType = LongitudeType.East;
                    m_long = -m_long;
                }
                else if (m_lati > 180)
                {
                    if (m_longType == LongitudeType.East) m_longType = LongitudeType.West;
                    else m_longType = LongitudeType.East;
                    m_long = 360 - m_long;
                }
            }
        }


        // 经纬变化规则
        // 改变方向键后发生 方向变化
        //   参数:   右1 左2
        private void Position(int n)
        {
            int angle = 3;  // 每次转动的角度

            switch (n)
            {
                // 按下左键
                case 2:
                    m_carAngle += angle;
                    if (m_carAngle >= 360) m_carAngle -= 360;
                    break;
                // 按下右键
                case 1:
                    m_carAngle -= angle;
                    if (m_carAngle < 0) m_carAngle += 360;
                    break;
            }

        }

        private void ReceiveTimer_Tick(object sender, EventArgs e)
        {
            string str_rcv = gpscomport.ReceivedData;
            if (str_rcv == null)
                return;
            ReceiveLog.writeLog(str_rcv);
            PackageType type = PackageFactory.GetPackageType(str_rcv);
            switch (type)
            {
                case PackageType.GPRS:
                    GPRS_Process(str_rcv);
                    break;
                case PackageType.GPCD:
                    GPCD_Process(str_rcv);
                    break;
                default:
                    break;
            }
        }
        private void GPRS_Process(string datagram)
        {
            GPSI gpsi = new GPSI();

            // 状态信息设置
            gpsi.EngineTemperature = m_enginTemperature;
            gpsi.Heavyness = m_heaviyness;
            gpsi.OilSurplus = m_oilSurplus;
            gpsi.MachineName = m_name;
            // 发送
            string str = gpsi.ToString();
            gpscomport.SendData(str);
            SendLog.writeLog(str);
        }
        private void GPCD_Process(string datagram)
        {
            GPCD gpcd = PackageFactory.CreateGPCD(datagram);

            switch (gpcd.GPCommand)
            {
                case GPCommand.CloseEngine:
                    // 关引擎命令处理
                    m_status |= 0x01;
                    break;
                case GPCommand.Lock:
                    // 锁车匙命令处理
                    m_status |= 0x02;
                    break;
                case GPCommand.StopOiling:
                    // 断油命令处理
                    m_status |= 0x04;
                    break;
                case GPCommand.OpenEngine:
                    // 开引擎处理
                    m_status &= 0x1e;
                    break;
                case GPCommand.StartOiling:
                    // 继续供油处理
                    m_status &= 0x1b;
                    break;
                case GPCommand.Unlock:
                    // 解车锁处理
                    m_status &= 0x1d;
                    break;
                default:
                    break;
            }
        }

        private void CarForm_Paint(object sender, PaintEventArgs e)
        {
            //if (m_status != 0 || m_carSpeed == 160)
            //    CarDisplay();
        }
        private void AlarmProcess(Keys key)
        {
            GPAI gpai = new GPAI();
            gpai.MachineName = m_name;
            switch (key)
            {
                case Keys.D:
                    gpai.AlarmReason = AlarmReason.NaturalDisaster;
                    break;
                case Keys.E:
                    gpai.AlarmReason = AlarmReason.HarewareError;
                    break;
                case Keys.R:
                    gpai.AlarmReason = AlarmReason.Robber;
                    break;
                case Keys.S:
                    gpai.AlarmReason = AlarmReason.TrafficSuddence;
                    break;
                case Keys.L:
                    gpai.AlarmReason = AlarmReason.ResourceLack;
                    break;
            }
            string str = gpai.ToString();
            gpscomport.SendData(str);
            SendLog.writeLog(str);
        }

        private void stateTimer_Tick(object sender, EventArgs e)
        {
            if (m_carSpeed < 160)
            {
                if (m_enginTemperature < 10)
                    m_enginTemperature += 3.3f;
                else
                    if (m_enginTemperature < 25)
                        m_enginTemperature += 2.7f;
                    else
                        if (m_enginTemperature < 50)
                            m_enginTemperature += 1.7f;
                        else if (m_enginTemperature < 90)
                            m_enginTemperature += 0.7f;
                m_oilSurplus -= 0.1f;
            }
            else
                m_enginTemperature -= 1.3f;
            Random rand = new Random();
            m_high += rand.NextDouble() * 30 - 15;
        }

        private void CarForm_FormClosed(object sender, FormClosedEventArgs e)
        {
            SavePositionInfo();
        }
        /// <summary>
        /// 保存定位文件信息
        /// </summary>
        private void SavePositionInfo()
        {
            string section = "起始位置";
            GPSClassLibrary.OperateIniFile.WriteIniData(section, "longitude", m_long.ToString(), InitFilePath);
            GPSClassLibrary.OperateIniFile.WriteIniData(section, "latitude", m_lati.ToString(), InitFilePath);
            GPSClassLibrary.OperateIniFile.WriteIniData(section, "longitudeType", ((char)m_longType).ToString(), InitFilePath);
            GPSClassLibrary.OperateIniFile.WriteIniData(section, "latitudeType", ((char)m_latiType).ToString(), InitFilePath);
            GPSClassLibrary.OperateIniFile.WriteIniData(section, "height", m_high.ToString(), InitFilePath);
            GPSClassLibrary.OperateIniFile.WriteIniData(section, "carangle", m_carAngle.ToString(), InitFilePath);
        }
        /// <summary>
        /// 读取定位文件信息
        /// </summary>
        private void ReadPositionInfo()
        {
            string section = "起始位置";
            string longi = GPSClassLibrary.OperateIniFile.ReadIniData(section, "longitude", null, InitFilePath);
            string lati = GPSClassLibrary.OperateIniFile.ReadIniData(section, "latitude", null, InitFilePath);
            string longiType = GPSClassLibrary.OperateIniFile.ReadIniData(section, "longitudeType", null, InitFilePath);
            string latiType = GPSClassLibrary.OperateIniFile.ReadIniData(section, "latitudeType", null, InitFilePath);
            string height = GPSClassLibrary.OperateIniFile.ReadIniData(section, "height", null, InitFilePath);
            string carangle = GPSClassLibrary.OperateIniFile.ReadIniData(section, "carangle", null, InitFilePath);
            if (longi != "")
                m_long = double.Parse(longi);
            if (lati != "")
                m_lati = double.Parse(lati);
            if (latiType != "")
                m_latiType = (LatitudeType)char.Parse(latiType);
            if (longiType != "")
                m_longType = (LongitudeType)char.Parse(longiType);
            if (height != "")
                m_high = double.Parse(height);
            if (carangle != "")
                m_carAngle = int.Parse(carangle);
        }
        /// <summary>
        /// 经纬信息转成实坐标
        /// </summary>
        /// <returns></returns>
        private PointF ToRealPoint()
        {
            return Point.Empty;
        }
        /// <summary>
        /// 实坐标转成经纬信息
        /// </summary>
        private void ToMapInfo(ref PointF RealPoint)
        {
            #region 范围控制
            int maxWidth = 5000 * 10000,
                maxHeight = 4500 * 10000;
            if (RealPoint.X >= maxWidth)
                RealPoint.X = 0;
            else if (RealPoint.X < 0)
                RealPoint.X = maxWidth - 1;
            if (RealPoint.Y >= maxHeight)
                RealPoint.Y = 0;
            else if (RealPoint.Y < 0)
                RealPoint.Y = maxHeight - 1;
            #endregion

            float halftWidth = maxWidth / 2,
                halfHeight = maxHeight / 2;
            #region 计算纬度
            switch (RealPoint.Y > halfHeight)
            {
                case true:
                    m_latiType = LatitudeType.South;
                    m_lati = (double)((RealPoint.Y - halfHeight) / halfHeight * 90);
                    break;
                case false:
                    m_latiType = LatitudeType.North;
                    m_long = (double)((-RealPoint.Y + halfHeight) / halfHeight * 90);
                    break;
            }
            #endregion
            #region 计算经度
            switch (RealPoint.X > halftWidth)
            {
                case true:
                    m_longType = LongitudeType.East;
                    m_long = (double)((RealPoint.X - halftWidth) / halftWidth * 180);
                    break;
                case false:
                    m_longType = LongitudeType.West;
                    m_long = (double)((-RealPoint.X + halftWidth) / halftWidth * 180);
                    break;
            }
            #endregion
        }
        /// <summary>
        /// 速度增加
        /// </summary>
        /// <param name="CurRealPoint">当前坐标</param>
        /// <param name="speed">速度</param>
        /// <param name="directAngle">方向角度</param>
        /// <returns></returns>
        private PointF AddSpeed(PointF CurRealPoint, double speed, int directAngle)
        {
            double x_inc = speed * Math.Cos(directAngle)*100,
                   y_inc = speed * Math.Sin(directAngle)*100;
            return new PointF((float)(CurRealPoint.X + x_inc), (float)(CurRealPoint.Y + y_inc));
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -