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.
Files changed (48) hide show
  1. {cssrlib-1.2.0/src/cssrlib.egg-info → cssrlib-1.2.1}/PKG-INFO +1 -2
  2. {cssrlib-1.2.0 → cssrlib-1.2.1}/pyproject.toml +1 -2
  3. {cssrlib-1.2.0 → cssrlib-1.2.1}/setup.cfg +1 -1
  4. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/cssr_has.py +6 -1
  5. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/cssr_mdc.py +64 -9
  6. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/cssrlib.py +3 -2
  7. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/ewss.py +241 -66
  8. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/gnss.py +1 -1
  9. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/osnma.py +30 -15
  10. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/pppssr.py +1 -0
  11. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/rawnav.py +11 -0
  12. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/rinex.py +526 -493
  13. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/rtcm.py +88 -49
  14. cssrlib-1.2.1/src/cssrlib/test/test_eph.py +75 -0
  15. cssrlib-1.2.1/src/cssrlib/test/test_rnx.py +81 -0
  16. {cssrlib-1.2.0 → cssrlib-1.2.1/src/cssrlib.egg-info}/PKG-INFO +1 -2
  17. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib.egg-info/requires.txt +0 -1
  18. cssrlib-1.2.0/src/cssrlib/test/test_eph.py +0 -50
  19. cssrlib-1.2.0/src/cssrlib/test/test_rnx.py +0 -59
  20. {cssrlib-1.2.0 → cssrlib-1.2.1}/LICENSE +0 -0
  21. {cssrlib-1.2.0 → cssrlib-1.2.1}/MANIFEST.in +0 -0
  22. {cssrlib-1.2.0 → cssrlib-1.2.1}/README.md +0 -0
  23. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/__init__.py +0 -0
  24. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/cssr_bds.py +0 -0
  25. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/cssr_pvs.py +0 -0
  26. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/data/30340780.21q +0 -0
  27. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/data/3034078M1.21O +0 -0
  28. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/data/SEPT078M.21P +0 -0
  29. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/data/SEPT078M1.21O +0 -0
  30. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/dgps.py +0 -0
  31. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/ephemeris.py +0 -0
  32. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/mlambda.py +0 -0
  33. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/peph.py +0 -0
  34. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/plot.py +0 -0
  35. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/pntpos.py +0 -0
  36. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/ppp.py +0 -0
  37. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/ppprtk.py +0 -0
  38. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/qznma.py +0 -0
  39. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/rtk.py +0 -0
  40. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/sbas.py +0 -0
  41. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/test/test_gnss.py +0 -0
  42. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/test/test_peph.py +0 -0
  43. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/test/test_rtk.py +0 -0
  44. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib/tlesim.py +0 -0
  45. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib.egg-info/SOURCES.txt +0 -0
  46. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib.egg-info/dependency_links.txt +0 -0
  47. {cssrlib-1.2.0 → cssrlib-1.2.1}/src/cssrlib.egg-info/not-zip-safe +0 -0
  48. {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.0
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.0"
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
  ]
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = cssrlib
3
- version = 1.2.0
3
+ version = 1.2.1
4
4
  author = Rui Hirokawa
5
5
  author_email = rui.hirokawa@gmail.com
6
6
  description = Python Toolkit for PPP/PPP-RTK positioning
@@ -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.key():
67
- for area in self.pnt[reg].key():
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 0.0
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(self.nsat_n)
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(self.sat_n):
113
- stec[i] = [1, dlat, dlon, dlat*dlon, dlat**2, dlon**2]@p.ci[sat]
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 > 2:
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 > 2:
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*5)
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*5)
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 """