cssrlib 1.2.0__tar.gz → 1.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cssrlib-1.2.0/src/cssrlib.egg-info → cssrlib-1.2.1}/PKG-INFO +1 -2
- {cssrlib-1.2.0 → cssrlib-1.2.1}/pyproject.toml +1 -2
- {cssrlib-1.2.0 → cssrlib-1.2.1}/setup.cfg +1 -1
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/cssr_has.py +6 -1
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/cssr_mdc.py +64 -9
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/cssrlib.py +3 -2
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/ewss.py +241 -66
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/gnss.py +1 -1
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/osnma.py +30 -15
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/pppssr.py +1 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/rawnav.py +11 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/rinex.py +526 -493
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/rtcm.py +88 -49
- cssrlib-1.2.1/src/cssrlib/test/test_eph.py +75 -0
- cssrlib-1.2.1/src/cssrlib/test/test_rnx.py +81 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1/src/cssrlib.egg-info}/PKG-INFO +1 -2
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib.egg-info/requires.txt +0 -1
- cssrlib-1.2.0/src/cssrlib/test/test_eph.py +0 -50
- cssrlib-1.2.0/src/cssrlib/test/test_rnx.py +0 -59
- {cssrlib-1.2.0 → cssrlib-1.2.1}/LICENSE +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/MANIFEST.in +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/README.md +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/__init__.py +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/cssr_bds.py +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/cssr_pvs.py +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/data/30340780.21q +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/data/3034078M1.21O +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/data/SEPT078M.21P +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/data/SEPT078M1.21O +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/dgps.py +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/ephemeris.py +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/mlambda.py +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/peph.py +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/plot.py +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/pntpos.py +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/ppp.py +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/ppprtk.py +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/qznma.py +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/rtk.py +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/sbas.py +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/test/test_gnss.py +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/test/test_peph.py +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/test/test_rtk.py +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/tlesim.py +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib.egg-info/SOURCES.txt +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib.egg-info/dependency_links.txt +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib.egg-info/not-zip-safe +0 -0
- {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cssrlib
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.1
|
|
4
4
|
Summary: Python Toolkit for PPP/PPP-RTK positioning
|
|
5
5
|
Home-page: https://github.com/hirokawa/cssrlib
|
|
6
6
|
Author: Rui Hirokawa
|
|
@@ -16,7 +16,6 @@ Requires-Dist: notebook
|
|
|
16
16
|
Requires-Dist: numpy
|
|
17
17
|
Requires-Dist: matplotlib
|
|
18
18
|
Requires-Dist: cartopy
|
|
19
|
-
Requires-Dist: pysolid
|
|
20
19
|
Dynamic: license-file
|
|
21
20
|
|
|
22
21
|
CSSRlib - Toolkit for PPP-RTK/RTK in Python using Compact SSR
|
|
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
|
|
|
7
7
|
|
|
8
8
|
[project]
|
|
9
9
|
name = "cssrlib"
|
|
10
|
-
version = "1.2.
|
|
10
|
+
version = "1.2.1"
|
|
11
11
|
description = "Python Toolkit for PPP/PPP-RTK positioning"
|
|
12
12
|
authors = [
|
|
13
13
|
{name="Rui Hirokawa", email="rui.hirokawa@gmail.com"},
|
|
@@ -23,5 +23,4 @@ dependencies = [
|
|
|
23
23
|
"numpy",
|
|
24
24
|
"matplotlib",
|
|
25
25
|
"cartopy",
|
|
26
|
-
"pysolid",
|
|
27
26
|
]
|
|
@@ -183,8 +183,13 @@ class cnav_msg():
|
|
|
183
183
|
continue
|
|
184
184
|
hass, res = bs.unpack_from('u2u2', buff, i)
|
|
185
185
|
i += 4
|
|
186
|
+
# HAS status
|
|
186
187
|
if hass >= 2: # 0:test,1:operational,2:res,3:dnu
|
|
187
188
|
continue
|
|
189
|
+
# mt: type of message
|
|
190
|
+
# mid: id of the message
|
|
191
|
+
# ms: size of non-encoded message in number of pages 0:1,...
|
|
192
|
+
# pid: id of the transmitted HAS encoded page
|
|
188
193
|
mt, mid, ms, pid = bs.unpack_from('u2u5u5u8', buff, i)
|
|
189
194
|
|
|
190
195
|
self.msgtype = mt
|
|
@@ -202,7 +207,7 @@ class cnav_msg():
|
|
|
202
207
|
if self.monlevel >= 2:
|
|
203
208
|
print(f"{mt} {mid} {ms} {pid}")
|
|
204
209
|
|
|
205
|
-
if len(self.rec) >= self.ms_:
|
|
210
|
+
if self.ms_ > 0 and len(self.rec) >= self.ms_:
|
|
206
211
|
if self.monlevel >= 2:
|
|
207
212
|
print(" data collected mid={:2d} ms={:2d} tow={:.0f}"
|
|
208
213
|
.format(self.mid_, self.ms_, tow))
|
|
@@ -10,7 +10,7 @@ QZSS MADOCA-PPP correction data decoder
|
|
|
10
10
|
import numpy as np
|
|
11
11
|
import bitstruct as bs
|
|
12
12
|
from cssrlib.cssrlib import cssr, sCSSRTYPE, sCSSR, local_corr, sCType
|
|
13
|
-
from cssrlib.gnss import gpst2time, uGNSS, prn2sat, rCST
|
|
13
|
+
from cssrlib.gnss import gpst2time, time2str, uGNSS, prn2sat, rCST, sat2id
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class areaInfo():
|
|
@@ -46,6 +46,8 @@ class cssr_mdc(cssr):
|
|
|
46
46
|
self.ci = {}
|
|
47
47
|
|
|
48
48
|
self.area = -1
|
|
49
|
+
self.reg = -1
|
|
50
|
+
self.alrt = 0
|
|
49
51
|
self.narea_t = {1: 8, 2: 16, 3: 5, 4: 1, 5: 8}
|
|
50
52
|
self.MAXNET = np.sum(list(self.narea_t.values()))
|
|
51
53
|
|
|
@@ -63,8 +65,8 @@ class cssr_mdc(cssr):
|
|
|
63
65
|
latd, lond = np.rad2deg(pos[0:2])
|
|
64
66
|
self.reg = self.area = -1
|
|
65
67
|
|
|
66
|
-
for reg in self.pnt.
|
|
67
|
-
for area in self.pnt[reg].
|
|
68
|
+
for reg in self.pnt.keys():
|
|
69
|
+
for area in self.pnt[reg].keys():
|
|
68
70
|
p = self.pnt[reg][area]
|
|
69
71
|
if p.sid == 0: # rectangle shape:
|
|
70
72
|
if p.latr-p.lats <= latd and latd <= p.latr+p.lats and \
|
|
@@ -102,15 +104,16 @@ class cssr_mdc(cssr):
|
|
|
102
104
|
""" calculate STEC correction by interporation """
|
|
103
105
|
if self.inet < 0:
|
|
104
106
|
print("get_stec: region, area not defined.")
|
|
105
|
-
return
|
|
107
|
+
return np.zeros(self.nsat_n)
|
|
106
108
|
|
|
107
109
|
p = self.lc[self.inet]
|
|
108
110
|
# if p.inet_ref != self.iodssr:
|
|
109
111
|
# return 0.0
|
|
110
|
-
stec = np.zeros(
|
|
112
|
+
stec = np.zeros(p.nsat_n)
|
|
113
|
+
v = np.array([1, dlat, dlon, dlat*dlon, dlat**2, dlon**2])
|
|
111
114
|
|
|
112
|
-
for i, sat in enumerate(
|
|
113
|
-
stec[i] =
|
|
115
|
+
for i, sat in enumerate(p.sat_n):
|
|
116
|
+
stec[i] = v@p.ci[sat]
|
|
114
117
|
|
|
115
118
|
return stec
|
|
116
119
|
|
|
@@ -121,6 +124,9 @@ class cssr_mdc(cssr):
|
|
|
121
124
|
self.tow0 = tow//3600*3600
|
|
122
125
|
reg, alrt, len_, narea = bs.unpack_from('u8u1u16u5', buff, i)
|
|
123
126
|
i += 30
|
|
127
|
+
self.reg = reg
|
|
128
|
+
self.alrt = alrt
|
|
129
|
+
|
|
124
130
|
if reg not in self.pnt:
|
|
125
131
|
self.pnt[reg] = {}
|
|
126
132
|
|
|
@@ -130,14 +136,14 @@ class cssr_mdc(cssr):
|
|
|
130
136
|
|
|
131
137
|
if sid == 0: # rectangle shape
|
|
132
138
|
latr, lonr, lats, lons = bs.unpack_from('s11u12u8u8', buff, i)
|
|
133
|
-
if self.monlevel
|
|
139
|
+
if self.monlevel >= 2:
|
|
134
140
|
print(f"{reg} {area:2d} {sid} {latr*0.1:5.1f} "
|
|
135
141
|
f"{lonr*0.1:5.1f} {lats*0.1:3.1f} {lons*0.1:3.1f}")
|
|
136
142
|
self.pnt[reg][area] = areaInfo(
|
|
137
143
|
sid, latr*0.1, lonr*0.1, lats*0.1, lons*0.1)
|
|
138
144
|
else: # circle range
|
|
139
145
|
latr, lonr, rng = bs.unpack_from('s15u16u8', buff, i)
|
|
140
|
-
if self.monlevel
|
|
146
|
+
if self.monlevel >= 2:
|
|
141
147
|
print(f"{reg} {area:2d} {sid} {latr*0.01:6.2f} "
|
|
142
148
|
f"{lonr*0.01:6.2f} {rng*10}")
|
|
143
149
|
self.pnt[reg][area] = areaInfo(
|
|
@@ -148,6 +154,9 @@ class cssr_mdc(cssr):
|
|
|
148
154
|
def get_inet(self, reg, area):
|
|
149
155
|
""" region, area to inet conversion """
|
|
150
156
|
|
|
157
|
+
if reg < 0 or area < 0:
|
|
158
|
+
return -1
|
|
159
|
+
|
|
151
160
|
inet = 0
|
|
152
161
|
for r in self.narea_t.keys():
|
|
153
162
|
if r >= reg:
|
|
@@ -165,6 +174,9 @@ class cssr_mdc(cssr):
|
|
|
165
174
|
reg, area, stype_ = bs.unpack_from('u8u5u2', buff, i)
|
|
166
175
|
i += 15
|
|
167
176
|
|
|
177
|
+
self.reg = reg
|
|
178
|
+
self.area = area
|
|
179
|
+
|
|
168
180
|
nsat = bs.unpack_from('u5u5u5u5u5', buff, i)
|
|
169
181
|
i += 25
|
|
170
182
|
# gps, glo, gal, bds, qzss
|
|
@@ -221,6 +233,48 @@ class cssr_mdc(cssr):
|
|
|
221
233
|
|
|
222
234
|
return i
|
|
223
235
|
|
|
236
|
+
def out_log(self):
|
|
237
|
+
# if self.msgtype not in (1, 2):
|
|
238
|
+
# return super(cssr_mdc, self).out_log()
|
|
239
|
+
|
|
240
|
+
sz_t = [1, 3, 4, 6]
|
|
241
|
+
|
|
242
|
+
if self.time == -1:
|
|
243
|
+
return
|
|
244
|
+
|
|
245
|
+
self.fh.write("{:4d}\t{:s}\n".format(self.msgtype,
|
|
246
|
+
time2str(self.time)))
|
|
247
|
+
|
|
248
|
+
if self.msgtype == 1:
|
|
249
|
+
|
|
250
|
+
self.fh.write(f"Reg\tArea\tsid\t"
|
|
251
|
+
f"latr\tlonr\tlats\tlons\n")
|
|
252
|
+
|
|
253
|
+
for area in self.pnt[self.reg].keys():
|
|
254
|
+
p = self.pnt[self.reg][area]
|
|
255
|
+
self.fh.write(f"{self.reg}\t{area:2d}\t{p.sid}\t"
|
|
256
|
+
f"{p.latr:3.1f}\t{p.lonr:4.1f}\t")
|
|
257
|
+
|
|
258
|
+
if p.sid == 0:
|
|
259
|
+
self.fh.write(f"{p.lats:3.1f}\t{p.lons:3.1f}\n")
|
|
260
|
+
else:
|
|
261
|
+
self.fh.write(f"{p.rng:3.1f}\n")
|
|
262
|
+
|
|
263
|
+
elif self.msgtype == 2:
|
|
264
|
+
inet = self.get_inet(self.reg, self.area)
|
|
265
|
+
|
|
266
|
+
self.fh.write(f"Reg:{self.reg}\tArea:{self.area:2d}\n")
|
|
267
|
+
self.fh.write("Sat,stype,c00,c01,c10,c11,c20,c02\n")
|
|
268
|
+
|
|
269
|
+
for sat in self.lc[inet].sat_n:
|
|
270
|
+
stype = self.lc[inet].stype[sat]
|
|
271
|
+
ci = self.lc[inet].ci[sat]
|
|
272
|
+
self.fh.write(f"{sat2id(sat)}\t{stype}")
|
|
273
|
+
for k in range(sz_t[stype]):
|
|
274
|
+
self.fh.write(f"\t{ci[k]:6.2f}")
|
|
275
|
+
self.fh.write("\n")
|
|
276
|
+
self.fh.flush()
|
|
277
|
+
|
|
224
278
|
def decode_cssr(self, msg, i=0):
|
|
225
279
|
"""decode Compact SSR message with MADOCA-PPP extension """
|
|
226
280
|
df = {'msgtype': 4073}
|
|
@@ -230,6 +284,7 @@ class cssr_mdc(cssr):
|
|
|
230
284
|
if df['msgtype'] not in [1, 2, 4073]:
|
|
231
285
|
return -1
|
|
232
286
|
|
|
287
|
+
self.msgtype = df['msgtype']
|
|
233
288
|
self.subtype = df['subtype']
|
|
234
289
|
if df['msgtype'] == 4073: # Compact SSR
|
|
235
290
|
if self.subtype == sCSSR.MASK:
|
|
@@ -282,7 +282,7 @@ class cssr:
|
|
|
282
282
|
self.sid = -1
|
|
283
283
|
self.cstat = 0
|
|
284
284
|
self.local_pbias = True # for QZS CLAS
|
|
285
|
-
self.buff = bytearray(250*
|
|
285
|
+
self.buff = bytearray(250*10)
|
|
286
286
|
self.buff_p = None
|
|
287
287
|
self.sinfo = bytearray(160)
|
|
288
288
|
self.grid = None
|
|
@@ -1316,7 +1316,7 @@ class cssr:
|
|
|
1316
1316
|
if l6head['sid'] == 1:
|
|
1317
1317
|
self.fcnt = 0
|
|
1318
1318
|
self.buff_p = copy.copy(self.buff)
|
|
1319
|
-
self.buff = bytearray(250*
|
|
1319
|
+
self.buff = bytearray(250*10)
|
|
1320
1320
|
|
|
1321
1321
|
if l6head['vendor'] == 5: # CLAS
|
|
1322
1322
|
facility = facility_t[l6head['pt']][l6head['facility']]
|
|
@@ -1347,6 +1347,7 @@ class cssre():
|
|
|
1347
1347
|
self.len = 0
|
|
1348
1348
|
self.dlen = 0
|
|
1349
1349
|
self.msgtype = 0
|
|
1350
|
+
self.iodssr = 0
|
|
1350
1351
|
|
|
1351
1352
|
def encode_mask(self, v, bitlen, ofst=1):
|
|
1352
1353
|
""" encode n-bit mask with offset """
|