📄 carform.cs
字号:
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 + -