/*** GpsConnectorLib.cs GPSを動かすライブラリ for C#2.0(VisualStudio2005) Date: 2006/10/17 Author: Sho Hashimoto WebSite: http://shokai.org ***/ using System; using System.Collections.Generic; using System.Text; using System.IO.Ports; namespace Org.Shokai.Util { class GpsData{ /// /// 経度 /// public double lat = 0; // 緯度 /// /// 緯度 /// public double lon = 0; // 経度 public Boolean E, W, N, S; public GpsData() { E = true; // 東経 W = false; N = true; // 北半球 S = false; } } class GpsConnector { public GpsData gpsData = new GpsData(); public GpsConnector() { serialPort = new SerialPort(); PortName = "COM1"; BaudRate = 4800; serialPort.DataReceived += serialPort_DataReceived; } #region Property and Accessor private SerialPort serialPort; public String PortName { set { this.serialPort.PortName = value; } get { return this.serialPort.PortName; } } public int BaudRate { set { this.serialPort.BaudRate = value; } get { return this.serialPort.BaudRate; } } public Boolean IsOpen { get { return this.serialPort.IsOpen; } } #endregion #region Method public Boolean connect() { if (IsOpen) return false; // 既に開いている try { serialPort.Open(); } catch { } return serialPort.IsOpen; } public Boolean close() { if (!IsOpen) return false; // 既に閉じている try { serialPort.Close(); } catch { } return serialPort.IsOpen; } #endregion #region Event private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { String recvData = serialPort.ReadLine(); // parse String[] data = recvData.Split(','); switch (data[0]) { case "$GPGGA": gpsData.lat = Double.Parse(data[2])/100; if (data[3] == "W") { gpsData.lat *= -1; // 西経 } gpsData.lon = Double.Parse(data[4])/100; if (data[5] == "S") { gpsData.lon *= -1; // 南緯 } break; case "$GPRMC": break; case "$GPGSA": break; } //Console.WriteLine(recvData); } #endregion } }