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

📄 form1.cs

📁 自己开发的子windows mobile下面运行的简单的GPS定位系统
💻 CS
📖 第 1 页 / 共 3 页
字号:
					if(x > e.X)
					{
						pictureBox4.Left += (x - e.X);
						x = e.X;
					}
				}
				if(pictureBox4.Top > (300 - pictureBox4.Image.Height))
				{
					pictureBox4.Top += (e.Y - y);
					y = e.Y;
				}
				else
				{
					if(y > e.Y)
					{
						pictureBox4.Top += (y - e.Y);
						y = e.Y;
					}
				}
			}
*/
		}

		/* 地图操作 */
		/* 初始化,看支持那几个地图 */
		public unsafe void MapPlaceInit()
		{
			int j;
			if (!File.Exists("\\data\\maplist.dat")) 
			{
				form1.Text = "找不到地图列表文件";
				return;
			}
			StreamReader sr = File.OpenText("\\data\\maplist.dat");
			String line1,line2;
			j = 0;
			String tmp = "";
			while(((line1 = sr.ReadLine())!=null) && ((line2 = sr.ReadLine())!=null))
			{
				switch(line1[0])
				{
					case '0'://桂林地图
						tmp = "桂林地图";
						break;
					case '1'://广西地图
						tmp = "广西地图";
						break;
					case '2'://广东地图
						tmp = "广东地图";
						break;
					case '3'://湖南地图
						tmp = "湖南地图";
						break;
					case '4'://永州地图
						tmp = "永州地图";
						break;
					case '5'://武汉地图
						tmp = "武汉地图";
						break;
					default:
						return;
						break;
				}
				
				maplist[j].title = tmp;
				maplist[j].mapindex = (byte)line1[0];
				maplist[j].mapindex -= 0x30;
				maplist[j++].mappath = line2;
			}
			sr.Close();
		}

		/* 将图片文件读入到存储缓冲中去 */
		public void MainLoadMap(string _map)
		{
			Graphics g = this.CreateGraphics();
			b = CreateBitmapFromFile(g, _map);
			if (b == null)
			{
				form1.Text = "找不到地图数据文件";
				return;
			}

			pictureBox4.Image = b;
			pictureBox4.Width = pictureBox4.Image.Width;
			pictureBox4.Height = pictureBox4.Image.Height;
			 
			pictureBox4.Update();
		}

		/* 读入地图的初始值 */
		public void MainGetMapBuf(int _mapnum)
		{
			int i;

			for(i = 0; i < 10; i++)
			{
				if(_mapnum == maplist[i].mapindex)
				{
					g_filename = maplist[_mapnum].mappath + "mapinfo.dat";
					MainMapInit(g_filename);
					g_filename = maplist[_mapnum].mappath + "11.jpg";
					MainLoadMap(g_filename);
					break;
				}
			}
		}


		private Bitmap CreateBitmapFromFile(Graphics g, string FILE_NAME)
		{
			Bitmap b1 = null;
			try
			{
				b1 = new Bitmap(FILE_NAME);
			}
			catch (Exception e)
			{
				form1.Text = "找不到地图数据文件";
			}
			return b1;
		}

		private void menuItem2_Click(object sender, System.EventArgs e)
		{
			try
			{
				b_isloadmap = true;
				Application.Run(new Form2());
			}
			catch (Exception e1)
			{
			}
		}

		private void menuItem4_Click(object sender, System.EventArgs e)
		{
			form1.Text = "正在退出...";
			g_sysisexit = true;
			MainUartClose();
			Thread.Sleep(2000);
			Application.Exit();
		}

		private void Form1_GotFocus(object sender, System.EventArgs e)
		{
			form1.pictureBox4.Top = 24;
			form1.pictureBox4.Left = 0;

			if((g_currentmapplace == mapinfo.Form2.g_mapselect) || (mapinfo.Form2.g_mapselect == 0xFF))
			{
				return;
			}

			form1.Text = "正在装载地图...";
			switch( mapinfo.Form2.g_mapselect)
			{
				case 0: //桂林地图
					MainGetMapBuf(0);
					form1.Text = "桂林地图";
					break;
				case 1: //广西地图
					MainGetMapBuf(1);
					form1.Text = "广西地图";
					break;
				case 2: //广东地图
					MainGetMapBuf(2);
					form1.Text = "广东地图";
					break;
				case 3:
					MainGetMapBuf(3);
					form1.Text = "湖南地图";
					break;
				case 4:
					MainGetMapBuf(4);
					form1.Text = "永州地图";
					break;
				case 5:
					MainGetMapBuf(5);
					form1.Text = "武汉地图";
					break;
				default:
					switch(g_currentmapplace)
					{
						case 0: //桂林地图
							form1.Text = "桂林地图";
							break;
						case 1: //
							form1.Text = "广西地图";
							break;
						case 2: //广东地图
							form1.Text = "广东地图";
							break;
						case 3:
							form1.Text = "湖南地图";
							break;
						case 4:
							form1.Text = "永州地图";
							break;
						case 5:
							form1.Text = "武汉地图";
							break;
						default:
							break;
					}
					break;
			}
			g_currentmapplace = mapinfo.Form2.g_mapselect;
			form1.g_currenrMap = 0xff;
			b_isloadmap = false;
		}


		/* 串口操作 */
		void MainUartClose()
		{
			comport.Close();
		}



		public static void ReadThread() ////接收串口数据线程
		{
			int i = 0, j = 0, k;
			byte[] aa = new byte[128];
			byte[] buf = new byte[250];

			while(true)
			{
				i = comport.Read(aa, 0, 128);
				if(i > 0)
				{
					if((j + i) >= 250)
					{
						j = 0;
						continue;
					}
					for(k = 0; k < i; k++)
					{
						buf[j+k] = aa[k];
					}
					j += i;
					j = MainTerminalMsgProc(buf, j);
					//comport.Write(aa, i);
				}
				if(j == 0)
				{
					Thread.Sleep(50);
				}
				else
				{
					continue;
				}
				if(form1.g_sysisexit == true)
				{
					break;
				}
			}
		}

		public static int MainTerminalMsgProc(byte[] _data, int _len)
		{
			int i,speed,j,direct;
			byte framelen, tmp;
			ulong temp1,temp2;
			byte temp3,checksum = 0;

			if(b_isloadmap == true) //正在装载地图时不再切换地图
			{
				return 0;
			}

ReProcMsg:
			for(i = 0; i < _len; i++)
			{
				if(_data[i] == 'B')
				{
					break;
				}
			}

			if(i >= _len)
			{
				return 0;
			}
			framelen = _data[i+1];
			if(_len < (framelen + 5 + i))
			{
				/* skip one no complete frame */
				return _len;
			}

			tmp = _data[i+2];
			if((framelen & tmp) != 0x00)
			{
				/* error frame */
				return 0;
			}

			tmp = _data[i+3]; //帧类型
			if(tmp > 0x06)
			{
				/* error */
				return 0;
			}

			for(j = (i+ 1); j < (framelen + 4 + i); j++)
			{
				checksum ^= _data[j];
			}

			if(checksum != _data[j])
			{
				/* checksum error */
				//return 0;
			}

			switch(tmp)
			{
				case 0x01:
					tmp = _data[i+4];
					if(tmp == 0x00)
					{
						//GPS正常
						sys_info.SysSetGpsStatus(1);
						//form1.Text = "GPS正常";
					}
					else
					{
						sys_info.SysSetGpsStatus(0);
						//form1.Text = "GPS不正常";
					}
					break;
				case 0x02:
					tmp = _data[i+4];
					if(tmp == 0x00)
					{
						//GSM正常
						sys_info.SysSetGsmStatus(1);
						form1.GsmModule.Image = form1.imageList1.Images[0];
						//form1.Text = "GSM正常";
					}
					else
					{
						sys_info.SysSetGsmStatus(0);
						form1.GsmModule.Image = form1.imageList1.Images[1];
						//form1.Text = "GSM不正常";
					}
					break;
				case 0x03://GPS 定位数据帧
					//经度
					i += 5;
					if((_data[i] & 0x10) == 0x00)
					{
						//不精确
						form1.Text = "GPS信号不精确";
						return 0;
					}
					temp3 = (byte)(_data[i] & 0x0f);
					temp1 = (ulong)temp3*100;
  		
					temp3 = (byte)(_data[i+1] & 0xf0);
					temp1 += (ulong)(temp3>>4)*10;
  		
					temp3 = (byte)(_data[i+1] & 0x0f);
					temp1 += (ulong)temp3;  //度
   
					temp3 = (byte)(_data[i+2] & 0xf0);
					temp2 = (ulong)(temp3>>4)*100000;
  		
					temp3 = (byte)(_data[i+2] & 0x0f);
					temp2 += (ulong)temp3*10000;
  		
					temp3 = (byte)(_data[i+3] & 0xf0);
					temp2 += (ulong)(temp3>>4)*1000;
  	
					temp3 = (byte)(_data[i+3] & 0x0f);
					temp2 += (ulong)temp3*100;
  		
					/////最后一位
					temp3 = (byte)(_data[i+4] & 0xf0);
					temp2 += (ulong)(temp3>>4)*10;
  		
					temp3 = (byte)(_data[i+4] & 0x0f);
					temp2 += (ulong)temp3;  //分
					/////////////
					currentx = (ulong)(temp1*60*10000 + temp2); //当前的经度(以分为单位)
  
					//纬度
					temp3 = (byte)(_data[i+5] & 0xf0);
					temp1 = (ulong)(temp3>>4)*10;
  		
					temp3 = (byte)(_data[i+5] & 0x0f);
					temp1 = (ulong)temp3 + temp1;  //度
  
					temp3 = (byte)(_data[i+6] & 0xf0);
					temp2 = (ulong)(temp3>>4)*100000;
  		
					temp3 = (byte)(_data[i+6] & 0x0f);
					temp2 = (ulong)temp3*10000 + temp2;
  		
					temp3 = (byte)(_data[i+7] & 0xf0);
					temp2 = (ulong)(temp3>>4)*1000 + temp2;
  		
					temp3 = (byte)(_data[i+7] & 0x0f);
					temp2 = (ulong)temp3*100 + temp2;
  		
					/////最后一位
					temp3 = (byte)(_data[i+8] & 0xf0);
					temp2 = (ulong)(temp3>>4)*10 + temp2;
  		
					temp3 = (byte)(_data[i+8] & 0x0f);
					temp2 = (ulong)temp3 + temp2;  //分
					///////////
					currenty = (uint)(temp1*60*10000 + temp2); //当前的纬度(以分为单位)

					i = i+15; //速度
					speed = ((_data[i] & 0xf0) >> 4) * 100 + ((_data[i] & 0x0f) * 10);
					i++;
					speed += ((_data[i] & 0xf0) >> 4);
					speed = (speed * 1852) / 1000; ///转换成km/s

					//方向
					i++;
					direct = ((_data[i] & 0xf0) >> 4) * 100 + ((_data[i] & 0x0f) * 10);
					i++;
					direct += ((_data[i] & 0xf0) >> 4);
/*
					switch(direct / 90)
					{
						case 0:
							if(direct % 90 < 45)
							{
								form1.pictureBox2.Width = form1.imageList1.Images[3].Width;
								form1.pictureBox2.Height = form1.imageList1.Images[3].Height;
								form1.pictureBox2.Image = form1.imageList1.Images[3];
							}
							else
							{
								form1.pictureBox2.Width = form1.imageList1.Images[4].Width;
								form1.pictureBox2.Height = form1.imageList1.Images[4].Height;
								form1.pictureBox2.Image = form1.imageList1.Images[4];
							}
							break;
						case 1:
							if(direct % 90 < 45)
							{
								form1.pictureBox2.Width = form1.imageList1.Images[8].Width;
								form1.pictureBox2.Height = form1.imageList1.Images[8].Height;
								form1.pictureBox2.Image = form1.imageList1.Images[8];
							}
							else
							{
								form1.pictureBox2.Width = form1.imageList1.Images[5].Width;
								form1.pictureBox2.Height = form1.imageList1.Images[5].Height;
								form1.pictureBox2.Image = form1.imageList1.Images[5];
							}
							break;
						case 2:
							if(direct % 90 < 45)
							{
								form1.pictureBox2.Width = form1.imageList1.Images[9].Width;
								form1.pictureBox2.Height = form1.imageList1.Images[9].Height;
								form1.pictureBox2.Image = form1.imageList1.Images[9];
							}
							else
							{
								form1.pictureBox2.Width = form1.imageList1.Images[6].Width;
								form1.pictureBox2.Height = form1.imageList1.Images[6].Height;
								form1.pictureBox2.Image = form1.imageList1.Images[6];
							}
							break;
						case 3:
							if(direct % 90 < 45)
							{
								form1.pictureBox2.Width = form1.imageList1.Images[10].Width;
								form1.pictureBox2.Height = form1.imageList1.Images[10].Height;
								form1.pictureBox2.Image = form1.imageList1.Images[10];
							}
							else
							{
								form1.pictureBox2.Width = form1.imageList1.Images[7].Width;
								form1.pictureBox2.Height = form1.imageList1.Images[7].Height;
								form1.pictureBox2.Image = form1.imageList1.Images[7];
							}
							break;
						default:
							break;
					}
*/
					//忽略小数点后面的数字
					ShowMapFunc(currentx, currenty, speed);
					break;
				case 0x04://节电通知帧
					tmp = _data[i+4];
					if(tmp == 0x00)
					{
						sys_info.SysSetPowerStatus(0);
						form1.Text = "节电...";
					}
					else
					{
						sys_info.SysSetPowerStatus(1);
					}
					break;
				case 0x05://报警帧
					

⌨️ 快捷键说明

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