summaryrefslogtreecommitdiffstats
path: root/parsers/survex.py
diff options
context:
space:
mode:
Diffstat (limited to 'parsers/survex.py')
-rw-r--r--parsers/survex.py100
1 files changed, 66 insertions, 34 deletions
diff --git a/parsers/survex.py b/parsers/survex.py
index 25e72b5..88c226c 100644
--- a/parsers/survex.py
+++ b/parsers/survex.py
@@ -38,20 +38,27 @@ class LoadingSurvex():
other survex files.
A 'scansfolder' is what we today call a "survey scans folder" or a "wallet".
"""
-
- rx_flagsnot= re.compile(r"not\s")
- rx_linelen = re.compile(r"[\d\-+.]+$")
- rx_team = re.compile(r"(?i)(Insts|Notes|Tape|Dog|Useless|Pics|Helper|Disto|Consultant)\s+(.*)$")
- rx_person = re.compile(r"(?i) and | / |, | & | \+ |^both$|^none$")
- rx_qm = re.compile(r'(?i)^\s*QM(\d)\s+?([a-dA-DxX])\s+([\w\-]+)\.(\d+)\s+(([\w\-]+)\.(\d+)|\-)\s+(.+)$')
-# remember there is also QM_PATTERN used in views_other and set in settings.py
-
rx_begin = re.compile(r'(?i)begin')
rx_end = re.compile(r'(?i)end$')
rx_title = re.compile(r'(?i)title$')
rx_ref = re.compile(r'(?i)ref$')
rx_data = re.compile(r'(?i)data$')
rx_flags = re.compile(r'(?i)flags$')
+ rx_alias = re.compile(r'(?i)alias$')
+ rx_entrance = re.compile(r'(?i)entrance$')
+ rx_date = re.compile(r'(?i)date$')
+ rx_units = re.compile(r'(?i)units$')
+ rx_team = re.compile(r'(?i)team$')
+ rx_set = re.compile(r'(?i)set$')
+ rx_names = re.compile(r'(?i)names$')
+
+ rx_flagsnot= re.compile(r"not\s")
+ rx_linelen = re.compile(r"[\d\-+.]+$")
+ rx_teammem = re.compile(r"(?i)(Insts|Notes|Tape|Dog|Useless|Pics|Helper|Disto|Consultant)\s+(.*)$")
+ rx_person = re.compile(r"(?i) and | / |, | & | \+ |^both$|^none$")
+ rx_qm = re.compile(r'(?i)^\s*QM(\d)\s+?([a-dA-DxX])\s+([\w\-]+)\.(\d+)\s+(([\w\-]+)\.(\d+)|\-)\s+(.+)$')
+# remember there is also QM_PATTERN used in views_other and set in settings.py
+ rx_tapelng = re.compile(r'(?i)(tape|length)$')
rx_cave = re.compile(r'(?i)caves-(\d\d\d\d)/([-\d\w]+|\d\d\d\d-?\w+-\d+)')
rx_comment = re.compile(r'([^;]*?)\s*(?:;\s*(.*))?\n?$')
@@ -71,19 +78,23 @@ class LoadingSurvex():
datastardefault = {"type":"normal", "from":0, "to":1, "tape":2, "compass":3, "clino":4}
flagsdefault = {"duplicate":False, "surface":False, "splay":False, "skiplegs":False, "splayalias":False}
+ METRESINFEET = 3.28084
+
datastar ={}
flagsstar = {}
+ units = "metres"
slength = 0.0
legsnumber = 0
depthbegin = 0
depthinclude = 0
+ unitsstack = []
legsnumberstack = []
slengthstack = []
personexpedstack = []
stackbegin =[]
flagsstack =[]
datastack =[]
- stackinclude = []
+ includestack = []
stacksvxfiles = []
svxfileslist = []
svxdirs = {}
@@ -109,7 +120,7 @@ class LoadingSurvex():
if cmd == "require":
pass # should we check survex version available for processing?
elif cmd in ["equate", "fix", "calibrate", "cs", "export", "case",
- "declination", "infer","instrument", "sd", "units"]:
+ "declination", "infer","instrument", "sd"]:
pass # we ignore all these, which is fine.
else:
if cmd in ["include", "data", "flags", "title", "entrance","set", "units", "alias", "ref"]:
@@ -123,7 +134,7 @@ class LoadingSurvex():
def LoadSurvexTeam(self, survexblock, line):
teammembers = [ ]
- mteammember = self.rx_team.match(line)
+ mteammember = self.rx_teammem.match(line)
if mteammember:
for tm in self.rx_person.split(mteammember.group(2)):
if tm:
@@ -152,6 +163,22 @@ class LoadingSurvex():
print((self.insp+message))
models.DataIssue.objects.create(parser='survex', message=message)
+ def LoadSurvexUnits(self, survexblock, line):
+ # all for 4 survex files with measurements in feet. bugger.
+ tapeunits = self.rx_tapelng.match(line) # tape|length
+ if not tapeunits:
+ return
+ feet = re.match("(?i)feet$",line)
+ metres = re.match("(?i)(METRIC|METRES|METERS)",line)
+ if feet:
+ self.units = "feet"
+ elif metres:
+ self.units = "metres"
+ else:
+ message = "! *UNITS in YARDS (!?) - not converted '{}' ({}) {}".format(line, survexblock, survexblock.survexfile.path)
+ print((self.insp+message))
+ models.DataIssue.objects.create(parser='survex', message=message)
+
def LoadSurvexDate(self, survexblock, line):
# we should make this a date range for everything
if len(line) == 10:
@@ -174,6 +201,7 @@ class LoadingSurvex():
def LoadSurvexLeg(self, survexblock, sline, comment):
"""This reads compass, clino and tape data but only keeps the tape lengths,
the rest is discarded after error-checking.
+ Now skipping the error checking - returns as soon as the leg is not one we count.
"""
invalid_clino = 180.0
invalid_compass = 720.0
@@ -186,7 +214,6 @@ class LoadingSurvex():
if debugprint:
print("! LEG datastar type:{}++{}\n{} ".format(self.datastar["type"].upper(), survexblock.survexfile.path, sline))
- # SKIP PASSAGES *data passage
if self.datastar["type"] == "passage":
return
if self.datastar["type"] == "cartesian":
@@ -197,7 +224,8 @@ class LoadingSurvex():
return
if self.datastar["type"] == "cylpolar":
return
- # print(" !! LEG data lineno:{}\n !! sline:'{}'\n !! datastar['tape']: {}".format(self.lineno, sline, self.datastar["tape"]))
+ if debugprint:
+ print(" !! LEG data lineno:{}\n !! sline:'{}'\n !! datastar['tape']: {}".format(self.lineno, sline, self.datastar["tape"]))
if self.datastar["type"] != "normal":
return
@@ -242,6 +270,8 @@ class LoadingSurvex():
# tape = tape.replace("/",".") # edited original file (only one) instead.
try:
survexleg.tape = float(tape)
+ if self.units =="feet":
+ survexleg.tape = float(tape) / METRESINFEET
self.legsnumber += 1
except ValueError:
print(("! Tape misread in", survexblock.survexfile.path))
@@ -698,7 +728,8 @@ class LoadingSurvex():
depth = " " * self.depthbegin
self.insp = depth
- #print("{:2}{} - Begin for :'{}'".format(self.depthbegin,depth, blkid))
+ if debugprint:
+ print("{:2}{} - Begin for :'{}'".format(self.depthbegin,depth, blkid))
pathlist = ""
for id in self.stackbegin:
if len(id) > 0:
@@ -708,9 +739,10 @@ class LoadingSurvex():
nonlocal args
depth = " " * self.depthbegin
- #print("{:2}{} - End from:'{}'".format(self.depthbegin,depth,args))
- #print("{:2}{} - LEGS: {} (n: {}, length:{})".format(self.depthbegin,
- # depth, self.slength, self.slength, self.legsnumber))
+ if debugprint:
+ print("{:2}{} - End from:'{}'".format(self.depthbegin,depth,args))
+ print("{:2}{} - LEGS: {} (n: {}, length:{} units:{})".format(self.depthbegin,
+ depth, self.slength, self.slength, self.legsnumber, self.units))
def pushblock():
nonlocal blkid
@@ -778,6 +810,7 @@ class LoadingSurvex():
blkid = args.lower()
# PUSH state ++++++++++++++
self.stackbegin.append(blkid)
+ self.unitsstack.append(self.units)
self.legsnumberstack.append(self.legsnumber)
self.slengthstack.append(self.slength)
self.personexpedstack.append(self.currentpersonexped)
@@ -785,6 +818,7 @@ class LoadingSurvex():
# PUSH state ++++++++++++++
self.legsnumber = 0
self.slength = 0.0
+ self.units = "metres"
self.currentpersonexped = []
printbegin()
newsurvexblock = models_survex.SurvexBlock(name=blkid, parent=survexblock,
@@ -819,6 +853,7 @@ class LoadingSurvex():
popblock()
self.currentpersonexped = self.personexpedstack.pop()
self.legsnumber = self.legsnumberstack.pop()
+ self.units = self.unitsstack.pop()
self.slength = self.slengthstack.pop()
blkid = self.stackbegin.pop()
self.currentsurvexblock = survexblock.parent
@@ -845,17 +880,19 @@ class LoadingSurvex():
elif self.rx_data.match(cmd):
self.LoadSurvexDataCmd(survexblock, args)
- elif re.match("(?i)alias$", cmd):
+ elif self.rx_alias.match(cmd):
self.LoadSurvexAlias(survexblock, args)
- elif re.match("(?i)entrance$", cmd):
+ elif self.rx_entrance.match(cmd):
self.LoadSurvexEntrance(survexblock, args)
- elif re.match("(?i)date$", cmd):
+ elif self.rx_date.match(cmd):
self.LoadSurvexDate(survexblock, args)
- elif re.match("(?i)team$", cmd):
+ elif self.rx_units.match(cmd):
+ self.LoadSurvexUnits(survexblock, args)
+ elif self.rx_team.match(cmd):
self.LoadSurvexTeam(survexblock, args)
- elif re.match("(?i)set$", cmd) and re.match("(?i)names", args):
+ elif self.rx_set.match(cmd) and self.rx_names.match(cmd):
pass
- elif re.match("(?i)include$", cmd):
+ elif self.rx_include.match(cmd):
message = " ! -ERROR *include command not expected here {}. Re-run a full Survex import.".format(path)
print(message)
print(message,file=sys.stderr)
@@ -937,13 +974,13 @@ class LoadingSurvex():
fcollate.write(";*include {}\n".format(includepath))
flinear.write("{:2} {} *include {}\n".format(self.depthinclude, indent, includepath))
push = includepath.lower()
- self.stackinclude.append(push)
+ self.includestack.append(push)
#-----------------
self.RecursiveScan(survexblock, includepath, fininclude, flinear, fcollate)
#-----------------
- pop = self.stackinclude.pop()
+ pop = self.includestack.pop()
if pop != push:
- message = "!! ERROR mismatch *include pop!=push {}".format(pop, push, self.stackinclude)
+ message = "!! ERROR mismatch *include pop!=push {}".format(pop, push, self.includestack)
print(message)
print(message,file=flinear)
print(message,file=sys.stderr)
@@ -1097,7 +1134,6 @@ def FindAndLoadSurvex(survexblockroot):
print(" - MEM:{:7.3f} MB USED".format(mem1-mem0),file=sys.stderr)
legsnumber = svx_load.legsnumber
- slength = svx_load.slength
mem1 = models.get_process_memory()
print(" - Number of SurvexDirectories: {}".format(len(svx_load.survexdict)))
@@ -1112,7 +1148,7 @@ def FindAndLoadSurvex(survexblockroot):
print("+", file=sys.stderr)
sys.stderr.flush();
sys.stdout = stdout_orig
- return (legsnumber, slength)
+ return legsnumber
def MakeSurvexFileRoot():
"""Returns a file_object.path = SURVEX_TOPNAME associated with directory_object.path = SURVEX_DATA
@@ -1135,29 +1171,25 @@ def LoadSurvexBlocks():
models_survex.SurvexStation.objects.all().delete()
print(" - survex Data Issues flushed")
models.DataIssue.objects.filter(parser='survex').delete()
+ models.DataIssue.objects.filter(parser='survexleg').delete()
survexfileroot = MakeSurvexFileRoot()
# this next makes a block_object assciated with a file_object.path = SURVEX_TOPNAME
survexblockroot = models_survex.SurvexBlock(name=ROOTBLOCK, survexpath="", cave=None, survexfile=survexfileroot,
legsall=0, legslength=0.0)
- # this is the first so id=1
survexblockroot.save()
print(' - Loading Survex Blocks...')
memstart = models.get_process_memory()
#----------------------------------------------------------------
- legsnumber, slength = FindAndLoadSurvex(survexblockroot)
+ legsnumber = FindAndLoadSurvex(survexblockroot)
#----------------------------------------------------------------
memend = models.get_process_memory()
print(" - MEMORY start:{:.3f} MB end:{:.3f} MB increase={:.3f} MB".format(memstart,memend, memend-memstart))
- # Don't do this, it double-counts everything:
- #survexblockroot.legslength = slength
- #survexblockroot.legsall = legsnumber
survexblockroot.save()
print(" - total number of survex legs: {}".format(legsnumber))
- print(" - total leg lengths loaded: {}m".format(slength))
print(' - Loaded All Survex Blocks.')
poslineregex = re.compile(r"^\(\s*([+-]?\d*\.\d*),\s*([+-]?\d*\.\d*),\s*([+-]?\d*\.\d*)\s*\)\s*([^\s]+)$")