From 1c80a764a32711d72d26073a63e4db798966de3a Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Fri, 25 Sep 2026 13:10:14 -0500 Subject: [PATCH 1/8] wire up django view and template --- ohmg/core/urls.py | 2 ++ ohmg/core/views.py | 10 ++++++++++ ohmg/frontend/templates/core/layers.html | 13 +++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 ohmg/frontend/templates/core/layers.html diff --git a/ohmg/core/urls.py b/ohmg/core/urls.py index 127d894c..5742012d 100644 --- a/ohmg/core/urls.py +++ b/ohmg/core/urls.py @@ -2,6 +2,7 @@ from .views import ( DocumentView, + LayerListView, LayersetDerivativeView, LayerSetView, LayerView, @@ -38,6 +39,7 @@ kwargs={"resource": "layer"}, name="layer_derivative", ), + path("layers/", LayerListView.as_view(), name="layer_list"), path("layerset/", LayerSetView.as_view(), name="layerset_view"), path("layerset/", LayerSetView.as_view(), name="layerset_view"), ] diff --git a/ohmg/core/views.py b/ohmg/core/views.py index fe6fee49..83957b12 100644 --- a/ohmg/core/views.py +++ b/ohmg/core/views.py @@ -76,6 +76,16 @@ def get(self, request): return render(request, "core/maps.html", context=context_dict) +class LayerListView(View): + def get(self, request): + context_dict = { + "LAYERS_PARAMS": { + "CONTEXT": generate_ohmg_context(request), + } + } + return render(request, "core/layers.html", context=context_dict) + + class MapView(View): @time_this_function def get(self, request, identifier): diff --git a/ohmg/frontend/templates/core/layers.html b/ohmg/frontend/templates/core/layers.html new file mode 100644 index 00000000..b91e18ba --- /dev/null +++ b/ohmg/frontend/templates/core/layers.html @@ -0,0 +1,13 @@ +{% extends 'base.html' %} +{% load i18n %} + +{% block title %}Layers | {{ block.super}} {% endblock title %} + +{% block main_content %} + +{% include '_titlebar.html' with title="Layers" subtitle="see also: maps, documents, regions, layersets, and locales" lead_icon="layer" %} + +{{ LAYERS_PARAMS|json_script:'layers-props'}} +{% include '_svelte_component.html' with component_name='Layers' %} + +{% endblock %} From b762214262821c8c9cfa819646cddb73920d5a4f Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Mon, 28 Sep 2026 23:33:30 -0500 Subject: [PATCH 2/8] add normalized versions of skew and anisotropy --- ...r_anisotropy_layer_anisotropy_norm_and_more.py} | 12 +++++++++++- ohmg/core/models/layer.py | 14 +++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) rename ohmg/core/migrations/{0016_layer_anisotropy_layer_gcp_count_layer_rmse_and_more.py => 0016_layer_anisotropy_layer_anisotropy_norm_and_more.py} (73%) diff --git a/ohmg/core/migrations/0016_layer_anisotropy_layer_gcp_count_layer_rmse_and_more.py b/ohmg/core/migrations/0016_layer_anisotropy_layer_anisotropy_norm_and_more.py similarity index 73% rename from ohmg/core/migrations/0016_layer_anisotropy_layer_gcp_count_layer_rmse_and_more.py rename to ohmg/core/migrations/0016_layer_anisotropy_layer_anisotropy_norm_and_more.py index cb13c468..1e14774b 100644 --- a/ohmg/core/migrations/0016_layer_anisotropy_layer_gcp_count_layer_rmse_and_more.py +++ b/ohmg/core/migrations/0016_layer_anisotropy_layer_anisotropy_norm_and_more.py @@ -1,4 +1,4 @@ -# Generated by Django 4.2.27 on 2026-09-24 14:57 +# Generated by Django 4.2.27 on 2026-09-28 21:43 from django.db import migrations, models @@ -15,6 +15,11 @@ class Migration(migrations.Migration): name='anisotropy', field=models.FloatField(blank=True, null=True), ), + migrations.AddField( + model_name='layer', + name='anisotropy_norm', + field=models.FloatField(blank=True, null=True), + ), migrations.AddField( model_name='layer', name='gcp_count', @@ -30,6 +35,11 @@ class Migration(migrations.Migration): name='skew', field=models.FloatField(blank=True, null=True), ), + migrations.AddField( + model_name='layer', + name='skew_norm', + field=models.FloatField(blank=True, null=True), + ), migrations.AddField( model_name='layer', name='transformation', diff --git a/ohmg/core/models/layer.py b/ohmg/core/models/layer.py index c7ef4f26..c30e1f5c 100644 --- a/ohmg/core/models/layer.py +++ b/ohmg/core/models/layer.py @@ -86,7 +86,9 @@ class Meta: transformation = models.CharField(null=True, blank=True) rmse = models.FloatField("RMSE", null=True, blank=True) skew = models.FloatField(null=True, blank=True) + skew_norm = models.FloatField(null=True, blank=True) anisotropy = models.FloatField(null=True, blank=True) + anisotropy_norm = models.FloatField(null=True, blank=True) def __str__(self): return self.title @@ -138,12 +140,22 @@ def update_georeferencing_measures(self): rmse, _, _, skew, aniso = gcp_group.get_georeferencer().get_measures() self.rmse = rmse self.skew = skew + self.skew_norm = abs(skew) self.anisotropy = aniso + self.anisotropy_norm = aniso if aniso >= 1 or aniso == 0 else round(1 / aniso, 3) self.transformation = gcp_group.transformation self.gcp_count = gcp_group.gcps.count() self.save( skip_map_lookup_update=True, - update_fields=["rmse", "skew", "anisotropy", "transformation", "gcp_count"], + update_fields=[ + "rmse", + "skew", + "skew_norm", + "anisotropy", + "anisotropy_norm", + "transformation", + "gcp_count", + ], ) def create_xyz_url(self) -> Union[str, None]: From de2b20a7471d162f826cd51ffb2c43bdb605e5cd Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Mon, 28 Sep 2026 23:34:30 -0500 Subject: [PATCH 3/8] update labels and tooltip --- .../interfaces/Georeferencer.svelte | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/ohmg/frontend/svelte_components/src/components/interfaces/Georeferencer.svelte b/ohmg/frontend/svelte_components/src/components/interfaces/Georeferencer.svelte index 49a850fd..ff038729 100644 --- a/ohmg/frontend/svelte_components/src/components/interfaces/Georeferencer.svelte +++ b/ohmg/frontend/svelte_components/src/components/interfaces/Georeferencer.svelte @@ -1168,28 +1168,31 @@