diff options
-rw-r--r-- | core/models/caves.py | 29 | ||||
-rw-r--r-- | core/models/survex.py | 5 | ||||
-rw-r--r-- | core/views/statistics.py | 23 | ||||
-rw-r--r-- | templates/eastings.html | 36 |
4 files changed, 84 insertions, 9 deletions
diff --git a/core/models/caves.py b/core/models/caves.py index ea6fe9a..949c089 100644 --- a/core/models/caves.py +++ b/core/models/caves.py @@ -10,7 +10,7 @@ from django.template import loader import settings from troggle.core.models.logbooks import QM -from troggle.core.models.survex import SurvexStation +from troggle.core.models.survex import SurvexStation, utmToLatLng from troggle.core.models.troggle import DataIssue, TroggleModel from troggle.core.utils import TROG, writetrogglefile @@ -123,7 +123,7 @@ class Cave(TroggleModel): pass else: self.official_name.lower() - return Path(settings.URL_ROOT) / self.url # not good Django style.. NEEDS actual URL + return Path(settings.URL_ROOT) / self.url # not good Django style? NEEDS actual URL def url_parent(self): if self.url: @@ -232,7 +232,7 @@ class Entrance(TroggleModel): alt = models.TextField(blank=True, null=True) approach = models.TextField(blank=True, null=True) bearings = models.TextField(blank=True, null=True) - easting = models.TextField(blank=True, null=True) + easting = models.TextField(blank=True, null=True) # apparently? manually entered not calculated entrance_description = models.TextField(blank=True, null=True) exact_station = models.TextField(blank=True, null=True) explorers = models.TextField(blank=True, null=True) @@ -240,14 +240,14 @@ class Entrance(TroggleModel): findability = models.CharField(max_length=1, choices=FINDABLE_CHOICES, blank=True, null=True) findability_description = models.TextField(blank=True, null=True) lastvisit = models.TextField(blank=True, null=True) - lat_wgs84 = models.TextField(blank=True, null=True) + lat_wgs84 = models.TextField(blank=True, null=True) # manually entered not calculated location_description = models.TextField(blank=True, null=True) - long_wgs84 = models.TextField(blank=True, null=True) + long_wgs84 = models.TextField(blank=True, null=True) # manually entered not calculated map_description = models.TextField(blank=True, null=True) marking = models.CharField(max_length=2, choices=MARKING_CHOICES) marking_comment = models.TextField(blank=True, null=True) name = models.CharField(max_length=100, blank=True, null=True) - northing = models.TextField(blank=True, null=True) + northing = models.TextField(blank=True, null=True) # apparently? manually entered not calculated other_description = models.TextField(blank=True, null=True) other_station = models.TextField(blank=True, null=True) photo = models.TextField(blank=True, null=True) @@ -410,6 +410,12 @@ class Entrance(TroggleModel): return "" def latlong(self): + """Gets lat long assuming that it has to get it from the associated stations, but in fact the Entrance itself + has easting/northing and lat/long fields which perhaps we should try first... + """ + if self.easting and self.northing: + return utmToLatLng(33, float(self.easting), float(self.northing), northernHemisphere=True) + station = None if self.other_station: try: @@ -429,6 +435,17 @@ class Entrance(TroggleModel): if station: return station.latlong() + def lat(self): + if self.latlong(): + return self.latlong()[0] + else: + return None + + def long(self): + if self.latlong(): + return self.latlong()[1] + else: + return None def GetCaveLookup(): """A very relaxed way of finding probably the right cave given almost any string which might serve to identify it diff --git a/core/models/survex.py b/core/models/survex.py index 9a5145c..1c6a1fe 100644 --- a/core/models/survex.py +++ b/core/models/survex.py @@ -67,7 +67,10 @@ class SurvexStation(models.Model): def latlong(self): return utmToLatLng(33, self.x, self.y, northernHemisphere=True) - + def lat(self): + return utmToLatLng(33, self.x, self.y, northernHemisphere=True)[0] + def long(self): + return utmToLatLng(33, self.x, self.y, northernHemisphere=True)[1] import math def utmToLatLng(zone, easting, northing, northernHemisphere=True): # move this to utils.py ? diff --git a/core/views/statistics.py b/core/views/statistics.py index f056ab1..d2544e0 100644 --- a/core/views/statistics.py +++ b/core/views/statistics.py @@ -284,6 +284,29 @@ def eastings(request): if e.lat_wgs84 or e.long_wgs84: ents.append(e) + for e in ents: + try: + ts = e.tag_station + if ts: + e.tag_ts = SurvexStation.objects.get(name=ts) + print(f"{e} {e.tag_ts} {e.tag_ts.lat()} {e.tag_ts.long()}") + + es = e.exact_station + if es: + e.tag_es = SurvexStation.objects.get(name=es) + print(f"{e} {e.tag_es} {e.tag_es.lat()} {e.tag_es.long()}") + + os = e.other_station + if os: + e.tag_os = SurvexStation.objects.get(name=os) + print(f"{e} {e.tag_os} {e.tag_os.lat()} {e.tag_os.long()}") + + except: + e.tag_ss = None + e.tag_es = None + e.tag_os = None + # print(f"exception for {e}") + stations = SurvexStation.objects.all() return render(request, "eastings.html", {"ents": ents, "stations": stations}) diff --git a/templates/eastings.html b/templates/eastings.html index 3def5c3..6aa4c6d 100644 --- a/templates/eastings.html +++ b/templates/eastings.html @@ -29,7 +29,7 @@ th, td { padding-right: 5px; </style> <table> -<tr><th>Cave</th><th>Entrance</th><th>Easting</th><th>Northing</th><th>Lat</th><th>Long</th><th>tag</th><th>tag exact</th><th>tag other</th><th>slug</th></tr> +<tr><th>Cave</th><th>Entrance</th><th>best Easting</th><th>best Northing</th><th>GPS Lat</th><th>GPS Long</th><th>tag</th><th>tag exact</th><th>tag other</th><th>slug</th></tr> {% for ent in ents %} <tr> <td style="text-align:left"> @@ -59,6 +59,35 @@ th, td { </tr> {% endfor %} </table> +<p>and now with the locations of the survey stations. All as UTM eatings, norhtings: +<table> +<tr><th>Cave</th><th>best Lat</th><th>best Long</th><th>tag</th><th>tag Lat</th><th>tag Long</th><th>tag exact</th><th>exact Lat</th><th>exact Long</th><th>tag other</th><th>other Lat</th><th>other Long</th></tr> +{% for ent in ents %} +<tr> + <td style="text-align:left"> + {% for c in ent.cavelist %} + <a href="/{{c.url}}"> + {% if c.official_name %} + {{c.official_name|safe}} + {% else %} + <em>{{c|safe}}</em> + {% endif %}</a><br> + {% endfor %}</td> + + <td style="text-align:right">{{ent.lat|floatformat:6}}</td> + <td style="text-align:right">{{ent.long|floatformat:6}}</td> + <td style="text-align:right">{{ent.tag_station}}</td> + <td style="text-align:right">{{ent.tag_ts.lat|floatformat:6}}</td> + <td style="text-align:right">{{ent.tag_ts.long|floatformat:6}}</td> + <td style="text-align:right">{{ent.exact_station}}</td> + <td style="text-align:right">{{ent.tag_es.lat|floatformat:6}}</td> + <td style="text-align:right">{{ent.tag_es.long|floatformat:6}}</td> + <td style="text-align:right">{{ent.other_station}}</td> + <td style="text-align:right">{{ent.tag_os.lat|floatformat:6}}</td> + <td style="text-align:right">{{ent.tag_os.long|floatformat:6}}</td> + </tr> +{% endfor %} +</table> <p>But the Entrances - the objects in the troggle system - are not properly connected to the dataset which is the combined set of survex data. They are only linked - and only implicitly - by the tag name. The data in the table below is calculated directly from the assemblage of survex files, including fixed point files, and is probably 'correct'. @@ -70,12 +99,15 @@ the assemblage of survex files, including fixed point files, and is probably 'co <a href="/handbook/survey/coord.htm">Basic Coordinate Systems</a>. <table cellpadding="6" cellspacing="8"> -<tr><th>Survex Station</th><th>x</th><th>y</th></tr> +<tr><th>Survex Station</th><th>x</th><th>y</th><th>lat.</th><th>long.</th></tr> {% for s in stations %} <tr> <td style="text-align:left; width:240px"> {{s.name|safe}} </td> <td style="text-align:right; width:90px"> {{s.x|floatformat:2}} </td> <td style="text-align:right; width:90px"> {{s.y|floatformat:2}} </td> + <td style="text-align:right; width:90px"> {{s.lat|floatformat:6}} </td> + <td style="text-align:right; width:90px"> {{s.long|floatformat:6}} </td> + </tr> {% empty %} <td colspan="3"> NO STATION DATA - This is due to survex (cavern) failing on the entire dataset. |