python gps库_python 模拟 GPS, $GPRMC & $GPRMC

数据详解:$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh

<1> UTC 时间,hhmmss(时分秒)格式

<2> 定位状态,A=有效定位,V=无效定位

<3> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)

<4> 纬度半球N(北半球)或S(南半球)

<5> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)

<6> 经度半球E(东经)或W(西经)

<7> 地面速率(000.0~999.9节,前面的0也将被传输)

<8> 地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)

<9> UTC 日期,ddmmyy(日月年)格式

<10> 磁偏角(000.0~180.0度,前面的0也将被传输)

<11> 磁偏角方向,E(东)或W(西)

<12> 模式指示(仅NMEA01833.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)

"$GPRMC," + "060949.000" +",A,3150.7815,N,11711.9239,E,2.87,314.13," + "050314" + ",,,D*69"

"""

$GNRMC,092846.400,A,3029.7317,N,10404.1784,E,000.0,183.8,070417,,,A*73

$GNRMC,

092846.400, // UTC时间,hhmmss.sss(时分秒.毫秒)格式

A, // 定位状态,A=有效定位,V=无效定位

3029.7317,N, // 纬度

10404.1784,E, // 经度

000.0, // 地面速率

183.8, // 地面航向

070417, // UTC日期

, // 磁俯角

, // 磁方向角

A*73 // 模式指示

"""

#coding:utf-8

#!/usr/bin/python3

import sys,os

import re

import logging

import datetime

#add path for import module

filePath = os.getcwd()

sys.path.append(filePath)

from Com_Utilities.FlexConfig import ResourcesConfig as flexConfig

from Com_Utilities.Uart import CSerial as Uart

from Com_Utilities.ResourceHandler import resourceHandler as Resource

__all__ = ["GPS_Fake"]

"""

GPS data packet format:

数据详解:$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh

<1> UTC 时间,hhmmss(时分秒)格式

<2> 定位状态,A=有效定位,V=无效定位

<3> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)

<4> 纬度半球N(北半球)或S(南半球)

<5> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)

<6> 经度半球E(东经)或W(西经)

<7> 地面速率(000.0~999.9节,前面的0也将被传输)

<8> 地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)

<9> UTC 日期,ddmmyy(日月年)格式

<10> 磁偏角(000.0~180.0度,前面的0也将被传输)

<11> 磁偏角方向,E(东)或W(西)

<12> 模式指示(仅NMEA01833.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)

"$GPRMC," + "060949.000" +",A,3150.7815,N,11711.9239,E,2.87,314.13," + "050314" + ",,,D*69"

time format: 080650.000 & 08:06:50.000

date format: 311219 & 2019/12/31

"""

"""

$GNRMC,092846.400,A,3029.7317,N,10404.1784,E,000.0,183.8,070417,,,A*73

$GNRMC,

092846.400, // UTC时间,hhmmss.sss(时分秒.毫秒)格式

A, // 定位状态,A=有效定位,V=无效定位

3029.7317,N, // 纬度

10404.1784,E, // 经度

000.0, // 地面速率

183.8, // 地面航向

070417, // UTC日期

, // 磁俯角

, // 磁方向角

A*73 // 模式指示

"""

class GPS_Fake(Uart):

def __init__(self, userName, userID):

self.resource = Resource();

# serial port message: [0]-port, [1]-baud

serialportMsg = self.resource.get_Serial_Or_IP(userName,userID)

Uart.__init__(self, serialportMsg[0], int(serialportMsg[1]), 10)

self.Serial_Create()

def __GPS_CheckSum__(self, string ):

checksum = 0

val = bytes(string)

for index in range(len(val)):

checksum ^= val[index]

return checksum

#time format: 080650.000 & 08:06:50.000

def GPS_CurrentFormatTime(self):

now_time = datetime.datetime.now()

strTime = now_time.strftime("%H%M%S.%f")

str = strTime.split('.')

micSecond = str[1][0:3]

nowTime = str[0] + "." + micSecond

return nowTime

#time format: 260419 & 2019/04/26

def GPS_CurrentFormatDate(self):

now_time = datetime.datetime.now()

covYear = now_time.year-2000

nowDate = "%02d%02d%02d" %(now_time.day,now_time.month,covYear)

return nowDate

def GPRMC_SendMessage(self, time, date):

gpsMessage = "GPRMC," + time + ",A,3150.7815,N,12123.5344,E,2.87,314.13," + date + ",,,D"

checkSum = self.__GPS_CheckSum__(gpsMessage)

Message = "$" + gpsMessage + "*" + str(checkSum, encoding = "utf8")+ "\r\n"

self.Serial_WriteString(Message)

def GPRMC_SendMessage(self, time, date, latitude, longitude):

gpsMessage = "GPRMC," + time + ",A," + latitude +",N,"+ longitude + ",E,2.87,314.13," + date + ",,,D"

checkSum = self.__GPS_CheckSum__(gpsMessage)

Message = "$" + gpsMessage + "*" + str(checkSum, encoding = "utf8")+ "\r\n"

self.Serial_WriteString(Message)

def GNRMC_SendMessage(self, time, date):

gpsMessage = "GNRMC," + time + ",A,3150.7815,N,12123.5344,E,2.87,314.13," + date + ",,,A"

checkSum = self.__GPS_CheckSum__(gpsMessage)

Message = "$" + gpsMessage + "*" + str(checkSum, encoding = "utf8")+ "\r\n"

self.Serial_WriteString(Message)

def GNRMC_SendMessage(self, time, date, latitude, longitude):

gpsMessage = "GNRMC," + time + ",A," + latitude +",N,"+ longitude + ",E,2.87,314.13," + date + ",,,A"

checkSum = self.__GPS_CheckSum__(gpsMessage)

Message = "$" + gpsMessage + "*" + str(checkSum, encoding = "utf8")+ "\r\n"

self.Serial_WriteString(Message)

def GPS_Stop(self):

self.Serial_Close()

#test example

if __name__ == '__main__':

gps_test = GPS_Fake()

gps_test.Serial_Create()