GPS应用程序:如何获取修正值

原创 2010年12月29日 19:16:00

GPRMC语句包含一个值,表示是否已获得修正值。一个可能的解决方法是当获取至少三颗卫星的信号
修正值足以参与计算你的位置。如果至少有四颗卫星都参与,
那么可以同时取得海拔高度。$ GPRMC句子第三个单词是一
两个字母之一:A 表示 active,表示获取修正值,V 代表 invalid 表示没有修正值。
在没有解决存在。清单1-6包含的代码来检查这个字符
性格和报告解决的地位。


'** Listing 1-6. Extracting satellite fix status
http://www.beikei.net
'*******************************************************
Public Class NmeaInterpreter
 ' Raised when the current location has changed
 Public Event PositionReceived(ByVal latitude As String, ByVal longitude As String)
 Public Event DateTimeChanged(ByVal dateTime As DateTime)
 Public Event BearingReceived(ByVal bearing As Double)
 Public Event SpeedReceived(ByVal speed As Double)
 Public Event SpeedLimitReached()
 Public Event FixObtained()
 Public Event FixLost()
 ' Processes information from the GPS receiver
 Public Function Parse(ByVal sentence As String) As Boolean
 ' Discard the sentence if its checksum does not match our calculated checksum
 If Not IsValid(sentence) Then Return False
 ' Look at the first word to decide where to go next
 Select Case GetWords(sentence)(0)
Case "$GPRMC"' A "Recommended Minimum" sentence was found!
Return ParseGPRMC(sentence)
Case Else
' Indicate that the sentence was not recognized
Return False
 End Select
 End Function
 ' Divides a sentence into individual words
 Public Function GetWords(ByVal sentence As String) As String()
 Return sentence.Split(","c)
 End Function
 ' Interprets a $GPRMC message
 Public Function ParseGPRMC(ByVal sentence As String) As Boolean
 ' Divide the sentence into words
 Dim Words() As String = GetWords(sentence)
 ' Do we have enough values to describe our location?
 If Words(3) <> "" And Words(4) <> "" And Words(5) <> "" And Words(6) <> "" Then
' Yes. Extract latitude and longitude
Dim Latitude As String = Words(3).Substring(0, 2) & "�"' Append hours
Latitude = Latitude & Words(3).Substring(2) & """" ' Append minutes
Latitude = Latitude & Words(4)' Append the hemisphere
Dim Longitude As String = Words(5).Substring(0, 3) & "�"' Append hours
Longitude = Longitude & Words(5).Substring(3) & """" ' Append minutes
Longitude = Longitude & Words(6)' Append the hemisphere
' Notify the calling application of the change
RaiseEvent PositionReceived(Latitude, Longitude)
 End If
 ' Do we have enough values to parse satellite-derived time?
 If Words(1) <> "" Then
' Yes. Extract hours, minutes, seconds and milliseconds
Dim UtcHours As Integer = CType(Words(1).Substring(0, 2), Integer)
Dim UtcMinutes As Integer = CType(Words(1).Substring(2, 2), Integer)
Dim UtcSeconds As Integer = CType(Words(1).Substring(4, 2), Integer)
Dim UtcMilliseconds As Integer
' Extract milliseconds if it is available
If Words(1).Length > 7 Then UtcMilliseconds = CType(Words(1).Substring(7), Integer)
' Now build a DateTime object with all values
Dim Today As DateTime = System.DateTime.Now.ToUniversalTime
Dim SatelliteTime As New System.DateTime(Today.Year, Today.Month, _
Today.Day, UtcHours, UtcMinutes, UtcSeconds, UtcMilliseconds)
' Notify of the new time, adjusted to the local time zone
RaiseEvent DateTimeChanged(SatelliteTime.ToLocalTime)
 End If
 ' Do we have enough information to extract the current speed?
 If Words(7) <> "" Then
' Yes. Convert it into MPH
Dim Speed As Double = CType(Words(7), Double) * 1.150779
' If we're over 55MPH then trigger a speed alarm!
If Speed > 55 Then RaiseEvent SpeedLimitReached()
' Notify of the new speed
RaiseEvent SpeedReceived(Speed)
 End If
 ' Do we have enough information to extract bearing?
 If Words(8) <> "" Then
' Indicate that the sentence was recognized
Dim Bearing As Double = CType(Words(8), Double)
RaiseEvent BearingReceived(Bearing)
 End If
 ' Does the device currently have a satellite fix?
 If Words(2) <> "" Then
Select Case Words(2)
Case "A"
 RaiseEvent FixObtained()
Case "V"
 RaiseEvent FixLost()
End Select
 End If
 ' Indicate that the sentence was recognized
 Return True
 End Function
 ' Returns True if a sentence's checksum matches the calculated checksum
 Public Function IsValid(ByVal sentence As String) As Boolean
 ' Compare the characters after the asterisk to the calculation
 Return sentence.Substring(sentence.IndexOf("*") + 1) = GetChecksum(sentence)
 End Function
 ' Calculates the checksum for a sentence
 Public Function GetChecksum(ByVal sentence As String) As String
 ' Loop through all chars to get a checksum
 Dim Character As Char
 Dim Checksum As Integer
 For Each Character In sentence
Select Case Character
Case "$"c
 ' Ignore the dollar sign
Case "*"c
 ' Stop processing before the asterisk
 Exit For
Case Else
 ' Is this the first value for the checksum?
 If Checksum = 0 Then
 ' Yes. Set the checksum to the value
 Checksum = Convert.ToByte(Character)
 Else
 ' No. XOR the checksum with this character's value
 Checksum = Checksum Xor Convert.ToByte(Character)
 End If
End Select
 Next
 ' Return the checksum formatted as a two-character hexadecimal
 Return Checksum.ToString("X2")
 End Function
End Class

第三方应用改变Setting GPS定位的方法。

在Settings.java的onCreate方法中增加sendBroadcast intent环节,具体的intent,由你或者项目要求决定, 在GpsLocationProvider.java中...
  • xiaolubk
  • xiaolubk
  • 2015年11月12日 15:10
  • 760

Android中如何获取GPS数据

作者:高天辰          GPS是Android系统中重要的组成部分,通过它可以衍生出众多的与位置相关的应用。 Android的GPS有一个专门的管理类,称为LocationManager,...
  • pku_android
  • pku_android
  • 2012年04月06日 08:38
  • 12585

Android GPS获取当前经纬度坐标

android定位案例详解
  • wuchuang127
  • wuchuang127
  • 2014年10月11日 16:56
  • 5664

Android APP - GPS定位并获取地理位置

通过LocationManagerService可以获取gps/network位置,
  • taiwan1934
  • taiwan1934
  • 2014年08月26日 10:46
  • 4490

【Unity】中如何通过GPS获取设备经纬度(测试脚本)

在游戏开发中需要使用gps获取经纬度坐标定位玩家的当前位置,那么在开发过程中这个功能容不容易实现呢?下面就给大家介绍下Unity中获取设备经纬度的方法,一起来看看吧。      Unity使用GP...
  • swj524152416
  • swj524152416
  • 2017年02月22日 17:24
  • 1174

GPS定位 在道路工程及交通管理中的应用

首先说说GPS在道路工程中的应用:  在道路工程中,GPS目前主要用于建立各种道路工程控制网及测定航测外控点等。高等级公路的迅速发展对勘测技术提出了更高的要求,由于线路长、已知点少,因此,用常规测量手...
  • wangyh76
  • wangyh76
  • 2005年07月30日 21:32
  • 1666

如何获取GPS状态

简单,一个广播搞定 IntentFilter mIntentFilter = new IntentFilter(); mIntentFilter.addAction(Loca...
  • hlllmr1314
  • hlllmr1314
  • 2017年05月15日 11:25
  • 309

在iOS开发中自动获取当前的位置(GPS定位)

在iOS开发中自动获取当前的位置(GPS定位) 开发环境 xcode5.0 首先我们要引入这个框架CoreLocation.framework 将这个库引进来#import 还有他的代理方法...
  • jingjingxujiayou
  • jingjingxujiayou
  • 2014年04月06日 20:23
  • 6343

ios如何获取gps坐标(定位第二节)

在上一篇文章,解决ios 10不能定位的问题,把navigator.geolocation.getCurrentPosition 改成使用第三方api进行定位 http://blog.csdn.net...
  • michael_ouyang
  • michael_ouyang
  • 2017年01月12日 15:22
  • 1111

Android 获取GPS速度

Android 获取GPS速度
  • zhoumushui
  • zhoumushui
  • 2017年01月30日 10:19
  • 1364
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GPS应用程序:如何获取修正值
举报原因:
原因补充:

(最多只允许输入30个字)