using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace VirtualGPS
{
public class GPS
{
private System.Windows.Forms.Timer timer; //定时器, 模拟GPS时发送,周期间隔1S
private System.IO.Ports.SerialPort serialPort; //串口
private ArrayList buf = new ArrayList();
public GPS(string portName, int baudRate)
{
timer = new System.Windows.Forms.Timer();
this.timer.Tick += new System.EventHandler(this.timer_Tick);
serialPort=new System.IO.Ports.SerialPort(portName,baudRate,System.IO.Ports.Parity.None);
timer.Interval = 1000; //GPS 发送周期
DefData = new gpsEN("0", "0");
Sdata = DefData;//待发送数据指向 缺省的数据
}
public bool StartGPS()
{
//启用VirtualGPS
try
{
serialPort.Open();
timer.Enabled = true; //启用定时器
return true;
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show("连接状态 :Error" + ex.Message);
return false;
}
}
public bool StopGPS()
{
//关闭VirtualGPS
try
{
serialPort.Close();
timer.Enabled = false; //关闭定时器
return true;
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show("连接状态 :Error" + ex.Message);
return false;
}
}
private gpsEN DefData; //缺省的GPS数据
private gpsEN Sdata; //发送的GPS数据
//GPS结构体
private struct gpsEN
{
public gpsEN(string E, string N)
{
this.E = E;
this.N = N;
this.GpsData = GetGpsData(E, N);
}
public void copy(gpsEN g)
{
this.E = g.E;
this.N = g.N;
this.GpsData = g.GpsData;
}
public string E;
public string N;
public string GpsData;
};
private void timer_Tick(object sender, EventArgs e)
{
//GPS数据定时发送
//serialPort.Write(Encoding.ASCII.GetBytes(string.Format("AT+CMGR={0}\r", n)), 0, Encoding.ASCII.GetBytes(string.Format("AT+CMGR={0}\r", n)).Length);
if (buf.Count > 0)
{
// gpsEN g = (gpsEN)buf[0];
// Sdata.E = g.E;
// Sdata.N = g.N;
// Sdata.GpsData = g.GpsData;
Sdata.copy((gpsEN)buf[0]);
buf.RemoveAt(0);
}
//else
//{
serialPort.WriteLine(Sdata.GpsData); //发送上一次的数据,GPS首次启动就发送默认的数据
//}
Console.WriteLine("E="+Sdata.E + " N=" + Sdata.N + " GPS=" + Sdata.GpsData);
}
/// <summary>
/// 向VirtualGPS 写入数据(E经度 N纬度)
/// </summary>
/// <param name="E">经度</param>
/// <param name="N">纬度</param>
public void WriteGpsEN(string E, string N)
{
gpsEN g = new gpsEN(E, N);
buf.Add(g); //写入GPS数据进入缓冲区
}
/// <summary>
/// 根据经纬度信息,转换经纬度信息为地图所需经纬度信息
/// </summary>
/// <param name="placeInfo">palaceInfo可为经度,或者是纬度值</param>
/// <returns>返回一个地图gps数据</returns>
private static decimal convertJWD(decimal placeInfo)
{
decimal tt;
int bb = (int)placeInfo;
decimal m = placeInfo - bb;//--取出整数
tt = bb * 100 + m * 60;
return tt;
}
/// <summary>
/// 获取gps数据
/// </summary>
/// <param name="E">经度</param>
/// <param name="N">纬度</param>
/// <returns>返回一个gps数据包</returns>
public static string GetGpsData(string E, string N)
{
string strGpsInfo = null;
decimal e;
decimal n;
e = convertJWD(decimal.Parse(E));
n = convertJWD(decimal.Parse(N));
strGpsInfo = "$GPGGA,095013.000," + e + ",N," + n + ",E,1,07,04.7,00064.4,M,07.2,M,,*6E\n";
strGpsInfo += "$GPGSA,A,2,14,30,22,,05,06,18,16,,,,,04.8,04.7,*19\n";
strGpsInfo += "$GPGSV,2,1,08,14,67,025,75,30,53,051,75,22,43,182,79,25,45,295,*7A\n";
strGpsInfo += "$GPGSV,2,2,08,05,17,042,75,06,22,118,65,18,12,162,64,16,10,210,75*71\n";
strGpsInfo += "$GPRMC,095013.000,A," + e + ",N," + n + ",E,0.00,0.00,150807,004.3,W*73";
return strGpsInfo;
}
}
}
分享到:
相关推荐
总结来说,这两个MATLAB文件是GPS系统CA码生成的重要工具,对于理解GPS信号处理、开发GPS接收机模拟器或者进行相关研究非常有用。通过学习和使用这些代码,开发者可以深入理解GPS信号的特性,增强对卫星导航系统原理...
你可能会看到如何创建一个简单的地图应用,该应用能够实时显示设备的位置,或者如何结合路线规划算法实现导航功能。视频可能会涵盖以下几个方面: 1. **设置项目和环境**:如何配置Visual Studio项目,选择正确的...
《C#编程实现飞行模拟器技术详解》 飞行模拟器是一种复杂的软件系统,它通过模拟真实飞行环境,为用户提供了接近真实的飞行体验。在本文中,我们将深入探讨如何使用C#编程语言来创建一个功能丰富的飞行模拟器。C#...
本部分将基于现有GIS系统和嵌入式操作系统的研究成果,结合适当的算法,在Visual C#.NET环境下的Windows CE模拟器中设计并实现一个嵌入式GIS系统。 ##### 2.2 Windows CE简介及基于该平台开发GIS的基本原则 - **...
在实际开发过程中,开发者可能会使用诸如Unity或Unreal Engine这样的游戏引擎来创建逼真的模拟环境,同时利用C#(ASP.NET的主要编程语言)与其他编程语言(如Python或C++)相结合,以实现算法和逻辑。此外,开源库和...
5. **测试与调试**:在Unity中编写C#脚本来调用Java桥接方法,然后在Android设备或模拟器上运行,确保原生插件功能正常。 在实际应用中,Unity3D Android Native Plugin常用于以下场景: - **性能优化**:对于图形...
C#提供了加密算法和身份验证机制,如SSL/TLS、OAuth等,保护用户数据和通信安全。 10. **调试和测试** - 在开发过程中,使用Visual Studio或Visual Studio for Mac的调试工具进行测试和调试至关重要。开发者还需要...
8. **调试工具**:Visual Studio提供了一些工具来帮助开发者调试Windows Mobile应用,如模拟器和远程调试器。熟悉这些工具能大大提高问题定位和修复的效率。 9. **性能优化**:由于硬件限制,Windows Mobile应用...
通常,压缩包中会包含项目的各种文件,如C#源代码文件(.cs)、资源文件(如图片、XML配置文件)、项目文件(.csproj)以及可能的库和框架依赖。 基于这些信息,我们可以推断出以下几个关键知识点: 1. **Windows ...
**IP电话、STL、多任务、磁贴、内存管理**:IP电话支持VoIP通信,STL(标准模板库)提供了一系列通用的数据结构和算法,多任务和磁贴是WP系统的关键特性,内存管理是确保应用性能和稳定性的重要环节。 #### 六、...