Skip to content

Commit

Permalink
Merge pull request #803 from krebslw/fix_802
Browse files Browse the repository at this point in the history
Tilføj mulighed for at filtrere på præcisionsnivellement
  • Loading branch information
krebslw authored Jan 8, 2025
2 parents 7e393f0 + 168d704 commit 95209a7
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 9 deletions.
12 changes: 12 additions & 0 deletions fire/api/niv/udtræk_observationer.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,3 +174,15 @@ def observationer_inden_for_spredning(
for observation in list(resultatsæt)
if observation.spredning_afstand <= spredninger[observation.observationstypeid]
)


def filtrer_præcisionsnivellement(
observationer: list[Observation], præcisionsnivellement: int
) -> list[GeometriskKoteforskel]:
"""Filtrer observationer på præcisionsnivellement hvis de er af typen GeometriskKoteforskel"""
return [
o
for o in observationer
if isinstance(o, GeometriskKoteforskel) and
o.præcisionsnivellement == præcisionsnivellement
]
26 changes: 22 additions & 4 deletions fire/cli/niv/_udtræk_observationer.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
søgefunktioner_med_valgte_metoder,
brug_alle_på_alle,
observationer_inden_for_spredning,
filtrer_præcisionsnivellement,
timestamp,
ResultatSæt,
)
Expand Down Expand Up @@ -158,9 +159,20 @@ def valider_om_projekt_er_okay(ctx, param, value):
)
@click.option(
"--kotesystem",
default="DVR90",
type=click.Choice(KOTESYSTEMER.keys()),
help="Angiv andet kotesystem end DVR90",
required=False,
type=click.Choice(KOTESYSTEMER.keys()),
default="DVR90",
)
@click.option(
"--præc",
"-P",
help="""Hent observationer fra valgt præcisionsnivellement.
Vælges `0` udtrækkes kun observationer som ikke indgik i nogen af de 3 præcisionsnivellementer.
""",
required=False,
type=click.IntRange(0, 3),
)
@fire.cli.default_options()
def udtræk_observationer(
Expand All @@ -173,6 +185,7 @@ def udtræk_observationer(
til: dt.datetime,
alle_obs: bool,
kotesystem: str,
præc: int,
# These `kwargs` can be ignored for now, since they refer to default
# CLI options that are already in effect by use of call-back functions.
**kwargs,
Expand All @@ -194,8 +207,10 @@ def udtræk_observationer(
afstand til identer/geometri.
Det er kombinationen af valgt nøjagtighed og metode, der afgør valget af kriterium,
hvormed fundne observationer skal filtreres fra. Resultatet af søgningen er samtlige,
aktive observationer i databasen, der opfylder ovenstående.
hvormed fundne observationer skal filtreres fra. Derudover kan man vælge om
observationerne skal have indgået i et af de 3 landsdækkende præcisionsnivellementer.
Resultatet af søgningen er samtlige, aktive observationer i databasen, der opfylder
ovenstående.
Resultatet skrives til det eksisterende projekt-regneark i fanerne
"Observationer" og "Punktoversigt".
Expand Down Expand Up @@ -315,6 +330,9 @@ def udtræk_observationer(
fire.cli.print("Filtrér observationer")
observationer = list(observationer_inden_for_spredning(resultatsæt, spredning))

if præc:
observationer = filtrer_præcisionsnivellement(observationer, præc)

fire.cli.print("Indsaml opstillings- og sigtepunkter fra observationer")
opstillings_punkter = db.hent_punkter_fra_uuid_liste(
o.opstillingspunktid for o in observationer
Expand Down
6 changes: 1 addition & 5 deletions fire/io/regneark/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,6 @@
from fire.srid import SRID
from fire.io.regneark import arkdef
import fire.io.dataframe as frame
from fire.api.model.geometry import (
normaliser_lokationskoordinat,
)


# Annoteringstyper
Expand Down Expand Up @@ -121,8 +118,7 @@ def observationsrække(


def punkt_data(punkt: Punkt) -> dict:
WGS84_lonlat = punkt.geometri.koordinater
λ, φ = normaliser_lokationskoordinat(*WGS84_lonlat)
λ, φ = punkt.geometri.koordinater
return {
"Punkt": punkt.ident,
"Nord": φ,
Expand Down
30 changes: 30 additions & 0 deletions test/api/niv/test_udtræk_observationer.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
søgefunktioner_med_valgte_metoder,
brug_alle_på_alle,
observationer_inden_for_spredning,
filtrer_præcisionsnivellement,
timestamp,
punkter_til_geojson,
)
Expand Down Expand Up @@ -177,6 +178,35 @@ def test_observationer_inden_for_spredning():
assert result == expected, f"Forventede, at {result!r} var {expected!r}."


@pytest.mark.parametrize("præc, forventet_antal", [(0, 1), (1, 2), (2, 3), (3, 4)])
def test_filtrer_præcisionsnivellement(præc, forventet_antal):

tks = [TK() for _ in range(3)]

gks = [
GK(præcisionsnivellement=0),
GK(præcisionsnivellement=1),
GK(præcisionsnivellement=1),
GK(præcisionsnivellement=2),
GK(præcisionsnivellement=2),
GK(præcisionsnivellement=2),
GK(præcisionsnivellement=3),
GK(præcisionsnivellement=3),
GK(præcisionsnivellement=3),
GK(præcisionsnivellement=3),
]

alle = tks + gks

filtrerede = filtrer_præcisionsnivellement(tks, præc)

assert len(filtrerede) == 0

filtrerede = filtrer_præcisionsnivellement(alle, præc)

assert len(filtrerede) == forventet_antal


@pytest.mark.freeze_time("2021-11-01T21:21:00")
def test_timestamp_string():
fmt = "%Y-%m-%dT%H%M%S"
Expand Down

0 comments on commit 95209a7

Please sign in to comment.