<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dansk Træpleje</title>
    <description>The latest articles on DEV Community by Dansk Træpleje (@dansktraepleje).</description>
    <link>https://dev.to/dansktraepleje</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4238853%2F7e4a7659-dc50-4b30-b620-5ff9434c0398.jpg</url>
      <title>DEV Community: Dansk Træpleje</title>
      <link>https://dev.to/dansktraepleje</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dansktraepleje"/>
    <language>en</language>
    <item>
      <title>Byg en enkel trælog med JavaScript og CSV</title>
      <dc:creator>Dansk Træpleje</dc:creator>
      <pubDate>Wed, 11 Nov 2026 10:29:20 +0000</pubDate>
      <link>https://dev.to/dansktraepleje/byg-en-enkel-traelog-med-javascript-og-csv-2fn1</link>
      <guid>https://dev.to/dansktraepleje/byg-en-enkel-traelog-med-javascript-og-csv-2fn1</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1zwddx3dgb9j7wro9tq9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1zwddx3dgb9j7wro9tq9.jpg" alt=" " width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Men hvordan holder man styr på ændringerne?&lt;/p&gt;

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

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Projektet kræver ingen database eller eksterne biblioteker.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hvad skal træloggen kunne?
&lt;/h2&gt;

&lt;p&gt;Vi holder løsningen enkel.&lt;/p&gt;

&lt;p&gt;Hver observation skal indeholde:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Et unikt træ-ID&lt;/li&gt;
&lt;li&gt;Dato for observationen&lt;/li&gt;
&lt;li&gt;Træart&lt;/li&gt;
&lt;li&gt;Placering&lt;/li&gt;
&lt;li&gt;En kort beskrivelse&lt;/li&gt;
&lt;li&gt;Status for videre opfølgning&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Formålet er at samle oplysninger, så man lettere kan følge ændringer over tid.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Opret data i JavaScript
&lt;/h2&gt;

&lt;p&gt;Vi begynder med et array af objekter.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;trees&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"T001"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"2026-11-01"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;species&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Eg"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Vejle"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;observation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Død gren i kronen"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Afventer vurdering"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"T002"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"2026-11-05"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;species&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Bøg"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Vejle"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;observation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Ingen synlige ændringer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Registreret"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"T003"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"2026-11-08"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;species&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Ahorn"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Vejle"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;observation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Gren beskadiget efter blæst"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Afventer vurdering"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nb"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;trees&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dataene er fiktive og bruges kun til at vise, hvordan systemet fungerer.&lt;/p&gt;

&lt;p&gt;Hvert objekt beskriver én observation. Det gør oplysningerne nemme at læse, filtrere og eksportere.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Filtrer observationer, der kræver opfølgning
&lt;/h2&gt;

&lt;p&gt;Nu vil vi finde de registreringer, hvor status er "Afventer vurdering".&lt;/p&gt;

&lt;p&gt;JavaScripts &lt;code&gt;filter()&lt;/code&gt; gør arbejdet enkelt.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;pending&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;trees&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;tree&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s2"&gt;"Afventer vurdering"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nb"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pending&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resultatet indeholder kun de observationer, som endnu ikke er markeret som gennemgået.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Vigtigt:&lt;/strong&gt; Status er en administrativ markering. Den fortæller ikke, hvor farligt et træ er.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  3. Eksporter data til CSV
&lt;/h2&gt;

&lt;p&gt;CSV er et enkelt filformat, hvor data gemmes som tekst.&lt;/p&gt;

&lt;p&gt;Filen kan åbnes i mange regnearksprogrammer og bruges til videre analyse.&lt;/p&gt;

&lt;p&gt;Vi laver en funktion, der konverterer vores JavaScript-array til CSV med semikolon som separator.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;toCSV&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;escapeCell&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s1"&gt;'"'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="s2"&gt;"/g, '""') + '"&lt;/span&gt;&lt;span class="s1"&gt;';
  };

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

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

const csv = toCSV(trees);

console.log(csv);
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vi sætter anførselstegn omkring felterne og håndterer anførselstegn inde i teksten.&lt;/p&gt;

&lt;p&gt;Det hjælper med at bevare data korrekt, når en observation eksempelvis indeholder et semikolon.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Gem CSV-filen i browseren
&lt;/h2&gt;

&lt;p&gt;Hvis koden kører på en almindelig webside, kan vi give brugeren mulighed for at hente filen.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;downloadCSV&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;toCSV&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;blob&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Blob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"\uFEFF"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"text/csv;charset=utf-8"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createObjectURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;blob&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;link&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"a"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;link&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;href&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;link&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;download&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"traeobservationer.csv"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;link&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;link&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;link&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="no"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;revokeObjectURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Kald funktionen fra en brugerhandling:&lt;/span&gt;
&lt;span class="c1"&gt;// downloadCSV(trees);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vi bruger et &lt;code&gt;Blob&lt;/code&gt;-objekt til at oprette filen.&lt;/p&gt;

&lt;p&gt;Markeringen &lt;code&gt;\uFEFF&lt;/code&gt; hjælper visse regnearksprogrammer med at genkende UTF-8, så danske bogstaver som æ, ø og å vises korrekt.&lt;/p&gt;

&lt;p&gt;Funktionen er beregnet til en browser og skal kaldes fra eksempelvis et klik på en eksportknap.&lt;/p&gt;

&lt;p&gt;Hvis man arbejder i Node.js, vil man normalt bruge en anden metode til at skrive filen.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Hvad kan man bygge videre på?
&lt;/h2&gt;

&lt;p&gt;Det lille projekt kan udvides på flere måder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Historik pr. træ&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I stedet for at gemme én observation pr. træ kan man oprette et separat observationsarray med dato og træ-ID.&lt;/p&gt;

&lt;p&gt;Det gør det muligt at sammenligne nye og gamle registreringer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fotodokumentation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Et billede kan hjælpe med at vise, hvordan en gren eller stamme har ændret sig.&lt;/p&gt;

&lt;p&gt;Fotografier bør dog ikke bruges som eneste grundlag for en sikkerhedsvurdering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Påmindelser&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Systemet kan indeholde en planlagt dato for næste gennemgang.&lt;/p&gt;

&lt;p&gt;Det kan hjælpe med administrationen af tilbagevendende opgaver.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Databeskyttelse&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Et træ-ID og en grov lokationsangivelse kan være nok i en tidlig prototype.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fra digital registrering til faglig træpleje
&lt;/h2&gt;

&lt;p&gt;Et digitalt system kan hjælpe med at organisere information.&lt;/p&gt;

&lt;p&gt;Men det kan ikke erstatte en arborists erfaring.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Ved professionel træfældning i Vejle skal arbejdsmetoden også tilpasses træets størrelse og placering.&lt;/p&gt;

&lt;p&gt;Dansk Træpleje arbejder med træfældning, beskæring og vurdering af træers tilstand. Du kan læse om deres arbejde med &lt;a href="https://dansktraepleje.dk/vejle/" rel="noopener noreferrer"&gt;træfældning og arboristopgaver i Vejle&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Det viser forskellen mellem at registrere et problem og at vurdere, hvad der faktisk skal gøres.&lt;/p&gt;

&lt;h2&gt;
  
  
  Et lille projekt med praktisk værdi
&lt;/h2&gt;

&lt;p&gt;Det behøver ikke være kompliceret at bygge et nyttigt værktøj.&lt;/p&gt;

&lt;p&gt;Med et JavaScript-array, en filterfunktion og CSV-eksport har vi allerede et grundlag for en enkel digital trælog.&lt;/p&gt;

&lt;p&gt;Det interessante begynder, når observationerne bliver gemt over tid.&lt;/p&gt;

&lt;p&gt;En enkelt note fortæller, hvordan træet så ud på én dato.&lt;/p&gt;

&lt;p&gt;En historik kan hjælpe med at vise, hvordan det har ændret sig.&lt;/p&gt;

&lt;p&gt;Det er netop den slags små løsninger, hvor enkel software kan gøre almindeligt registreringsarbejde mere overskueligt.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>data</category>
    </item>
  </channel>
</rss>
