summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorSam Wenham <sam@wenhams.co.uk>2019-06-26 20:56:08 +0100
committerSam Wenham <sam@wenhams.co.uk>2019-06-26 20:56:08 +0100
commit8a1be45aacd3d44a49ea14a31cedd78493f8432b (patch)
tree1bdc3bf494bcdd98dd40dbfe6a30e21ae8fe9f4b /core
parent4d2f9a2b39e35fcf0c752c815bdc3733aeec8b62 (diff)
downloadtroggle-8a1be45aacd3d44a49ea14a31cedd78493f8432b.tar.gz
troggle-8a1be45aacd3d44a49ea14a31cedd78493f8432b.tar.bz2
troggle-8a1be45aacd3d44a49ea14a31cedd78493f8432b.zip
Remove this stupid hard coded name match
Diffstat (limited to 'core')
-rw-r--r--core/admin.py7
-rw-r--r--core/models.py4
-rw-r--r--core/models_survex.py16
-rw-r--r--core/views_caves.py225
4 files changed, 133 insertions, 119 deletions
diff --git a/core/admin.py b/core/admin.py
index 71bbd61..e77eaea 100644
--- a/core/admin.py
+++ b/core/admin.py
@@ -124,18 +124,19 @@ admin.site.register(CaveAndEntrance)
admin.site.register(NewSubCave)
admin.site.register(CaveDescription)
admin.site.register(Entrance, EntranceAdmin)
-admin.site.register(SurvexBlock, SurvexBlockAdmin)
admin.site.register(Expedition)
admin.site.register(Person,PersonAdmin)
-admin.site.register(SurvexPersonRole)
admin.site.register(PersonExpedition,PersonExpeditionAdmin)
admin.site.register(LogbookEntry, LogbookEntryAdmin)
#admin.site.register(PersonTrip)
admin.site.register(QM, QMAdmin)
admin.site.register(Survey, SurveyAdmin)
admin.site.register(ScannedImage)
-admin.site.register(SurvexStation)
+admin.site.register(SurvexFile)
+admin.site.register(SurvexStation)
+admin.site.register(SurvexBlock)
+admin.site.register(SurvexPersonRole)
admin.site.register(SurvexScansFolder)
admin.site.register(SurvexScanSingle)
diff --git a/core/models.py b/core/models.py
index f65efed..bbdaa0b 100644
--- a/core/models.py
+++ b/core/models.py
@@ -10,7 +10,7 @@ from django.db.models import Min, Max
from django.conf import settings
from decimal import Decimal, getcontext
from django.core.urlresolvers import reverse
-from imagekit.models import ImageModel
+from imagekit.models import ProcessedImageField #ImageModel
from django.template import Context, loader
import settings
getcontext().prec=2 #use 2 significant figures for decimal calculations
@@ -248,7 +248,7 @@ class LogbookEntry(TroggleModel):
("html", "Html style logbook")
)
- date = models.DateField()#MJG wants to turn this into a datetime such that multiple Logbook entries on the same day can be ordered.ld()
+ date = models.DateTimeField()#MJG wants to turn this into a datetime such that multiple Logbook entries on the same day can be ordered.ld()
expeditionday = models.ForeignKey("ExpeditionDay", null=True)#MJG wants to KILL THIS (redundant information)
expedition = models.ForeignKey(Expedition,blank=True,null=True) # yes this is double-
title = models.CharField(max_length=settings.MAX_LOGBOOK_ENTRY_TITLE_LENGTH)
diff --git a/core/models_survex.py b/core/models_survex.py
index 3bae04c..897844e 100644
--- a/core/models_survex.py
+++ b/core/models_survex.py
@@ -29,6 +29,9 @@ class SurvexFile(models.Model):
class Meta:
ordering = ('id',)
+
+ def __unicode__(self):
+ return self.path + '.svx' or 'no file'
def exists(self):
fname = os.path.join(settings.SURVEX_DATA, self.path + ".svx")
@@ -66,6 +69,9 @@ class SurvexStation(models.Model):
x = models.FloatField(blank=True, null=True)
y = models.FloatField(blank=True, null=True)
z = models.FloatField(blank=True, null=True)
+
+ def __unicode__(self):
+ return self.block.cave.slug() + '/' + self.block.name + '/' + self.name or 'No station name'
def path(self):
r = self.name
@@ -109,7 +115,7 @@ class SurvexBlock(models.Model):
text = models.TextField()
cave = models.ForeignKey('Cave', blank=True, null=True)
- date = models.DateField(blank=True, null=True)
+ date = models.DateTimeField(blank=True, null=True)
expeditionday = models.ForeignKey("ExpeditionDay", null=True)
expedition = models.ForeignKey('Expedition', blank=True, null=True)
@@ -177,7 +183,7 @@ ROLE_CHOICES = (
class SurvexPersonRole(models.Model):
survexblock = models.ForeignKey('SurvexBlock')
nrole = models.CharField(choices=ROLE_CHOICES, max_length=200, blank=True, null=True)
- # increasing levels of precision
+ # increasing levels of precision
personname = models.CharField(max_length=100)
person = models.ForeignKey('Person', blank=True, null=True)
personexpedition = models.ForeignKey('PersonExpedition', blank=True, null=True)
@@ -194,6 +200,9 @@ class SurvexScansFolder(models.Model):
class Meta:
ordering = ('walletname',)
+
+ def __unicode__(self):
+ return self.walletname or 'no wallet'
def get_absolute_url(self):
return urlparse.urljoin(settings.URL_ROOT, reverse('surveyscansfolder', kwargs={"path":re.sub("#", "%23", self.walletname)}))
@@ -205,6 +214,9 @@ class SurvexScanSingle(models.Model):
class Meta:
ordering = ('name',)
+
+ def __unicode__(self):
+ return self.survexscansfolder.walletname + '/' + self.name
def get_absolute_url(self):
return urlparse.urljoin(settings.URL_ROOT, reverse('surveyscansingle', kwargs={"path":re.sub("#", "%23", self.survexscansfolder.walletname), "file":self.name}))
diff --git a/core/views_caves.py b/core/views_caves.py
index af76b1e..bc5aa1a 100644
--- a/core/views_caves.py
+++ b/core/views_caves.py
@@ -50,7 +50,7 @@ def caveCmp(x, y):
return numericalcmp(x.unofficial_number, y.unofficial_number)
def caveindex(request):
- caves = Cave.objects.all()
+ #caves = Cave.objects.all()
notablecavehrefs = settings.NOTABLECAVESHREFS
notablecaves = [Cave.objects.get(kataster_number=kataster_number) for kataster_number in notablecavehrefs ]
caves1623 = list(Cave.objects.filter(area__short_name = "1623"))
@@ -240,7 +240,7 @@ def entranceSlug(request, slug):
def survexblock(request, survexpath):
survexpath = re.sub("/", ".", survexpath)
- print "jjjjjj", survexpath
+ print("jjjjjj", survexpath)
survexblock = models.SurvexBlock.objects.get(survexpath=survexpath)
#ftext = survexblock.filecontents()
ftext = survexblock.text
@@ -277,30 +277,30 @@ def get_qms(request, caveslug):
return render(request,'options.html', {"items": [(e.entrance.slug(), e.entrance.slug()) for e in cave.entrances()]})
areanames = [
- #('', 'Location unclear'),
- ('1a', '1a &ndash; Plateau: around Top Camp'),
- ('1b', '1b &ndash; Western plateau near 182'),
- ('1c', '1c &ndash; Eastern plateau near 204 walk-in path'),
- ('1d', '1d &ndash; Further plateau around 76'),
- ('2a', '2a &ndash; Southern Schwarzmooskogel near 201 path and the Nipple'),
- ('2b', '2b &ndash; Eish&ouml;hle area'),
- ('2b or 4 (unclear)', '2b or 4 (unclear)'),
- ('2c', '2c &ndash; Kaninchenh&ouml;hle area'),
- ('2d', '2d &ndash; Steinbr&uuml;ckenh&ouml;hle area'),
- ('3', '3 &ndash; Br&auml;uning Alm'),
- ('4', '4 &ndash; Kratzer valley'),
- ('5', '5 &ndash; Schwarzmoos-Wildensee'),
- ('6', '6 &ndash; Far plateau'),
- ('1626 or 6 (borderline)', '1626 or 6 (borderline)'),
- ('7', '7 &ndash; Egglgrube'),
- ('8a', '8a &ndash; Loser south face'),
- ('8b', '8b &ndash; Loser below Dimmelwand'),
- ('8c', '8c &ndash; Augst See'),
- ('8d', '8d &ndash; Loser-Hochganger ridge'),
- ('9', '9 &ndash; Gschwandt Alm'),
- ('10', '10 &ndash; Altaussee'),
- ('11', '11 &ndash; Augstbach')
- ]
+ #('', 'Location unclear'),
+ ('1a', '1a &ndash; Plateau: around Top Camp'),
+ ('1b', '1b &ndash; Western plateau near 182'),
+ ('1c', '1c &ndash; Eastern plateau near 204 walk-in path'),
+ ('1d', '1d &ndash; Further plateau around 76'),
+ ('2a', '2a &ndash; Southern Schwarzmooskogel near 201 path and the Nipple'),
+ ('2b', '2b &ndash; Eish&ouml;hle area'),
+ ('2b or 4 (unclear)', '2b or 4 (unclear)'),
+ ('2c', '2c &ndash; Kaninchenh&ouml;hle area'),
+ ('2d', '2d &ndash; Steinbr&uuml;ckenh&ouml;hle area'),
+ ('3', '3 &ndash; Br&auml;uning Alm'),
+ ('4', '4 &ndash; Kratzer valley'),
+ ('5', '5 &ndash; Schwarzmoos-Wildensee'),
+ ('6', '6 &ndash; Far plateau'),
+ ('1626 or 6 (borderline)', '1626 or 6 (borderline)'),
+ ('7', '7 &ndash; Egglgrube'),
+ ('8a', '8a &ndash; Loser south face'),
+ ('8b', '8b &ndash; Loser below Dimmelwand'),
+ ('8c', '8c &ndash; Augst See'),
+ ('8d', '8d &ndash; Loser-Hochganger ridge'),
+ ('9', '9 &ndash; Gschwandt Alm'),
+ ('10', '10 &ndash; Altaussee'),
+ ('11', '11 &ndash; Augstbach')
+ ]
def prospecting(request):
@@ -318,21 +318,21 @@ def prospecting(request):
# big map first (zoom factor ignored)
maps = {
-# id left top right bottom zoom
-# G&K G&K G&K G&K factor
-"all": [33810.4, 85436.5, 38192.0, 81048.2, 0.35,
- "All"],
-"40": [36275.6, 82392.5, 36780.3, 81800.0, 3.0,
- "Eish&ouml;hle"],
-"76": [35440.0, 83220.0, 36090.0, 82670.0, 1.3,
- "Eislufth&ouml;hle"],
-"204": [36354.1, 84154.5, 37047.4, 83300, 3.0,
- "Steinbr&uuml;ckenh&ouml;hle"],
-"tc": [35230.0, 82690.0, 36110.0, 82100.0, 3.0,
- "Near Top Camp"],
+# id left top right bottom zoom
+# G&K G&K G&K G&K factor
+"all": [33810.4, 85436.5, 38192.0, 81048.2, 0.35,
+ "All"],
+"40": [36275.6, 82392.5, 36780.3, 81800.0, 3.0,
+ "Eish&ouml;hle"],
+"76": [35440.0, 83220.0, 36090.0, 82670.0, 1.3,
+ "Eislufth&ouml;hle"],
+"204": [36354.1, 84154.5, 37047.4, 83300, 3.0,
+ "Steinbr&uuml;ckenh&ouml;hle"],
+"tc": [35230.0, 82690.0, 36110.0, 82100.0, 3.0,
+ "Near Top Camp"],
"grieß":
- [36000.0, 86300.0, 38320.0, 84400.0, 4.0,
- "Grießkogel Area"],
+ [36000.0, 86300.0, 38320.0, 84400.0, 4.0,
+ "Grießkogel Area"],
}
for n in maps.keys():
@@ -353,50 +353,50 @@ ZOOM = 4
DESC = 5
areacolours = {
- '1a' : '#00ffff',
- '1b' : '#ff00ff',
- '1c' : '#ffff00',
- '1d' : '#ffffff',
- '2a' : '#ff0000',
- '2b' : '#00ff00',
- '2c' : '#008800',
- '2d' : '#ff9900',
- '3' : '#880000',
- '4' : '#0000ff',
- '6' : '#000000', # doubles for surface fixed pts, and anything else
- '7' : '#808080'
- }
+ '1a' : '#00ffff',
+ '1b' : '#ff00ff',
+ '1c' : '#ffff00',
+ '1d' : '#ffffff',
+ '2a' : '#ff0000',
+ '2b' : '#00ff00',
+ '2c' : '#008800',
+ '2d' : '#ff9900',
+ '3' : '#880000',
+ '4' : '#0000ff',
+ '6' : '#000000', # doubles for surface fixed pts, and anything else
+ '7' : '#808080'
+ }
for FONT in [
- "/usr/share/fonts/truetype/freefont/FreeSans.ttf",
- "/usr/X11R6/lib/X11/fonts/truetype/arial.ttf",
- "C:\WINNT\Fonts\ARIAL.TTF"
- ]:
- if os.path.isfile(FONT): break
+ "/usr/share/fonts/truetype/freefont/FreeSans.ttf",
+ "/usr/X11R6/lib/X11/fonts/truetype/arial.ttf",
+ "C:\WINNT\Fonts\ARIAL.TTF"
+ ]:
+ if os.path.isfile(FONT): break
TEXTSIZE = 16
CIRCLESIZE =8
LINEWIDTH = 2
myFont = ImageFont.truetype(FONT, TEXTSIZE)
def mungecoord(x, y, mapcode, img):
- # Top of Zinken is 73 1201 = dataset 34542 81967
- # Top of Hinter is 1073 562 = dataset 36670 83317
- # image is 1417 by 2201
- # FACTOR1 = 1000.0 / (36670.0-34542.0)
- # FACTOR2 = (1201.0-562.0) / (83317 - 81967)
- # FACTOR = (FACTOR1 + FACTOR2)/2
- # The factors aren't the same as the scanned map's at a slight angle. I
- # can't be bothered to fix this. Since we zero on the Hinter it makes
- # very little difference for caves in the areas round 76 or 204.
- # xoffset = (x - 36670)*FACTOR
- # yoffset = (y - 83317)*FACTOR
- # return (1073 + xoffset, 562 - yoffset)
-
- m = maps[mapcode]
- factorX, factorY = img.size[0] / (m[R] - m[L]), img.size[1] / (m[T] - m[B])
- return ((x - m[L]) * factorX, (m[T] - y) * factorY)
-
+ # Top of Zinken is 73 1201 = dataset 34542 81967
+ # Top of Hinter is 1073 562 = dataset 36670 83317
+ # image is 1417 by 2201
+ # FACTOR1 = 1000.0 / (36670.0-34542.0)
+ # FACTOR2 = (1201.0-562.0) / (83317 - 81967)
+ # FACTOR = (FACTOR1 + FACTOR2)/2
+ # The factors aren't the same as the scanned map's at a slight angle. I
+ # can't be bothered to fix this. Since we zero on the Hinter it makes
+ # very little difference for caves in the areas round 76 or 204.
+ # xoffset = (x - 36670)*FACTOR
+ # yoffset = (y - 83317)*FACTOR
+ # return (1073 + xoffset, 562 - yoffset)
+
+ m = maps[mapcode]
+ factorX, factorY = img.size[0] / (m[R] - m[L]), img.size[1] / (m[T] - m[B])
+ return ((x - m[L]) * factorX, (m[T] - y) * factorY)
+
COL_TYPES = {True: "red",
False: "#dddddd",
"Reference": "#dddddd"}
@@ -422,40 +422,40 @@ def prospecting_image(request, name):
m = maps[name]
#imgmaps = []
if name == "all":
- img = mainImage
+ img = mainImage
else:
- M = maps['all']
- W, H = mainImage.size
- l = int((m[L] - M[L]) / (M[R] - M[L]) * W)
- t = int((m[T] - M[T]) / (M[B] - M[T]) * H)
- r = int((m[R] - M[L]) / (M[R] - M[L]) * W)
- b = int((m[B] - M[T]) / (M[B] - M[T]) * H)
- img = mainImage.crop((l, t, r, b))
- w = int(round(m[ZOOM] * (m[R] - m[L]) / (M[R] - M[L]) * W))
- h = int(round(m[ZOOM] * (m[B] - m[T]) / (M[B] - M[T]) * H))
- img = img.resize((w, h), Image.BICUBIC)
+ M = maps['all']
+ W, H = mainImage.size
+ l = int((m[L] - M[L]) / (M[R] - M[L]) * W)
+ t = int((m[T] - M[T]) / (M[B] - M[T]) * H)
+ r = int((m[R] - M[L]) / (M[R] - M[L]) * W)
+ b = int((m[B] - M[T]) / (M[B] - M[T]) * H)
+ img = mainImage.crop((l, t, r, b))
+ w = int(round(m[ZOOM] * (m[R] - m[L]) / (M[R] - M[L]) * W))
+ h = int(round(m[ZOOM] * (m[B] - m[T]) / (M[B] - M[T]) * H))
+ img = img.resize((w, h), Image.BICUBIC)
draw = ImageDraw.Draw(img)
draw.setfont(myFont)
if name == "all":
for maparea in maps.keys():
- if maparea == "all":
- continue
- localm = maps[maparea]
- l,t = mungecoord(localm[L], localm[T], "all", img)
- r,b = mungecoord(localm[R], localm[B], "all", img)
- text = maparea + " map"
- textlen = draw.textsize(text)[0] + 3
- draw.rectangle([l, t, l+textlen, t+TEXTSIZE+2], fill='#ffffff')
- draw.text((l+2, t+1), text, fill="#000000")
- #imgmaps.append( [l, t, l+textlen, t+SIZE+2, "submap" + maparea, maparea + " subarea map"] )
- draw.line([l, t, r, t], fill='#777777', width=LINEWIDTH)
- draw.line([l, b, r, b], fill='#777777', width=LINEWIDTH)
- draw.line([l, t, l, b], fill='#777777', width=LINEWIDTH)
- draw.line([r, t, r, b], fill='#777777', width=LINEWIDTH)
- draw.line([l, t, l+textlen, t], fill='#777777', width=LINEWIDTH)
- draw.line([l, t+TEXTSIZE+2, l+textlen, t+TEXTSIZE+2], fill='#777777', width=LINEWIDTH)
- draw.line([l, t, l, t+TEXTSIZE+2], fill='#777777', width=LINEWIDTH)
- draw.line([l+textlen, t, l+textlen, t+TEXTSIZE+2], fill='#777777', width=LINEWIDTH)
+ if maparea == "all":
+ continue
+ localm = maps[maparea]
+ l,t = mungecoord(localm[L], localm[T], "all", img)
+ r,b = mungecoord(localm[R], localm[B], "all", img)
+ text = maparea + " map"
+ textlen = draw.textsize(text)[0] + 3
+ draw.rectangle([l, t, l+textlen, t+TEXTSIZE+2], fill='#ffffff')
+ draw.text((l+2, t+1), text, fill="#000000")
+ #imgmaps.append( [l, t, l+textlen, t+SIZE+2, "submap" + maparea, maparea + " subarea map"] )
+ draw.line([l, t, r, t], fill='#777777', width=LINEWIDTH)
+ draw.line([l, b, r, b], fill='#777777', width=LINEWIDTH)
+ draw.line([l, t, l, b], fill='#777777', width=LINEWIDTH)
+ draw.line([r, t, r, b], fill='#777777', width=LINEWIDTH)
+ draw.line([l, t, l+textlen, t], fill='#777777', width=LINEWIDTH)
+ draw.line([l, t+TEXTSIZE+2, l+textlen, t+TEXTSIZE+2], fill='#777777', width=LINEWIDTH)
+ draw.line([l, t, l, t+TEXTSIZE+2], fill='#777777', width=LINEWIDTH)
+ draw.line([l+textlen, t, l+textlen, t+TEXTSIZE+2], fill='#777777', width=LINEWIDTH)
#imgmaps[maparea] = []
# Draw scale bar
m100 = int(100 / (m[R] - m[L]) * img.size[0])
@@ -477,14 +477,15 @@ def prospecting_image(request, name):
plot("laser.0_5", "LSR5", "Reference", "Laser Point 0/5", name, draw, img)
plot("225-96", "BAlm", "Reference", "Br&auml;uning Alm trig point", name, draw, img)
for entrance in Entrance.objects.all():
- station = entrance.best_station()
- if station:
- #try:
- areaName = entrance.caveandentrance_set.all()[0].cave.getArea().short_name
- plot(station, "%s-%s" % (areaName, str(entrance)[5:]), entrance.needs_surface_work(), str(entrance), name, draw, img)
- #except:
- # pass
-
+ station = entrance.best_station()
+ if station:
+ #try:
+ areaName = entrance.caveandentrance_set.all()[0].cave.getArea().short_name
+ plot(station, "%s-%s" % (areaName, str(entrance)
+ [5:]), entrance.needs_surface_work(), str(entrance), name, draw, img)
+ #except:
+ # pass
+
for (N, E, D, num) in [(35975.37, 83018.21, 100,"177"), # Calculated from bearings
(35350.00, 81630.00, 50, "71"), # From Auer map
(36025.00, 82475.00, 50, "146"), # From mystery map