📄 用c#读取gps数据.htm
字号:
byte[NumBytes];<BR> if
(hComm!=INVALID_HANDLE_VALUE)
<BR> {<BR> OVERLAPPED
ovlCommPort = new OVERLAPPED();<BR> int
BytesRead=0;<BR> ReadFile(hComm,BufBytes,NumBytes,ref
BytesRead,ref
ovlCommPort);<BR> try<BR> {<BR> OutBytes
= new
byte[BytesRead];<BR> Array.Copy(BufBytes,0,OutBytes,0,BytesRead);<BR> }<BR> catch<BR> {<BR> return
BufBytes;<BR> }<BR> <BR> }
<BR> else
<BR> {<BR> throw(new
ApplicationException("串口未打开!"));<BR> }<BR> return
OutBytes;<BR> // return
BufBytes;<BR> }<BR> <BR> public
void Write(byte[] WriteBytes)
<BR> {<BR> if
(hComm!=INVALID_HANDLE_VALUE)
<BR> {<BR> OVERLAPPED
ovlCommPort = new OVERLAPPED();<BR> int
BytesWritten =
0;<BR> WriteFile(hComm,WriteBytes,WriteBytes.Length,ref
BytesWritten,ref
ovlCommPort);<BR> }<BR> else
<BR> {<BR> throw(new
ApplicationException("串口未打开!"));<BR> } <BR> }</P>
<P> public string GetGPS(string strGPS,string
strFind)<BR> {<BR> ///从GPS中读取的数据中,找出想要的数据<BR> ///GPSstring原始字符串,<BR> ///strFind要查找的内容,X:经度,Y:纬度,T:时间,V:速度,是数字从1开始,即以“,”分隔的位置<BR> ///返回查找到指定位置的字符串<BR> string
handerStr="$GPRMC";//GPS串头<BR> int
findHander=strGPS.IndexOf(handerStr);//看是否含有GPS串头<BR> if
(findHander<0)<BR> {<BR> return
"-1";<BR> }<BR> else<BR> {<BR> strGPS=strGPS.Substring(findHander,strGPS.Length-findHander);<BR> string[]
ArryTmp=strGPS.Split(",".ToCharArray());<BR> try<BR> {<BR> if(ArryTmp[2]=="V")<BR> {<BR> return
"V";//没有信号<BR> }<BR> else<BR> {<BR> switch(strFind)<BR> {<BR> case
"X":<BR> return
DM2DD(ArryTmp[5]);<BR> <BR> case
"Y":<BR> return
DM2DD(ArryTmp[3]);<BR> <BR> case
"T":<BR> return
T2Time(ArryTmp[9],ArryTmp[1]);<BR> <BR> case
"V":<BR> return
Convert.ToString(Convert.ToDouble(ArryTmp[7])*
1.852);<BR> <BR> default:<BR> return
"V";<BR> <BR> }<BR> }<BR> }<BR> catch<BR> {<BR> return
"V";<BR> }<BR> }<BR> }</P>
<P> public string T2Time(string strDate,string
strTime)<BR> {<BR> string
dT="20"+strDate.Substring(4,2)+"-"+strDate.Substring(2,2)+"-"+strDate.Substring(0,2);<BR> string
TT=Convert.ToString(Convert.ToInt32(strTime.Substring(0,2)))+":"+strTime.Substring(2,2)+":"+strTime.Substring(4,2);<BR> DateTime
T=Convert.ToDateTime(dT+"
"+TT);<BR> T=T.AddHours(8);<BR> return
T.ToString();<BR> }</P>
<P> public string DM2DD(string
DegreeMinutes)<BR> {<BR> //转换NMEA协议的“度分”格式为十进制“度度”格式<BR> string
sDegree;<BR> string
sMinute;<BR> string
sReturn="";<BR> if(DegreeMinutes.IndexOf(".")==4)<BR> {<BR> //DegreeMinutes
= Replace(DegreeMinutes, ".", "")<BR> //DM2DD
= CDbl(Left(DegreeMinutes, 2)) +
CDbl(Left(CStr(CDbl(Right(DegreeMinutes, Len(DegreeMinutes) - 2)) /
60), 8)) /
10000<BR> DegreeMinutes=DegreeMinutes.Replace(".","");<BR> double
sDegree1=Convert.ToDouble(DegreeMinutes.Substring(0,2));<BR> double
sDegree2=Convert.ToDouble(DegreeMinutes.Substring(2,DegreeMinutes.Length-2));<BR> string
sTmp=Convert.ToString(sDegree2/60);<BR> sDegree2=Convert.ToDouble(sTmp.Substring(0,sTmp.Length));<BR> sDegree2=sDegree2/10000;<BR> sDegree=Convert.ToString(sDegree1+sDegree2);<BR> if(sDegree.Length>11)<BR> sDegree=sDegree.Substring(0,11);<BR> sReturn=sDegree;<BR> }<BR> else
if(DegreeMinutes.IndexOf(".")==5)<BR> {<BR> //DegreeMinutes
= Replace(DegreeMinutes, ".", "")<BR> //DM2DD
= CDbl(Left(DegreeMinutes, 2)) +
CDbl(Left(CStr(CDbl(Right(DegreeMinutes, Len(DegreeMinutes) - 2)) /
60), 8)) /
10000<BR> DegreeMinutes=DegreeMinutes.Replace(".","");<BR> double
sMinute1=Convert.ToDouble(DegreeMinutes.Substring(0,3));<BR> double
sMinute2=Convert.ToDouble(DegreeMinutes.Substring(3,DegreeMinutes.Length-2));<BR> string
sTmp=Convert.ToString(sMinute2/60);<BR> sMinute2=Convert.ToDouble(sTmp.Substring(0,sTmp.Length));<BR> sMinute2=sMinute2/10000;<BR> sMinute=Convert.ToString(sMinute1+sMinute2);<BR> if(sMinute.Length>10)<BR> sMinute=sMinute.Substring(0,10);<BR> sReturn=sMinute;<BR> }<BR> return
sReturn;<BR> }</P>
<P> public bool
ScanPort()<BR> {<BR> <BR> try<BR> {<BR> if
(Opened)<BR> {<BR> Close();<BR> Open();<BR> }<BR> else<BR> {<BR> Open();//打开串口<BR> <BR> }<BR> byte[]
bytRead=Read(512);<BR> Close();<BR> if(Encoding.ASCII.GetString(bytRead,0,bytRead.Length).IndexOf("$GP")>=0)<BR> return
true;<BR> else<BR> return
false;<BR> }<BR> catch<BR> {<BR> return
false;<BR> }</P>
<P> }<BR> }</P>
<P> class HexCon <BR> {<BR> //
把十六进制字符串转换成字节型和把字节型转换成十六进制字符串 converter hex string to byte and byte
to hex string<BR> public static string
ByteToString(byte[] InBytes)
<BR> {<BR> string
StringOut="";<BR> foreach (byte InByte in InBytes)
<BR> {<BR> StringOut=StringOut
+ String.Format("{0:X2}
",InByte);<BR> }<BR> return
StringOut; <BR> }<BR> public static byte[]
StringToByte(string InString)
<BR> {<BR> string[]
ByteStrings;<BR> ByteStrings = InString.Split("
".ToCharArray());<BR> byte[]
ByteOut;<BR> ByteOut = new
byte[ByteStrings.Length-1];<BR> for (int i =
0;i==ByteStrings.Length-1;i++)
<BR> {<BR> ByteOut[i] =
Convert.ToByte(("0x" + ByteStrings[i]));<BR> }
<BR> return
ByteOut;<BR> }<BR> }<BR>}</P>
<P>在别的class中调用时如Frmlogoin(是通过一个时间控件来循环的)</P>
<P>public class Frmlogin : System.Windows.Forms.Form<BR> {</P>
<P>private GPS ss_port=new GPS();</P>
<P>}</P>
<P>#region 读取GPS<BR> private void opengps(string
ComPoint)<BR> {<BR> ss_port.PortNum =
ComPoint;<BR> ss_port.BaudRate =
4800;<BR> ss_port.ByteSize =
8;<BR> ss_port.Parity =
0;<BR> ss_port.StopBits =
1;<BR> ss_port.ReadTimeout = 1000;</P>
<P> try<BR> {<BR> if
(ss_port.Opened)<BR> {<BR> ss_port.Close();<BR> ss_port.Open();<BR> timer1.Enabled=true;<BR> }<BR> else<BR> {<BR> ss_port.Open();//打开串口<BR> timer1.Enabled=true;<BR> }<BR> <BR> }<BR> catch<BR> <BR> {<BR>// MessageBox.Show("读取GPS错误!"
,"系统提示");<BR> <BR> }<BR> }<BR> private
void timer1_Tick(object sender, System.EventArgs
e)<BR> {<BR> <BR> if
(ss_port.Opened)<BR> gpsread();<BR> else<BR> ss_port.Open();//打开串口<BR> }<BR> <BR> private
void gpsread()<BR> {<BR> byte[]
aa=ss_port.Read(512);<BR> string gpsinfo
=System.Text.Encoding.ASCII.GetString(aa,0,aa.Length);<BR> GetParam.GpsLongitude=ss_port.GetGPS(gpsinfo,"X");<BR> GetParam.GpsLatitude=ss_port.GetGPS(gpsinfo,"Y");<BR> GetParam.GpsSpeed=ss_port.GetGPS(gpsinfo,"V");<BR> GetParam.GpsTime=ss_port.GetGPS(gpsinfo,"T");<BR> if(GetParam.GpsLongitude=="-1")
<BR> GetParam.GpsState="0";<BR> if(GetParam.GpsLongitude=="V"
&&
GetParam.GpsLatitude=="V")<BR> GetParam.GpsState="0";<BR> if(GetParam.GpsLongitude!="-1"
&&
GetParam.GpsLongitude!="V")<BR> GetParam.GpsState="1";</P>
<P> GetParam.GpsLongitude=(GetParam.GpsLongitude=="V")
? "0" :
GetParam.GpsLongitude;<BR> GetParam.GpsLatitude=(GetParam.GpsLatitude=="V")
? "0" :
GetParam.GpsLatitude;<BR> GetParam.GpsSpeed=(GetParam.GpsSpeed=="V")
? "0" :
GetParam.GpsSpeed;<BR> GetParam.GpsTime=(GetParam.GpsTime=="V")
? "0"
:GetParam.GpsTime;<BR> <BR> }<BR> private
void
GpsClose()<BR> {<BR> timer1.Enabled=false;<BR> if
(ss_port.Opened)<BR> ss_port.Close();<BR> }<BR> #endregion</P></SPAN><BR>
<DIV
style="FONT-SIZE: 14px; LINE-HEIGHT: 25px"><STRONG>作者Blog:</STRONG><A
id=ArticleContent1_ArticleContent1_AuthorBlogLink
href="http://blog.csdn.net/xinhongmei/"
target=_blank>http://blog.csdn.net/xinhongmei/</A></DIV>
<DIV
style="FONT-SIZE: 14px; COLOR: #900; LINE-HEIGHT: 25px"><STRONG>相关文章</STRONG></DIV>
<TABLE id=ArticleContent1_ArticleContent1_RelatedArticles
cellSpacing=0 border=0>
<TBODY>
<TR>
<TD><A
href="http://dev.csdn.net/article/77/77262.shtm">在pda上怎样打开网页或者调用其他可程序(主要是指可执行文件)的公共类</A>
</TD></TR>
<TR>
<TD><A
href="http://dev.csdn.net/article/77/77261.shtm">用C#读取GPS数据的基类,适用于wince操作系统</A>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><A name=#Comment></A>
<TABLE cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center
bgColor=#006699 border=0>
<TBODY>
<TR bgColor=#006699>
<TD id=white align=middle width=556 bgColor=#006699><FONT
color=#ffffff>对该文的评论</FONT> </TD></TR></TBODY></TABLE>
<DIV align=right><A id=CommnetList1_CommnetList1_Morelink
href="http://comment.csdn.net/Comment.aspx?c=2&s=77261">【评论】</A>
<A id=CommnetList1_CommnetList1_Hyperlink1
href="javascript:window.close();">【关闭】</A> <A
href="mailto:webmaster@csdn.net">【报告bug】</A>
</DIV><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></FORM><!-- 版权 -->
<DIV align=center>
<SCRIPT language=JavaScript src="用C#读取GPS数据_files/footer_gb.js"
type=text/javascript></SCRIPT>
</DIV><!-- /版权 -->
<SCRIPT>
document.write("<img src=http://count.csdn.net/count/pageview1.asp?columnid=4&itemid=11 border=0 width=0 height=0>");
</SCRIPT>
<SCRIPT>document.write("<img src=http://counter.csdn.net/pv.aspx?id=37 border=0 width=0 height=0>");</SCRIPT>
<SCRIPT language=JavaScript src="用C#读取GPS数据_files/common.htm"></SCRIPT>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -