DEV Community

Dansk Træpleje
Dansk Træpleje

Posted on

Byg en enkel trælog med JavaScript og CSV

Et gammelt træ i haven kan ændre sig over tid. En gren bliver beskadiget. Kronen bliver tættere. Efter en storm opdager man måske noget, der ikke var der sidste år.

Men hvordan holder man styr på ændringerne?

Man kan selvfølgelig skrive noter i en bog. Som udvikler kan man også bygge et lille digitalt værktøj.

I denne guide laver vi en enkel trælog med JavaScript. Den gemmer observationer og eksporterer dem til en CSV-fil, som kan åbnes i et regneark.

Projektet kræver ingen database eller eksterne biblioteker.

Hvad skal træloggen kunne?

Vi holder løsningen enkel.

Hver observation skal indeholde:

  • Et unikt træ-ID
  • Dato for observationen
  • Træart
  • Placering
  • En kort beskrivelse
  • Status for videre opfølgning

Formålet er ikke at vurdere, om et træ er sikkert. Det kræver faglig viden og en undersøgelse på stedet.

Formålet er at samle oplysninger, så man lettere kan følge ændringer over tid.

1. Opret data i JavaScript

Vi begynder med et array af objekter.

const trees = [
  {
    id: "T001",
    date: "2026-11-01",
    species: "Eg",
    location: "Vejle",
    observation: "Død gren i kronen",
    status: "Afventer vurdering"
  },
  {
    id: "T002",
    date: "2026-11-05",
    species: "Bøg",
    location: "Vejle",
    observation: "Ingen synlige ændringer",
    status: "Registreret"
  },
  {
    id: "T003",
    date: "2026-11-08",
    species: "Ahorn",
    location: "Vejle",
    observation: "Gren beskadiget efter blæst",
    status: "Afventer vurdering"
  }
];

console.table(trees);
Enter fullscreen mode Exit fullscreen mode

Dataene er fiktive og bruges kun til at vise, hvordan systemet fungerer.

Hvert objekt beskriver én observation. Det gør oplysningerne nemme at læse, filtrere og eksportere.

I et større system ville det være bedre at gemme træerne og deres observationer hver for sig. Så kan hvert træ have mange registreringer over flere år.

2. Filtrer observationer, der kræver opfølgning

Nu vil vi finde de registreringer, hvor status er "Afventer vurdering".

JavaScripts filter() gør arbejdet enkelt.

const pending = trees.filter(
  tree => tree.status === "Afventer vurdering"
);

console.table(pending);
Enter fullscreen mode Exit fullscreen mode

Resultatet indeholder kun de observationer, som endnu ikke er markeret som gennemgået.

Det kan være nyttigt, hvis man registrerer mange træer i et boligområde eller en større have.

Vigtigt: Status er en administrativ markering. Den fortæller ikke, hvor farligt et træ er.

Et digitalt system bør aldrig automatisk erklære et træ sikkert eller usikkert på baggrund af få tekstfelter.

3. Eksporter data til CSV

CSV er et enkelt filformat, hvor data gemmes som tekst.

Filen kan åbnes i mange regnearksprogrammer og bruges til videre analyse.

Vi laver en funktion, der konverterer vores JavaScript-array til CSV med semikolon som separator.

function toCSV(data) {
  if (!data.length) return "";

  const headers = Object.keys(data[0]);

  const escapeCell = value => {
    const text = String(value ?? "");

    return '"' + text.replace(/"/g, '""') + '"';
  };

  const rows = data.map(item =>
    headers.map(key => escapeCell(item[key])).join(";")
  );

  return [
    headers.map(escapeCell).join(";"),
    ...rows
  ].join("\r\n");
}

const csv = toCSV(trees);

console.log(csv);
Enter fullscreen mode Exit fullscreen mode

Vi sætter anførselstegn omkring felterne og håndterer anførselstegn inde i teksten.

Det hjælper med at bevare data korrekt, når en observation eksempelvis indeholder et semikolon.

4. Gem CSV-filen i browseren

Hvis koden kører på en almindelig webside, kan vi give brugeren mulighed for at hente filen.

function downloadCSV(data) {
  const csv = toCSV(data);

  const blob = new Blob(
    ["\uFEFF" + csv],
    { type: "text/csv;charset=utf-8" }
  );

  const url = URL.createObjectURL(blob);

  const link = document.createElement("a");
  link.href = url;
  link.download = "traeobservationer.csv";

  document.body.appendChild(link);
  link.click();
  link.remove();

  URL.revokeObjectURL(url);
}

// Kald funktionen fra en brugerhandling:
// downloadCSV(trees);
Enter fullscreen mode Exit fullscreen mode

Vi bruger et Blob-objekt til at oprette filen.

Markeringen \uFEFF hjælper visse regnearksprogrammer med at genkende UTF-8, så danske bogstaver som æ, ø og å vises korrekt.

Funktionen er beregnet til en browser og skal kaldes fra eksempelvis et klik på en eksportknap.

Hvis man arbejder i Node.js, vil man normalt bruge en anden metode til at skrive filen.

5. Hvad kan man bygge videre på?

Det lille projekt kan udvides på flere måder.

Historik pr. træ

I stedet for at gemme én observation pr. træ kan man oprette et separat observationsarray med dato og træ-ID.

Det gør det muligt at sammenligne nye og gamle registreringer.

Fotodokumentation

Et billede kan hjælpe med at vise, hvordan en gren eller stamme har ændret sig.

Fotografier bør dog ikke bruges som eneste grundlag for en sikkerhedsvurdering.

Påmindelser

Systemet kan indeholde en planlagt dato for næste gennemgang.

Det kan hjælpe med administrationen af tilbagevendende opgaver.

Databeskyttelse

Hvis systemet gemmer kunders navne, adresser eller private billeder, skal man tænke på adgangskontrol og gældende regler for personoplysninger.

Et træ-ID og en grov lokationsangivelse kan være nok i en tidlig prototype.

Fra digital registrering til faglig træpleje

Et digitalt system kan hjælpe med at organisere information.

Men det kan ikke erstatte en arborists erfaring.

Et træ kan eksempelvis have indvendigt råd, som ikke fremgår af en simpel registrering. Større skader i kronen, røddernes tilstand og omgivelserne kræver en faglig vurdering.

Ved professionel træfældning i Vejle skal arbejdsmetoden også tilpasses træets størrelse og placering.

Dansk Træpleje arbejder med træfældning, beskæring og vurdering af træers tilstand. Du kan læse om deres arbejde med træfældning og arboristopgaver i Vejle.

Det viser forskellen mellem at registrere et problem og at vurdere, hvad der faktisk skal gøres.

Et lille projekt med praktisk værdi

Det behøver ikke være kompliceret at bygge et nyttigt værktøj.

Med et JavaScript-array, en filterfunktion og CSV-eksport har vi allerede et grundlag for en enkel digital trælog.

Det interessante begynder, når observationerne bliver gemt over tid.

En enkelt note fortæller, hvordan træet så ud på én dato.

En historik kan hjælpe med at vise, hvordan det har ændret sig.

Det er netop den slags små løsninger, hvor enkel software kan gøre almindeligt registreringsarbejde mere overskueligt.

Top comments (0)