From 017f916ef922bd11b1e745ccc4fa4bccd843f1d4 Mon Sep 17 00:00:00 2001 From: Philip Sargent Date: Sat, 16 Sep 2023 22:46:17 +0300 Subject: [PATCH] Entrance locations showing lat long screwups --- core/models/caves.py | 29 +++++++++++++++++++++++------ core/models/survex.py | 5 ++++- core/views/statistics.py | 23 +++++++++++++++++++++++ templates/eastings.html | 36 ++++++++++++++++++++++++++++++++++-- 4 files changed, 84 insertions(+), 9 deletions(-) diff --git a/core/models/caves.py b/core/models/caves.py index ea6fe9abe..949c089aa 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 9a5145cab..1c6a1fe3b 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 f056ab1e6..d2544e0ec 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 3def5c3a8..6aa4c6d86 100644 --- a/templates/eastings.html +++ b/templates/eastings.html @@ -29,7 +29,7 @@ th, td { padding-right: 5px; - + {% for ent in ents %} {% endfor %}
CaveEntranceEastingNorthingLatLongtagtag exacttag otherslug
CaveEntrancebest Eastingbest NorthingGPS LatGPS Longtagtag exacttag otherslug
@@ -59,6 +59,35 @@ th, td {
+

and now with the locations of the survey stations. All as UTM eatings, norhtings: + + +{% for ent in ents %} + + + + + + + + + + + + + + + +{% endfor %} +
Cavebest Latbest Longtagtag Lattag Longtag exactexact Latexact Longtag otherother Latother Long
+ {% for c in ent.cavelist %} + + {% if c.official_name %} + {{c.official_name|safe}} + {% else %} + {{c|safe}} + {% endif %}
+ {% endfor %}
{{ent.lat|floatformat:6}}{{ent.long|floatformat:6}}{{ent.tag_station}}{{ent.tag_ts.lat|floatformat:6}}{{ent.tag_ts.long|floatformat:6}}{{ent.exact_station}}{{ent.tag_es.lat|floatformat:6}}{{ent.tag_es.long|floatformat:6}}{{ent.other_station}}{{ent.tag_os.lat|floatformat:6}}{{ent.tag_os.long|floatformat:6}}

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 Basic Coordinate Systems. - + {% for s in stations %} + + + {% empty %}
Survex Stationxy
Survex Stationxylat.long.
{{s.name|safe}} {{s.x|floatformat:2}} {{s.y|floatformat:2}} {{s.lat|floatformat:6}} {{s.long|floatformat:6}}
NO STATION DATA - This is due to survex (cavern) failing on the entire dataset.