sön 01 sep 2024, 17:14#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?
Gallring
Verktyg för att läsa HPR-filer
TS

ons 11 sep 2024, 12:38#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.
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.
MvH Fredrik (tidigare admin@skogsforum). Rapportera virke i vår nya virkesrapport! Det finns inga dumma frågor! Var med och diskutera skog!
tis 13 jan 2026, 09:15#903894
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)
Du måste vara medlem för att logga in. Det är gratis att bli medlem och registreringen går fort, Välkommen!
Skapa konto
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)
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
Logga in för att se de bilder eller dokument som författaren har laddat upp.
Du måste vara medlem för att logga in. Det är gratis att bli medlem och registreringen går fort, Välkommen!
Skapa konto


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).