diff --git a/core/views/prospect.py b/core/views/prospect.py index 3ef768f..34f875b 100644 --- a/core/views/prospect.py +++ b/core/views/prospect.py @@ -15,8 +15,52 @@ from troggle.core.models.caves import Entrance, Area, SurvexStation, Cave from troggle.core.views.caves import caveKey ''' Generates the prospecting guide document. + +Also produces the overlay of points on top of a prospecting_image map - to be deleted. +I have tried to make this work with the version of PIL we have installed but something is missing still. ''' +AREANAMES = [ + #('', 'Location unclear'), + ('1a', '1a – Plateau: around Top Camp'), + ('1b', '1b – Western plateau near 182'), + ('1c', '1c – Eastern plateau near 204 walk-in path'), + ('1d', '1d – Further plateau around 76'), + ('2a', '2a – Southern Schwarzmooskogel near 201 path and the Nipple'), + ('2b', '2b – Eishöhle area'), + ('2b or 4 (unclear)', '2b or 4 (unclear)'), + ('2c', '2c – Kaninchenhöhle area'), + ('2d', '2d – Steinbrückenhöhle area'), + ('3', '3 – Bräuning Alm'), + ('4', '4 – Kratzer valley'), + ('5', '5 – Schwarzmoos-Wildensee'), + ('6', '6 – Far plateau'), + ('1626 or 6 (borderline)', '1626 or 6 (borderline)'), + ('7', '7 – Egglgrube'), + ('8a', '8a – Loser south face'), + ('8b', '8b – Loser below Dimmelwand'), + ('8c', '8c – Augst See'), + ('8d', '8d – Loser-Hochganger ridge'), + ('9', '9 – Gschwandt Alm'), + ('10', '10 – Altaussee'), + ('11', '11 – Augstbach') + ] + + +def prospecting(request): + '''This produces the multipage 'prospecting guide' document, + intended to be printed and carried into the field - in 1999. + + All the formatting and selection clverness is in the template file. + ''' + areas = [] + for key, name in AREANAMES: + a = Area.objects.get(short_name = key) # assumes unique + caves = list(a.cave_set.all()) + caves.sort(key=caveKey) + areas.append((name, a, caves)) + return render(request, 'prospecting.html', {"areas": areas}) + class MapLocations(object): p = [ ("laser.0_7", "BNase", "Reference", "Bräuning Nase laser point"), @@ -54,48 +98,17 @@ class MapLocations(object): def __str__(self): return "{} map locations".format(len(self.p)) - -AREANAMES = [ - #('', 'Location unclear'), - ('1a', '1a – Plateau: around Top Camp'), - ('1b', '1b – Western plateau near 182'), - ('1c', '1c – Eastern plateau near 204 walk-in path'), - ('1d', '1d – Further plateau around 76'), - ('2a', '2a – Southern Schwarzmooskogel near 201 path and the Nipple'), - ('2b', '2b – Eishöhle area'), - ('2b or 4 (unclear)', '2b or 4 (unclear)'), - ('2c', '2c – Kaninchenhöhle area'), - ('2d', '2d – Steinbrückenhöhle area'), - ('3', '3 – Bräuning Alm'), - ('4', '4 – Kratzer valley'), - ('5', '5 – Schwarzmoos-Wildensee'), - ('6', '6 – Far plateau'), - ('1626 or 6 (borderline)', '1626 or 6 (borderline)'), - ('7', '7 – Egglgrube'), - ('8a', '8a – Loser south face'), - ('8b', '8b – Loser below Dimmelwand'), - ('8c', '8c – Augst See'), - ('8d', '8d – Loser-Hochganger ridge'), - ('9', '9 – Gschwandt Alm'), - ('10', '10 – Altaussee'), - ('11', '11 – Augstbach') - ] + + + + -def prospecting(request): - #for key, name in AREANAMES: - #print(key, Area.objects.get(short_name = key)) - areas = [] - for key, name in AREANAMES: - a = Area.objects.get(short_name = key) # assumes unique - caves = list(a.cave_set.all()) - caves.sort(key=caveKey) - areas.append((name, a, caves)) - return render(request, 'prospecting.html', {"areas": areas}) - # Parameters for big map and zoomed subarea maps: # big map first (zoom factor ignored) +# These are the values for the url? /prospecting/[mapcode].png ?? + maps = { # id left top right bottom zoom # G&K G&K G&K G&K factor @@ -157,6 +170,7 @@ TEXTSIZE = 16 CIRCLESIZE =8 LINEWIDTH = 2 myFont = ImageFont.truetype(FONT, TEXTSIZE) +print(f' - myFont {myFont} {FONT} {TEXTSIZE}') def mungecoord(x, y, mapcode, img): # Top of Zinken is 73 1201 = dataset 34542 81967 @@ -186,7 +200,7 @@ def plot(surveypoint, number, point_type, label, mapcode, draw, img): E, N = ss.x, ss.y shortnumber = number.replace("—","") (x,y) = list(map(int, mungecoord(E, N, mapcode, img))) - #imgmaps[maparea].append( [x-4, y-SIZE/2, x+4+draw.textsize(shortnumber)[0], y+SIZE/2, shortnumber, label] ) + imgmaps[maparea].append( [x-4, y-SIZE/2, x+4+draw.textsize(shortnumber)[0], y+SIZE/2, shortnumber, label] ) draw.rectangle([(x+CIRCLESIZE, y-TEXTSIZE/2), (x+CIRCLESIZE*2+draw.textsize(shortnumber)[0], y+TEXTSIZE/2)], fill="#ffffff") draw.text((x+CIRCLESIZE * 1.5,y-TEXTSIZE/2), shortnumber, fill="#000000") draw.ellipse([(x-CIRCLESIZE,y-CIRCLESIZE),(x+CIRCLESIZE,y+CIRCLESIZE)], fill=COL_TYPES[point_type], outline="#000000") @@ -195,6 +209,21 @@ def plot(surveypoint, number, point_type, label, mapcode, draw, img): def prospecting_image(request, name): # We should replace all this with something that exports an overlay for Google Maps and OpenStreetView + + test = os.path.join(settings.EXPOFILES, "location_maps", "testmap.png") + response = HttpResponse(content_type = "image/png") + with Image.open(test) as im: + + draw = ImageDraw.Draw(im) + draw.line((0, 0) + im.size, fill=128) + draw.line((0, im.size[1], im.size[0], 0), fill=128) + + # write to stdout + #im.save(sys.stdout, "PNG") + img.save(response, "PNG") + + return response + mainImage = Image.open(os.path.join(settings.EXPOFILES, "location_maps", "pguidemap.jpg")) if settings.PUBLIC_SITE and not request.user.is_authenticated: mainImage = Image.new("RGB", mainImage.size, '#ffffff') @@ -214,7 +243,7 @@ def prospecting_image(request, name): 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) + #draw.setfont(myFont) if name == "all": for maparea in list(maps.keys()): if maparea == "all": @@ -225,7 +254,7 @@ def prospecting_image(request, name): 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") + draw.text((l+2, t+1), text, fill="#000000", font=myFont) #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) @@ -242,13 +271,14 @@ def prospecting_image(request, name): draw.line([10, TEXTSIZE*2, 10+m100, TEXTSIZE*2], fill='#000000', width=LINEWIDTH) draw.line([10+m100, TEXTSIZE * 3, 10+m100, TEXTSIZE*2], fill='#000000', width=LINEWIDTH) label = "100m" - draw.text([10 + (m100 - draw.textsize(label)[0]) / 2, TEXTSIZE/2], label, fill='#000000') + draw.text([10 + (m100 - draw.textsize(label)[0]) / 2, TEXTSIZE/2], label, fill='#000000', font=myFont) - for p in MapLocations.points(): + ml = MapLocations() + for p in ml.points(): surveypoint, number, point_type, label = p plot(surveypoint, number, point_type, label, name, draw, img) - for (N, E, D, num) in [(35975.37, 83018.21, 100,"177"), # Calculated from bearings + 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 (35600.00, 82050.00, 50, "35"), # From Auer map @@ -270,4 +300,5 @@ def prospecting_image(request, name): response = HttpResponse(content_type = "image/png") del draw img.save(response, "PNG") + return response \ No newline at end of file diff --git a/templates/base.html b/templates/base.html index 934bc1b..820a4ee 100644 --- a/templates/base.html +++ b/templates/base.html @@ -33,7 +33,7 @@ Scans | Drawing files | 290 (FGH) | - 291 (GSH) | + 291 (GSH) | 204 (Steinbrucken) |
diff --git a/templates/prospecting.html b/templates/prospecting.html index abf39f4..26de6fc 100644 --- a/templates/prospecting.html +++ b/templates/prospecting.html @@ -10,8 +10,9 @@

While this page is generated directly from the current data on all the caves listed, it also contains information which has not been curated and updated since about 1999. References to 'top camp' are likely to be to the 'old top camp' which was near the Schwarzmoossattel (the col) and not near Stone Bridge.

Open leads and prospects for discoveries should be looked for in the various current QMs systems instead. -

This report is a relic of the AERW 'spreadsheet+script' days before troggle, and was designed to be printed out to be taken into the field on paper. It should be retired when we eventually get the clickable map system working with entrances present and labelled (not yet in April 2021). -

The sub-ares names: '1a', '2a' etc. have not been in active use for some years as all exploration for at least the past two decades has been on the mid- to far-plateau. +

This report is a relic of the AERW 'spreadsheet+script' days before troggle, and was designed to be printed out to be taken into the field on paper. It should be retired as the clickable map system is now working with entrances present and labelled (though not yet hot-linked to the relevant cave and entrance descriptions). This replaces the old prospecting guide map based on /expofiles/location_maps/pguidemap.jpg. But a much better map to print out is the 2015 contour map with all the caves: /expofiles/location_maps/Expo 2015 Poster OverviewNorth.pdf. + +

The sub-areas names: '1a', '2a' etc. have not been in active use for some years as all exploration for at least the past two decades has been on the mid- to far-plateau.

Notes: