Пример #1
0
def punkt(ident: str, **kwargs) -> None:
    """
    Vis al tilgængelig information om et fikspunkt

    IDENT kan være enhver form for navn et punkt er kendt som, blandt andet
    GNSS stationsnummer, G.I.-nummer, refnr, landsnummer osv.

    Søgningen er versalfølsom.
    """
    pi = aliased(PunktInformation)
    pit = aliased(PunktInformationType)

    try:
        punktinfo = (firedb.session.query(pi).filter(
            pit.name.startswith("IDENT:"),
            or_(
                pi.tekst == ident,
                pi.tekst.like(f"FO  %{ident}"),
                pi.tekst.like(f"GL  %{ident}"),
            ),
        ).all())
        n = len(punktinfo)
        if n == 0:
            raise NoResultFound

        for i in range(n):
            punkt_rapport(punktinfo[i].punkt, ident, i + 1, n)
    except NoResultFound:
        try:
            punkt = firedb.hent_punkt(ident)
        except NoResultFound:
            firecli.print(f"Error! {ident} not found!", fg="red", err=True)
            sys.exit(1)
        punkt_rapport(punkt, ident, 1, 1)
Пример #2
0
def infotype(infotype: str, **kwargs):
    """
    Information om en punktinfotype.

    Eksempler på punktinfotyper: IDENT:GNSS, AFM:diverse, ATTR:beskrivelse
    """
    try:
        pit = firedb.hent_punktinformationtype(infotype)
        if pit is None:
            raise NoResultFound
    except NoResultFound:
        firecli.print(f"Error! {infotype} not found!", fg="red", err=True)
        sys.exit(1)

    firecli.print("--- PUNKTINFOTYPE ---", bold=True)
    firecli.print(f"  Name        :  {pit.name}")
    firecli.print(f"  Description :  {pit.beskrivelse}")
    firecli.print(f"  Type        :  {pit.anvendelse}")
Пример #3
0
def srid(srid: str, **kwargs):
    """
    Information om et givent SRID (Spatial Reference ID)

    Eksempler på SRID'er: EPSG:25832, DK:SYS34, TS:81013
    """
    srid_name = srid

    try:
        srid = firedb.hent_srid(srid_name)
    except NoResultFound:
        firecli.print(f"Error! {srid_name} not found!", fg="red", err=True)
        sys.exit(1)

    firecli.print("--- SRID ---", bold=True)
    firecli.print(f" Name:       :  {srid.name}")
    firecli.print(f" Description :  {srid.beskrivelse}")
Пример #4
0
def punkt_rapport(punkt: Punkt, ident: str, i: int, n: int) -> None:
    """
    Rapportgenerator for funktionen 'punkt' nedenfor.
    """
    firecli.print("")
    firecli.print("-" * 80)
    firecli.print(f" PUNKT {ident} ({i}/{n})", bold=True)
    firecli.print("-" * 80)
    firecli.print(f"  FIRE ID             :  {punkt.id}")
    firecli.print(f"  Oprettelsesdato     :  {punkt.registreringfra}")
    firecli.print("")

    firecli.print("--- PUNKTINFO ---", bold=True)
    for info in punkt.punktinformationer:
        if info.registreringtil is not None:
            continue
        tekst = info.tekst or ""
        # efter mellemrum rykkes teksten ind på linje med resten af
        # attributteksten
        tekst = tekst.replace("\n", "\n" + " " * 25).replace("\r", "")
        tal = info.tal or ""
        firecli.print(f"  {info.infotype.name:20}:  {tekst}{tal}")
    firecli.print("")

    firecli.print("--- GEOMETRI ---", bold=True)
    for geometriobjekt in punkt.geometriobjekter:
        firecli.print(f"  {geometriobjekt.geometri}")
        firecli.print("")

    firecli.print("--- KOORDINATER ---", bold=True)
    punkt.koordinater.sort(key=lambda x:
                           (x.srid.name, x.t.strftime('%Y-%m-%dT%H:%M')),
                           reverse=True)
    for koord in punkt.koordinater:
        if koord.registreringtil is not None:
            firecli.print(". " + koordinat_linje(koord), fg="red")
        else:
            firecli.print("* " + koordinat_linje(koord), fg="green")
    firecli.print("")

    firecli.print("--- OBSERVATIONER ---", bold=True)
    n_obs_til = len(punkt.observationer_til)
    n_obs_fra = len(punkt.observationer_fra)
    firecli.print(f"  Antal observationer til:  {n_obs_til}")
    firecli.print(f"  Antal observationer fra:  {n_obs_fra}")

    if n_obs_fra + n_obs_til > 0:
        min_obs = datetime.datetime(9999, 12, 31)
        max_obs = datetime.datetime(1, 1, 1)
        for obs in itertools.chain(punkt.observationer_til,
                                   punkt.observationer_fra):
            if obs.registreringfra < min_obs:
                min_obs = obs.registreringfra
            if obs.registreringfra > max_obs:
                max_obs = obs.registreringfra

        firecli.print(f"  Ældste observation     :  {min_obs}")
        firecli.print(f"  Nyeste observation     :  {max_obs}")

    firecli.print("")
Пример #5
0
def punkt_rapport(punkt: Punkt, ident: str, i: int, n: int) -> None:
    """
    Rapportgenerator for funktionen 'punkt' nedenfor.
    """
    firecli.print("")
    firecli.print("-"*80)
    firecli.print(f" PUNKT {ident} ({i}/{n})", bold=True)
    firecli.print("-"*80)
    firecli.print(f"  FIRE ID             :  {punkt.id}")
    firecli.print(f"  Oprettelsesdato     :  {punkt.registreringfra}")
    firecli.print("")

    firecli.print("--- PUNKTINFO ---", bold=True)
    for info in punkt.punktinformationer:
        if info.registreringtil is not None:
            continue
        tekst = info.tekst or ""
        tekst = tekst.replace("\n", "").replace("\r", "")
        tal = info.tal or ""
        firecli.print(f"  {info.infotype.name:20}:  {tekst:.80}{tal}")
    firecli.print("")

    firecli.print("--- KOORDINATER ---", bold=True)
    punkt.koordinater.sort(key=lambda x: x.srid.name, reverse=False)
    for koord in punkt.koordinater:
        line = f"{koord.t.strftime('%Y-%m-%d')}   {koord.srid.name:<15.15} {koord.x}, {koord.y}, {koord.z}"
        if koord.registreringtil is not None:
            firecli.print("     "+line, fg="red")
        else:
            firecli.print("   * "+line, fg="green")
    firecli.print("")

    firecli.print("--- OBSERVATINONER ---", bold=True)
    n_obs_til = len(punkt.observationer_til)
    n_obs_fra = len(punkt.observationer_fra)
    firecli.print(f"Antal observationer til:  {n_obs_til}")
    firecli.print(f"Antal observationer fra:  {n_obs_fra}")

    if n_obs_fra + n_obs_til > 0:
        min_obs = datetime.datetime(9999,12,31)
        max_obs = datetime.datetime(1,1,1)
        for obs in itertools.chain(punkt.observationer_til, punkt.observationer_fra):
            if obs.registreringfra < min_obs:
                min_obs = obs.registreringfra
            if obs.registreringfra > max_obs:
                max_obs = obs.registreringfra

        firecli.print(f"Ældste observation     :  {min_obs}")
        firecli.print(f"Nyeste observation     :  {max_obs}")

    firecli.print("")