import time import math def ConvertObsVersion(ofile_path, out_directory, version, system): blank = " " global outf if version == 2.10 or version == 2.11: with open(ofile_path, 'r') as f: with open(out_directory, 'w') as outf: outf.close() # Get the locate time and transform to RINEX format y = time.localtime().tm_year m = time.localtime().tm_mon d = time.localtime().tm_mday h = time.localtime().tm_hour min = time.localtime().tm_min sec = time.localtime().tm_sec localtime = str(y)+str(m)+str(d)+blank+"%02d"%h+"%02d"%min+"%02d"%sec+blank+"LOC"+blank # Output the convert message outf = open(out_directory, 'a') print(" %4.2f->3.04 COV-OBSERVATION DATA %s CONVERT VERSION / TYPE\n" "KNZ_Convert ver 1.0.6 %sCONVERT BY / TIME\n" %(version, system, localtime) , end="", file=outf) #Refactoring header file format to 3.04 while 1: line = f.readline() if line.find("COMMENT") >= 0: print(line,end="",file=outf) elif line.find("RINEX VERSION / TYPE") >= 0: line = "%9s"%("3.04") + line[ 9:80] + "\r" print(line,end="",file=outf) elif line.find("PGM / RUN BY / DATE") >= 0: hour = line[49:51] min = line[52:54] sec = line[55:57] line = line[ 0:49] + hour + min + sec + blank + "UTC" + blank + "PGM / RUN BY / DATE\n" print(line,end="",file=outf) elif line.find("WAVELENGTH FACT L1/2") >= 0: pass elif line.find("# / TYPES OF OBSERV") >= 0: global obsnum obsnum = int(line[ 0: 6]) count0 = 0 # The line counters count1 = 0 # The total counters obstypes= [] while 1: obstypes.append( str.strip(line[ 0 + 6 * (count0 + 1): 6 + 6 * (count0 + 1)]) ) count0 += 1 count1 += 1 if count1 == obsnum: break if count0 % 9 == 0: line = f.readline() count0 = 0 # # # # # # #Covert the observation types from 2.xx to 3.04 count = 0 for obstype in obstypes: if obstype.find("5") >= 0 or obstype.find("7") >= 0 or obstype.find("8") >= 0: obstype = obstype + "I" elif obstype.find("6") >= 0: obstype = obstype + "C" elif obstype.find("1") >= 0 or obstype.find("2") >= 0: if obstype.find("P") >= 0: obstype = "C" + obstype[1:2] + "P" else: obstype = obstype + "C" obstypes[count] = obstype count += 1 #Refactoring observation type format to 3.04 syss = ['G', 'R', 'E', 'S'] for sys in syss: line = sys + 3*blank + "%2d"%obsnum + blank count0 = 0 count1 = 0 for obstype in obstypes: line += obstype + blank count0 += 1 count1 += 1 # Output the final line if count1 == obsnum: line += (13 - count0) * 4 * blank + blank + "SYS / # / OBS TYPES\n" print(line, end="", file=outf) break # Output the first line if count0 % 13 == 0: line += blank + "SYS / # / OBS TYPES\n" print(line, end="", file=outf) line = 7*blank count0 = 0 elif line.find("END OF HEADER") >= 0: print(line,end="",file=outf) break else: print(line,end="",file=outf) # Refactoring data file format to 3.04 while 1: line = f.readline() if line == "": break elif line[0:5] == 5*blank: print(line, end="", file=outf) elif line.find("COMMENT") >= 0: print(line, end="", file=outf) else: # Refactoring epoch format to 3.04 year = int(line[ 0 : 3]) month = int(line[ 0+3 : 3+3]) day = int(line[ 0+3+3 : 3+3+3]) hour = int(line[ 0+3+3+3 : 3+3+3+3]) minute = int(line[ 0+3+3+3+3 : 3+3+3+3+3]) second = float(line[ 0+3+3+3+3+3 : 3+3+3+3+3+11]) e_flag = int(line[ 0+3+3+3+3+3+11 : 3+3+3+3+3+11+3]) satnum = int(line[ 0+3+3+3+3+3+11+3: 3+3+3+3+3+11+3+3]) sPRN = [] lineo = ">" + blank + "%4d %02d %02d %02d %02d %10.7f %2d %2d\n"\ %(year+2000, month, day, hour, minute, second, e_flag, satnum) print(lineo, end="", file=outf) count0 = 0 # The line counters count1 = 0 # The total counters while 1: sPRN.append(line[32+3*count0:32+3*(count0+1)].replace(blank,"0")) count0 += 1 count1 += 1 if count1 == satnum: break if count0 % 12 == 0: count0 = 0 line = f.readline() # # # # # # #Refactoring data format to 3.04 count = 0 while 1: if obsnum <= 5: line = f.readline() line = sPRN[count] + line elif obsnum > 5: count1 = 0 lineo ="" while 1: line = f.readline() lineo += line.replace("\n", "").replace("\r", "") if len(lineo) % 16 == 15: lineo += blank if len(lineo) % 16 == 14: lineo += 2*blank if len(line) < 80: lineo += (5 - int(len(lineo)/16))*16*blank count1 += 1 if count1 == math.ceil(obsnum/5): line = sPRN[count] + lineo +"\n" break print(line, end="", file=outf) count += 1 if count == satnum: break outf.close() f.close() return 1 def ReadObsVersion(ofile_path, out_directory): obsfile = None # Get the obs file name---------------------------# obspath = len(ofile_path) while obspath > 0: flag = ofile_path[obspath - 1:obspath] if flag == "/": obsfile = ofile_path[obspath:] break obspath -= 1 if out_directory == '': # Get the file's father folder-------------------# pathlon = len(ofile_path) while pathlon - 3 > 0: flag = ofile_path[pathlon - 3 - 1:pathlon - 3] if flag == "/": out_directory = ofile_path[:pathlon - 3] + "COV-" + obsfile break pathlon -= 1 # -----------------------------------------------# else: out_directory += "COV-" + obsfile with open(ofile_path, 'r') as f: while 1: line = f.readline() if line.find("RINEX VERSION / TYPE") >= 0: version = float(line[ 5: 9]) system = line[40:41] f.close() if version > 2.11: return 0 return ConvertObsVersion(ofile_path, out_directory, version, system) else: return 0