Velg klimasted ut fra georefereringen, og rett adresse fra IFC
En ny eksport av Nordhusstykket 5 viste hva mer modellen kan bære, og avdekket feil. Posisjon og klimasted - IfcMapConversion med IfcProjectedCRS gjøres om til breddegrad og lengdegrad. EUREF89 og WGS 84 UTM, NN2000-varianter og Web Mercator forstås. Omregningen er kontrollert mot PROJ. - Vectorworks' standardplassering i Washington, som står når ingenting er satt, kjennes igjen og brukes ikke. - Ny `posisjon` under [klima]. Uten kommune velger beregningen nærmeste av de 358 klimastedene i TMY-arkivet, og sier i rapporten hvor langt unna det ligger. Opplysninger fra modellen - Adressen hentes fra IfcBuilding eller IfcSite. Før ble den første postadressen i filen brukt, og det var firmaets adresse i forfatteropplysningene. - Energirådgiver fra person og organisasjon i forfatteropplysningene. - Byggets navn fra prosjektet når bygningen heter «Default Building». - Referansehøyde og terrenghøyde på bygningen gir hvor mye av grunnmuren som står over bakken. - IsLandmarked gir en merknad om at vernede bygninger er unntatt energiattestplikten. En eksport uten bygningsdeler stopper nå med en feilmelding som peker på lagtilknytningen i eksportdialogen, i stedet for å skrive en tom bygning. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015GeH3y8fwTaTudaD88P57o
This commit is contained in:
@@ -76,6 +76,36 @@ fn kommune_av_filnavn(navn: &str) -> Option<String> {
|
||||
Some(base.to_string())
|
||||
}
|
||||
|
||||
/// Klimastedet nærmest en posisjon, og avstanden dit i km.
|
||||
///
|
||||
/// Hver TMY-fil oppgir i første linje koordinatene for punktet dataene gjelder. Bare starten
|
||||
/// av hver fil pakkes ut, så oppslaget går raskt selv om arkivet er stort.
|
||||
pub fn naermeste_kommune(p: &crate::klima::geo::Posisjon) -> Result<(String, f64)> {
|
||||
let sti = sikre_arkiv()?;
|
||||
let fil = std::fs::File::open(&sti)?;
|
||||
let mut zip = zip::ZipArchive::new(fil)?;
|
||||
let mut best: Option<(String, f64)> = None;
|
||||
for i in 0..zip.len() {
|
||||
let oppf = zip.by_index(i)?;
|
||||
let Some(kommune) = kommune_av_filnavn(oppf.name()) else {
|
||||
continue;
|
||||
};
|
||||
let mut hode = Vec::with_capacity(512);
|
||||
oppf.take(512).read_to_end(&mut hode)?;
|
||||
let linje = crate::klima::epw::avkod(&hode);
|
||||
let felt: Vec<&str> = linje.lines().next().unwrap_or("").split(',').collect();
|
||||
let tall = |i: usize| felt.get(i).and_then(|s| s.trim().parse::<f64>().ok());
|
||||
let (Some(bredde), Some(lengde)) = (tall(6), tall(7)) else {
|
||||
continue;
|
||||
};
|
||||
let d = p.avstand_km(&crate::klima::geo::Posisjon { bredde, lengde });
|
||||
if best.as_ref().is_none_or(|(_, bd)| d < *bd) {
|
||||
best = Some((kommune, d));
|
||||
}
|
||||
}
|
||||
best.ok_or_else(|| anyhow!("TMY-arkivet inneholder ingen klimafiler med koordinater"))
|
||||
}
|
||||
|
||||
/// Henter værdata for en kommune. Navnet sammenlignes normalisert, slik at både
|
||||
/// «Indre Østfold» og «Indre Ostfold» treffer samme fil.
|
||||
pub fn for_kommune(kommune: &str) -> Result<Vaerdata> {
|
||||
|
||||
Reference in New Issue
Block a user