SDFIdk / FIRE

🔥 FIRE - FIkspunktREgister
https://sdfidk.github.io/FIRE/
MIT License
4 stars 8 forks source link

Forbedringer til fire niv udtræk-observationer #781

Open krebslw opened 2 weeks ago

krebslw commented 2 weeks ago

Der er flere ting ved udtræk-observationer som kan være bedre, herunder oplistet:

  1. --buffer virker ikke efter hensigten Det er meningen at enheden på bufferafstanden skal være i [m]. Fx udtrækker fire niv udtræk-observationer TEST_SAG GRNA --buffer 1 20701 observationer, se figur: billede Den nuværende implementering definerer funktionen polygoner til at omdanne en liste af punkter og bufferafstanden til en liste af geometrier (cirkler). Der bliver ikke gjort noget for at omregne afstande til meter, så afstanden bliver ved med at være i grader. Kan fixes ved at bruge punktets utm-koordinater i stedet.

    def polygoner(punkter: Iterable[Punkt], buffer: int) -> Iterator[Geometry]:
    """Returnerer en søgeklar liste med Geometry-instanser til søgning i databasen."""
    # Hent punkternes WGS84-koordinater:
    # Geometri-koordinaterne er altid i WGS84.
    koordinatsæt = (punkt.geometri.koordinater for punkt in punkter)
    
    # Opbyg geometri for punkt-koordinater til søgning.
    shapely_punkter = (geometry.Point(*koordinater) for koordinater in koordinatsæt)
    
    # Lav den endelige søge-geometri ved at bruge den angivne buffer som
    # radius i en forsimplet cirkel (polygon) omkring koordinaterne.
    shapely_polygoner = (punkt.buffer(buffer) for punkt in shapely_punkter)
    
    # Tilføj polygonerne for de enkelte identer til geometrier, der skal søges i nærheden af.
    # Opret samtidig et geometri-objekt med hver søge-geometris Well-Known Text (WKT).
    return (Geometry(polygon.wkt) for polygon in shapely_polygoner)
  2. Filtrering på DVR90 er unødvendig. Se kodestump nedenfor.

    1. For det første ligger der mange observationer som slet ikke kan mappes til en koordinat (via beregninger) og dermed kan filtering på srid ikke foretages. Dette er gældende for ca 100 000 ud af 243 000 observationer af typen geometrisk eller trigonometrisk. Disse observationer vil være umulige at fremsøge ud fra punktets ident alene (dog er det stadig muligt at finde dem på anden vis, se næste punkt. )
    2. For det andet bliver der alligevel ikke filtreret på DVR90 når man søger via geometrier eller buffer-afstand, så i bedste fald er filtrering på DVR90 inkonsistent.
          # Forbereder søgefunktion med argumenter fastsat.
          DVR90 = db.hent_srid(SRID.DVR90)
          funktion = db.hent_observationer_fra_opstillingspunkt
          fastholdte_argumenter = dict(
              tid_fra=fra,
              tid_til=til,
              srid=DVR90,
              kun_aktive=True,
              sigtepunkter=punkter,
          )

      Dette kan fikses ved bare at fjerne argumentet srid=DVR90,

  3. Skrivning til regneark gøres ikke på samme måde som i de andre niv-underkommandoer Det gøres med funktionen skriv_data. I alle andre niv-kommandoer anvendes funktionen skriv_ark. Jeg ved godt der lavet en indsats for at refaktorisere en del af regnearks-funktionaliteten til at ligge i fire.io.regnerk , så måske hører dette til i #498 . For nu fejler det i hvert fald grimt hvis man fx kører fire niv udtræk-observationer og samtidig har regnearket åbent, hvilket det ikke gør når man bruger de andre niv-kommandoer.

krebslw commented 1 day ago

Endnu ét punkt til ønskelisten efter snak med @Aslak-Meister:

  1. Tilføj mulighed for at filtrere MGL-observationer på attributten "præcisionsnivellement", for nemt at kunne trække observationer ud som indgik i ét at de tre landsdækkende nivellementer.