Gallring

Verktyg för att läsa HPR-filer

4 inlägg 4445 visningar 3 följer Svara, dela mm...  
Malwa
Avatar Fallback

Verktyg för att läsa HPR-filer

Arny  
#854380I poddavsnitt 211 pratades det en del om vikten av att få fram produktionsdata från skördaren för att kunna följa upp att åtgärderna har blivit som överenskommet. Har en hpr-fil från en gallring men har lite svårt att veta hur jag ska läsa den på ett effektivt sätt. Det jag vill ha ut är volymuttaget i en gallring fördelat per avdelning. Finns det något verktyg för att plotta ut koordinaterna på en karta och summera volymuttaget?



   TS
Malwa Combi i 5:e generationen
Användarvisningsbild

Re: Verktyg för att läsa HPR-filer

Fredrik Reuter  
#855525Hej,
Det finns inget öppet verktyg mig veterligen idag.
Men jag håller på att bygga/labba lite med detta så du kan skicka filen till mig på mail så kan jag kolla åt dig. Mailen finns längst ner på sidan.

Avatar Fallback

Re: Verktyg för att läsa HPR-filer

Nils22  
#862679Är det någon som har en HPR-fil som jag kan prova att läsa in? Antingen rådata eller en översatt till något GIS-format?

Användarvisningsbild

Re: Verktyg för att läsa HPR-filer

Humlas  
#903894
Arny skrev:I poddavsnitt 211 pratades det en del om vikten av att få fram produktionsdata från skördaren för att kunna följa upp att åtgärderna har blivit som överenskommet. Har en hpr-fil från en gallring men har lite svårt att veta hur jag ska läsa den på ett effektivt sätt. Det jag vill ha ut är volymuttaget i en gallring fördelat per avdelning. Finns det något verktyg för att plotta ut koordinaterna på en karta och summera volymuttaget?


Fick HPR filen från vår avverkning i höstas.

Med lite ChatGPT var det ganska enkelt att generera upp ett R script som läser filen.

Fick till en karta med varje träd och dess m3fub volym, men det går att hämta ut mycket mer

http://www.rackstad.se/avverkning_mjogsjon.html (gör sig bäst på dator)

1768291958_skaermbild_2026-01-13_091210.jpg


library(xml2)
library(dplyr)
library(tibble)
library(leaflet)

hpr_file <- "C:\\Working\\R\\avverkning.hpr"
doc <- read_xml(hpr_file)

# Alla stammar (namespace-oberoende)
stems <- xml_find_all(doc, ".//*[local-name()='Stem']")

# Hjälp: hämta första text-match via local-name()
get_text_ln <- function(node, name) {
x <- xml_find_first(node, paste0(".//*[local-name()='", name, "']"))
if (inherits(x, "xml_missing")) return(NA_character_)
xml_text(x)
}

# m3sub per stam: summera alla <LogVolume ...> där logVolumeCategory="m3sub"
get_m3sub_sum <- function(stem) {
nodes <- xml_find_all(stem, ".//*[local-name()='LogVolume' and @logVolumeCategory='m3sub']")
if (length(nodes) == 0) return(0)

vals <- xml_text(nodes)
nums <- suppressWarnings(as.double(gsub(",", ".", vals)))
nums <- nums[!is.na(nums)]

if (length(nums) == 0) 0 else sum(nums)
}

# Bygg tabell
df <- tibble(
stem_key = vapply(stems, get_text_ln, character(1), "StemKey"),
object_key = vapply(stems, get_text_ln, character(1), "ObjectKey"),
stem_no = vapply(stems, get_text_ln, character(1), "StemNumber"),
lat = suppressWarnings(as.double(vapply(stems, get_text_ln, character(1), "Latitude"))),
lon = suppressWarnings(as.double(vapply(stems, get_text_ln, character(1), "Longitude"))),
alt = suppressWarnings(as.double(vapply(stems, get_text_ln, character(1), "Altitude"))),
m3sub_sum = vapply(stems, get_m3sub_sum, numeric(1))
) %>%
filter(!is.na(lat), !is.na(lon))

message("Antal stammar med koordinater: ", nrow(df))
message("Total m3sub (summa över stammar): ", sum(df$m3sub_sum, na.rm = TRUE))

# ---- Punktstorlek (2..10 px) baserat på log1p(m3sub) ----
if (nrow(df) > 0) {
s <- log1p(df$m3sub_sum)
s_min <- min(s, na.rm = TRUE); s_max <- max(s, na.rm = TRUE)

df$radius <- if (isTRUE(all.equal(s_min, s_max))) {
4
} else {
2 + (s - s_min) / (s_max - s_min) * (10 - 2)
}
} else {
df$radius <- numeric(0)
}

# ---- Färgskala efter m3sub ----
pal <- colorNumeric(palette = "viridis", domain = df$m3sub_sum, na.color = "#999999")

# Leaflet
m <- leaflet(df) %>%
addProviderTiles(providers$OpenStreetMap) %>%
addCircleMarkers(
lng = ~lon, lat = ~lat,
radius = ~radius,
stroke = FALSE,
fillOpacity = 0.85,
color = ~pal(m3sub_sum),
popup = ~paste0(
"<b>Stam nr:</b> ", stem_no, "<br/>",
"<b>m3fub (sum):</b> ", sprintf("%.3f", m3sub_sum), "<br/>",
"<b>Lat/Lon:</b> ", sprintf("%.6f", lat), ", ", sprintf("%.6f", lon),
ifelse(is.na(alt), "", paste0("<br/><b>Alt:</b> ", alt))
)
) %>%
addLegend(
position = "bottomright",
pal = pal,
values = ~m3sub_sum,
title = "m³fub per stam",
opacity = 0.9
)

if (nrow(df) > 0) {
m <- m %>% fitBounds(min(df$lon), min(df$lat), max(df$lon), max(df$lat))
}

m

 Besvara 
  • Sida 1 av 1
Annons:
Arevo
Fredrik Reuter
Hej Gäst! Jag heter Fredrik och driver denna sajt. Jag skulle gärna vilja tipsa dig om hur du kan få ut mer av skogsforum. Klicka på de knappar som passar dig här intill (minifönster öppnas).