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;
        }

}
}

GPS模拟器算法(C#)相关推荐

  1. GPS纠偏算法,适用于google,高德体系的地图

    GPS纠偏算法,适用于google,高德体系的地图,精确度还比较高.我试了一下比高德本身的纠偏还精确点. /*** gps纠偏算法,适用于google,高德体系的地图* @author Adminis ...

  2. php gps定位范围算法,基本的GPS卫星定位算法

    姓名:杨汉雄 学号:19011210569 [嵌牛导读]GPS定位包括确定一个点的三维坐标与实现同步这四个未知参数.当前主流的GPS定位算法有有两种:(1)伪距测量:测量GPS卫星发射的测距码信号到达 ...

  3. 车载终端项目GPS模块算法详述

    项目系统使用WINCE6.0,应用层语言采用C#. 项目中GPS模块的工作过程为:读取串口中的GPS数据,解析封装到类中,然后进行数据库的保存操作,上传到后台,并进行位置和限制路径以及限制区域之间关系 ...

  4. m基于多相位功率倒置的GPS抗干扰算法matlab仿真

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 GPS接收机天线易受其它射频信号干扰,传统的做法已不能满足高精度用户的需求.为了提高导航定位精度,在 ...

  5. 基于并行搜索的低信噪比环境下GPS信号检测算法FPGA实现

    目录 一.理论基础 二.核心程序 三.测试结果 一.理论基础 全球定位系统(Global Positioning System,GPS),是一种以人造地球卫星为基础的高精度无线电导航的定位系统,它在全 ...

  6. 开源夏令营《基于HackRF开发GPS信号仿真模拟器》工作总结(三)

    2014.07.21-2014.07.27,项目已经开展三周了,接下来就要面对中期检查了.实验室已经放假了,现在只剩下为数不多的几个人了,其中包括我. 这周主要解决的问题 这周主要解决的问题分为三个方 ...

  7. java 存储卫星定位数据_gps卫星信号模拟器的特点介绍

    gps卫星信号模拟器是针对不同的用户机设计开发.生产测试.教学演示.测试验收.故障诊断等应用而推出的导航信号源.gps卫星信号模拟器可以模拟出GPS卫星导航定位系统及授时信号,能满足各类GPS信号导航 ...

  8. GPS是如何定位的?

                                                                                    <目录> GPS 全球经济基 ...

  9. Google体系地图纠偏算法

    google系地图纠偏算法,转载记录一下: 原博文:http://blog.csdn.net/junfeng120125/article/details/9966857 /*** gps纠偏算法,适用 ...

  10. gps wifi信号测试软件,搜星+WiFi+EMI 导航平板信号性能横评

    1导航平板信号性能横评 十一长假转眼即逝,不少朋友美好的旅游愿望都被淹没在了人山人海和高速大堵车中,让人甚至郁闷.不过现在丰富的电子产品还是让我们的出行路途方便和丰富了很多,比如指引我们到旅游景点目的 ...

最新文章

  1. 从CSDN的趣味题学PYTHON
  2. HNUSTOJ 1601:名字缩写
  3. 利用pdf.js开发嵌入pdf显示,以及利用jquery-ui左右分栏显示
  4. 阿里上线了一款新的电商app
  5. 关于 AWR/ASH 故障分析,我有 9 个问题不知当不当问?
  6. 新的生活,新的工作,新的挑战
  7. 二叉搜索树判定方法(c++实现)
  8. 京东让员工参观看守所;华为电视面世;苹果市值重回全球第一 | 极客头条
  9. Bailian2808 校门外的树【基础】
  10. java RandomAccessFile类(随机访问文件)
  11. 论电子病历文本编辑器
  12. java开发面试自我介绍模板_java应聘面试自我介绍范文
  13. 实战大数据平台开发架构讲解,免费大数据教学视频等你来拿
  14. Foxmail登录不上163邮箱。。。
  15. python爬虫:批量刷新网页
  16. WORD页码相同问题
  17. 小程序之任务发布与接单平台
  18. 【唐老狮】C#——转义字符
  19. 广告传媒----数字营销解决方案
  20. 错误 不存在从 “std::string“ 到 “LPCSTR“ 的适当转换函数

热门文章

  1. CocosCreator休闲游戏发布到字节跳动平台
  2. 油猴安装错误问题(下载中断问题)及脚本安装
  3. 英特尔® 处理器显卡
  4. 局域网服务器传输大文件方案,局域网快速传输大文件【操作方案】
  5. [论文写作笔记] C11论文查重原理及降重
  6. Java web 部分参考手册(CHM)资源
  7. 达内android 代码,【达内唯一总部】Android实现获取系统应用列表-达内Android分享...
  8. 深入解析Windows操作系统(一)概念和工具
  9. WebGrid CRM 功能模块描述
  10. # Unity 自学与进阶必会目录