Source code for tracklib.io.TrackFormat
"""File format to read and write GPS tracks to CSV file(s)."""
import os.path
from tracklib.core.ObsTime import ObsTime
[docs]class TrackFormat:
"""TODO"""
resource_path = os.path.join(os.path.split(__file__)[0], "../..")
TRACK_FILE_FORMAT = os.path.join(resource_path, "resources/track_file_format")
@staticmethod
def __search_fmt_from_ext_or_name(file_format_path, arg, ext=0):
"""TODO"""
# ext = 0 for search by name and 1 for search by ext
if ext == 1:
arg = arg.split(".")[-1]
with open(file_format_path) as ffmt:
line = ffmt.readline().strip()
while line:
if line[0] == "#":
line = ffmt.readline().strip()
continue
fields = line.split(",")
if fields[ext].strip() == arg:
return fields
line = ffmt.readline().strip()
word = "extension"
if ext == 0:
word = "format"
print(
"ERROR: "
+ word
+ " ["
+ arg
+ "] is not a standard format in "
+ file_format_path
)
exit()
# -------------------------------------------------------------
# Load file format from track_file_format
# ext:
# 1 to infer format through extension
# 0 to infer format directly through name
# -1 no format inference
# -------------------------------------------------------------
[docs] def __init__(self, arg, ext=-1):
"""TODO"""
if ext >= 0:
fields = TrackFormat.__search_fmt_from_ext_or_name(
TrackFormat.TRACK_FILE_FORMAT, arg, ext
)
self.name = fields[0].strip()
self.id_E = int(fields[2].strip())
self.id_N = int(fields[3].strip())
self.id_U = int(fields[4].strip())
self.id_T = int(fields[5].strip())
self.DateIni = fields[6].strip()
self.separator = fields[7].strip()
self.h = int(fields[8].strip())
self.com = fields[9].strip()
self.no_data_value = float(fields[10].strip())
self.srid = fields[11].strip()
self.read_all = fields[13].strip().upper() == "TRUE"
self.time_fmt = fields[12].strip()
self.separator = self.separator.replace("b", " ")
self.separator = self.separator.replace("c", ",")
self.separator = self.separator.replace("s", ";")
if self.DateIni == "-1":
self.DateIni = -1
else:
fmt_temp = ObsTime.getReadFormat()
ObsTime.setReadFormat(self.time_fmt)
self.DateIni = ObsTime(self.DateIni)
ObsTime.setReadFormat(fmt_temp)
else:
self.id_E = -1
self.id_N = -1
self.id_U = -1
self.id_T = -1
self.DateIni = -1
self.separator = ","
self.h = 0
self.com = "#"
self.no_data_value = -999999
self.srid = "ENUCoords"
self.read_all = False
self.time_fmt = ObsTime.getReadFormat()