我正在寻求帮助,了解如何开发完整且功能强大的NTRIP客户端以接收RTCM更正。 我现在在Windows 7上使用Python 3.4。在网上搜索,我找到了一些示例代码,并用它来编写基本客户端。问题是......它不起作用。
我可以访问rtk更正服务。该服务处于活动状态并正常运行。
这是我的代码片段。
dummyNMEA = "$GPGGA,143741.356,7839.493,S,07627.626,W,0,00,,,M,,M,,*45"
username = my_username #username for RTCM correction service
password = my_password #password for RTCM correction service
port = 2101 #port for the service
'''Generate an encoding of the username:password for the service.
The string must be first encoded in ascii to be correctly parsed by the
base64.b64encode function.'''
pwd = base64.b64encode("{}:{}".format(username, password).encode('ascii'))
#The following decoding is necessary in order to remove the b' character that
#the ascii encoding add. Othrewise said character will be sent to the net and misinterpreted.
pwd = pwd.decode('ascii')
print("Header sending... \n")
header =\
"GET /mountpoint HTTP/1.1\r\n" +\
"Host my_host\r\n" +\
"Ntrip-Version: Ntrip/1.0\r\n" +\
"User-Agent: ntrip.py/0.1\r\n" +\
"Accept: */*" +\
"Connection: close\r\n" +\
"Authorization: Basic {}\r\n\r\n".format(pwd)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((my_host,int(port)))
s.send(header.encode('ascii'))
print("Waiting answer...\n")
data = s.recv(2048).decode('ascii')
print(data)
s.send(dummyNMEA.encode('ascii'))
data = s.recv(2048).decode('ascii')
print(data)
s.close()
现在,代码部分功能化。请求转到rtk服务器,我正确的身份验证。我收到了来自ntrip协议的正确答案:
ICY 200 OK 服务器:“mountpoint的服务器” 日期:“日期”
在此之后,我必须发送NMEA GGA句子,以便开始接收RTCM更正。我用生成器创建了各种虚拟NMEA句子并测试发送它们。我发送句子......没有任何反应。我没有收到服务器的答复。
有人有点想法吗?也许我在编码句子时做错了什么?
我读到也许我应该连续发送NMEA句子,但我是Python编程的新手,我不知道如何使用套接字。
英语不是我的母语,所以请原谅我的错误:)
向大家致意。
答案 0 :(得分:1)
当您发送GGA时,它是否覆盖了您的rtk校正服务?我以前做过这个,发送过网络覆盖范围之外的虚拟位置,没有返回任何内容,甚至没有错误消息,只是没有更正。
干杯, 史蒂夫。
答案 1 :(得分:0)
您需要在NMEA字符串的末尾添加'\r\n'
。
dummyNMEA = "$GPGGA,143741.356,7839.493,S,07627.626,W,0,00,,,M,,M,,*45\r\n"
答案 2 :(得分:0)
您还必须为NMEA创建一个标题。
dummyHeader = \
"Ntrip-GGA: {}\r\n".format(dummyNMEA)
那你应该得到答案。