pgx
PGX — Lightweight Postgres for AI agents. Written in Rust. Thousands of isolated databases in one runtime. 🐘
Translation pending
Tegn vei eller tomt i kartet for å beregne massebalanse og eksportere stikningsdata
Translation pending
AI summary · website and README
DataJavaScript · HTMLGitHub @thomashauge03OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Tegn en vei i kartet og få ut hvor mye som må graves, sprenges og fylles – regnet mot Kartverkets nasjonale høydemodell (DTM1, 1 × 1 m laserdata). Ingen innlogging, ingen database å drifte, ingen npm-avhengigheter utenom kartkomponenten. Kjører både lokalt og på Vercel. På nett: appen ligger på Vercel. Hver push til main blir lagt ut automatisk. Åpne så. Ingen npm install – programmet bruker bare det som ligger i Node fra før. Terrengdata blir hentet automatisk. Flisene har ett år med hurtigbuffer, så andre gangen du åpner samme prosjektet går det med en gang – også uten nett.Read the full README ↗
Tegn en vei i kartet og få ut hvor mye som må graves, sprenges og fylles – regnet mot Kartverkets nasjonale høydemodell (DTM1, 1 × 1 m laserdata).
Ingen innlogging, ingen database å drifte, ingen npm-avhengigheter utenom kartkomponenten. Kjører både lokalt og på Vercel.
På nett: appen ligger på Vercel. Hver push til main blir lagt ut automatisk.
Lokalt:
node server.js
Åpne så http://localhost:5178. Ingen npm install – programmet bruker bare det som ligger i Node fra før.
Tjeneren svarer bare på maskinen selv. Skal andre på samme nett nå den (et
nettbrett på plassen), startes den med MASSEKALK_VERT=0.0.0.0 node server.js;
PORT=… velger en annen port.
Terrengdata blir hentet automatisk. Flisene har ett år med hurtigbuffer, så andre gangen du åpner samme prosjektet går det med en gang – også uten nett.
Prosjektene ligger i nettleserens egen database (IndexedDB) på den maskinen du bruker. Det gjør at programmet virker likt lokalt og på Vercel, uten innlogging og uten at noen må drifte en database.
Under Åpne finner du derfor:
.json-filTa en eksport med jevne mellomrom. Tømmer du nettleserdata, forsvinner prosjektene. Skal flere jobbe på samme prosjekt samtidig, trengs det en delt database – se «Videre arbeid» nederst.
3D-modellen (veg, tomt og rør) tegnes av skjermkortet – ovenfra, når du flyr og når du går – i full oppløsning hele tiden, med myk skyggelegging og glatte kanter og slagskygger fra sola. Står du i modellen (Fly og Gå), får du himmel og dis i det fjerne. Med arealdekket på står det trær i skogen rundt (aldri der det graves eller fylles), og «Før» og «Etter» viser gress, skog, myr, vann, grusveg, jord, fjell og fyllmasse slik det ser ut i virkeligheten. Massebildet beholder rødt og grønt. Velg «Dekke: Asfalt» i vegmalen for asfaltert veg. Under «Vis ▾» kan du slå av trær, skygger, himmel og ekte flater hver for seg. Mens du drar tar et bilde om lag 1 ms, og når du går om lag 6 ms (prosessoren brukte 88 ms). Avlesning, klikk og rapportbilder kommer fra det samme bildet. Mangler nettleseren WebGL 2, eller mister den skjermkortet, tegnes det som før.
Under Vegmal velger du veiklasse, og malen blir satt opp med kravene som faktisk gjelder — vegbredde, minste radius, grøftedybde, breddeutvidelse i kurver og største stigning. Tallene er hentet rett fra Normaler for landbruksveier med byggebeskrivelse (Landbruks- og matdepartementet / Skogkurs), klasse for klasse, og kilden står i programmet. Alt kan overstyres.
To ting normalen gjør som er verdt å vite:
Klasse 1 har ingen egen tabell i normalen — den blir bygd i samarbeid med offentlig vegmyndighet — så der er verdiene bare et utgangspunkt, og programmet sier ifra om det.
Skal du treffe en lengdeprofil som allerede er prosjektert, legger du høydene inn under fanen Høyder:
250 eller 0+250,
punktum eller komma som desimaltegn.I tverrprofilet kan du skrive inn høyden på venstre vegkant, i senterlinjen og på høyre vegkant for det profilet du står i. Senterlinjen styrer lengdeprofilen, og vegkantene styrer tverrfallet på sin side — så et oppmålt tverrsnitt kan legges rett inn, med ulikt fall til hver side om det trengs.
Knappene over lengdeprofilen:
| Knapp | Hva den gjør |
|---|---|
| Rett opp | Beholder profilen du har, retter bruddene på kravene, og går så løs på å få ned sprengning og fylling. Bruk denne på et prosjekt som allerede er tegnet |
| Foreslå profil | Ny profillinje fra terrenget. Kaster den du har |
| Massebalanse | Løfter/senker hele profilen dit minst masse må kjøres inn og ut av anlegget |
| Optimaliser | Finjusterer hvert knekkpunkt for billigst mulig løsning |
Trykk ⊖ Stikkrenne i kartet og klikk der renna skal krysse vegen. Den settes i stasjonen nærmest klikket, med diameter og minste fall fra malen, og står i lista under Vegmal:
Hver renne har et nummer: SR1, SR2 … er navnene i KOF-en (SR1I og SR1U
for innløp og utløp), og nummeret står i lista, kartet, tverrsnittet og
rapporten. Det endres ikke når en annen renne slettes, og en ny renne får
aldri nummeret til en som er slettet.
Renna tegnes i kartet, i tverrsnittet i stasjonen sin («snitt» i lista, «Vis
snittet» i kartet) og i lengdeprofilen, og står i rapporten, PDF-en, KOF-en
(STIKKINN/STIKKUT, bunn innvendig) og DXF-en (laget STIKKRENNE). Massene
for selve renna – fundament og omfylling – telles ikke.
Innmålte rør kan hentes inn fra en LandXML-fil – eksporten «as-built» fra Xsite
Manage og liknende – eller fra en SOSI-fil (.sos), og begge formatene fra
Kinematic Makin' Excavator – eller fra en KOF-fil (.kof) med ett punkt per
05-post, som eksporten fra VisualMachine. Velg ⌀ Nye rør (fra filer) i
anleggslista, «Rør (fra filer)» i førstevalget, eller slipp filene på kartet –
én eller mange på en gang, i hvilken som helst blanding av formatene.
Kan være samme rør. Rørene trekkes bare mellom punkt med samme kode, så et rør målt av flere maskiner får hull der koden skifter («SP 160PE», «avlop160», «spilvann 160»). Rør-fanen foreslår koder som trolig er samme rør – navnene er nesten like, endene møtes innen 5 m, eller de ligger oppå hverandre – og systemet og dimensjonen må passe. Slå sammen tegner den ene koden som den andre; punktene og kodene deres endres ikke, og Skill gjør det om. Ikke samme rør huskes. Ingenting slås sammen av seg selv. Rett etter en import kommer forslagene også i en egen boks: svar Samme rør, Ikke samme eller Vet ikke for hvert par, og trykk Ferdig. «Vet ikke» lar forslaget stå i Rør-fanen til senere; alle svarene er ett angresteg.
Leica iCON (LandXML med HexagonLandXML): punktene har ingen kode – koden
er navnet med en teller rett bak («110 MM SP», «110 MM SP1», «MUR10»,
«GRØFT1(2)»). Telleren tas bort ved å finne det korteste navnet i fila
punktet bygger på, så «SP 1601» blir «SP 160» og ikke «SP». Et navn som bare
er et tall, er et punktnummer. Linjene operatøren målte (PlanFeature
med strekk mellom punktene) trekkes som fila sier – ikke etter avstand – og
en kode fila har målt som linje, foreslås som rør. Sonen leses fra
koordinatsystemets navn («Euref89 UTM32»).
Marker alle / Fjern alle over kodetabellen, i importdialogen og i Koder-fanen – skal man bare ha noen få rør, fjerner man alle og krysser av de få.
KOF: navn, kode (gjerne med mellomrom, «vann 110»), nord, øst og høyde. VisualMachine begynner punktnummereringen på nytt i hver fil, så et punkt kjennes igjen på navnet OG stedet – to filer med «P1» på hvert sitt sted gir to punkt, og samme fil lest to ganger gir ingen doble. Sonen leses fra 01-posten når den står der, datoen fra «Created:» i kommentarene. En KOF uten tegnsett som ikke er gyldig UTF-8, leses som Windows-tegn (Æ, Ø, Å).
«avløp»/«avlop» er spillvann, og et rør med kjent system er et rør også uten dimensjon – sett dimensjonen i Koder-fanen.
Flere filer på én gang. Velg eller slipp flere .xml- og .sos-filer
samtidig – fra ulike maskiner eller ulike dager – og de flettes til én import
med én dialog. Et punkt som står i flere filer, kjennes igjen på navnet og tas
med én gang; den nyeste fila gjelder. En fil som ikke kan leses, stopper ikke
de andre – dialogen sier hvilken og hvorfor. Hver fil står som egen kilde.
Hvor punktene skal. Dialogen viser alle innmålte røranlegg i prosjektet, så filene kan legges til i hvilket som helst av dem – ikke bare det som er åpent – eller i et nytt. Legges de i et annet anlegg enn det åpne, beholder det sine egne koder og farger; bare nye koder kommer til.
Har du innmålingene i Makin' 3D, kan Massekalk hente dem rett fra skyen i stedet for at du eksporterer en fil. ☁ Rør fra Makin (i «Hva skal du regne på?» og i anleggslista) kobler til et prosjekt i Makin og henter punktene inn i et eget, nytt røranlegg; ☁ Hent fra Makin i kartverktøyene på det anlegget henter alt på nytt. Når du åpner prosjektet, hentes Makin-anleggene på nytt av seg selv – er ingenting nytt i Makin, røres prosjektet ikke, og uten lagret nøkkel står det bare en linje i statuslinja. Massekalk skriver aldri noe til Makin.
localStorage, massekalk.makin) – aldri i prosjektet, angre-stegene,
eksportene eller på serveren. Bytt nøkkel og Glem nøkkelen i denne
nettleseren står i dialogene og i Rør-fanen. Kalla går gjennom Massekalks
egen server (Makin tillater ikke kall rett fra nettleseren); den sender nøkkelen
videre for hvert kall, lagrer den ikke og svarer med no-store.Rørene vises i kart, lengdeprofil og 3D (piltastene blar mellom dem), og får sin egen del i rapporten og PDF-en. I 3D står kummene: en tegnet kum som en sylinder fra bunnen av kumgropa opp til terrenget, en innmålt som en ring på 1 m der den ble målt (laget «Kummer»). De eksporteres som rør – se «Eksport» under. Nye rør tegnes i et eget anlegg – se «Planlagte rør» under.
▭ Utsnitt til stikning i rørverktøyene: dra et rektangel i kartet rundt området du skal stikke ut, og få en PDF (A4 liggende) med kartet – rørene og hvert punkt nummerert – og en tabell med koordinatene. Med kommer stikkpunktene langs et tegnet rør (knekkpunkt, hver 10. meter og endene, med topp rør, bunn innvendig og gravebunn, og samme navn som i stiknings-KOF-en), kummene (bunnløp og lokk) og de innmålte punktene fra filene, med nord, øst og høyde slik de står i fila. Høyst 400 punkt per utsnitt.
🗺 Oversiktskart i kartverktøyet (og «Oversiktskart over rørene (PDF)» under Eksport) lager kartet som skal ut på plassen. Det er én PDF:
Bakgrunnen er Kartverkets gråtone- eller topografiske kart, hentet i UTM så rørene ligger der de er målt. Arket er A3 eller A4 liggende, med målestokk, linjal og nordpil. Ingenting i prosjektet endres.
Terrenget, så de som skal grave vet hvor det skal. Begge valgene er på fra start:
Grøfta regnes med rørene, mot et teoretisk grøfteprofil og Kartverkets terreng slik det var før graving.
Grøftekanten står i kartet, fundament, omfylling, gravebunn og fjell i lengdeprofilen (gravedybden under musa), og laget «Grøft» viser den som åpen grop i 3D. Rapporten og PDF-en får delen «Grøftemasser» med normalgrøfta tegnet.
Nye rør tegnes før jobben – til kalkylen, til høydeføringen og for å se dem mot det som ligger der. Velg ✎ Rør (tegn) i førstevalget eller Planlagte rør (tegn) i anleggslista; anlegget er et røranlegg som regnes, tegnes og rapporteres som et innmålt, med grøft og alt.
09_91–09_99-linjer, punkt med samme kode etter
hverandre, og programmets egen stikningsfil (bunn, topp og gravebunn per
rør). Velg linjene og rørkoden for hver; koordinatsystemet leses av
KOF-hodet, ellers gjettes det som for rørene. Høydene i fila brukes bare om
det velges – som bunn innvendig eller topp rør, låst. En ende kobles på et
innmålt rør med samme kode innen en halv meter, og blir en grein av en annen
trase i samme system bare på samme sted (5 cm) – der flere ender møtes, er
røret som renner ut, roten. Alt er ett angresteg.Punktene i kartet dras i Rediger, et klikk på traseen setter inn et punkt, og Delete tar bort det valgte. Rør-fanen viser traseene med rørene, fallet og kumlista; Koder-fanen har gods, regel, overdekning og fall per kode. Til maskinstyring og stikning går de gjennom Eksport-fanen (se «Eksport»).
Avvik mot innmålt. Når rørene er lagt og målt inn, importeres de innmålte som et eget anlegg i prosjektet. Vis avvik mot innmålt i Rør-fanen knytter hvert målte punkt til nærmeste planlagte rør med samme kode (eller samme system og dimensjon) innenfor søkebredden, og viser avviket i plan (+ til høyre i tegneretningen) og i høyde (bunn innvendig, + over planen): en tabell per rør med hvor mye som er innmålt, de største avvikene, ringer i kartet (grønne innenfor, røde utenfor), punktene i profilen, merknadene og et eget avsnitt i rapporten og PDF-en. Toleransene settes i fanen – standard 0,10 m i plan, 0,03 m i høyde for selvfall og 0,10 m for trykk, søkebredde 1,0 m. Knappen endrer ingenting: verken planen eller de innmålte høydene.
✎ Rørskisse i førstevalget (eller «✎ Rørskisse (tegn)» i anleggslista) er de samme traseene, men bare streken: hvor røret går og hva slags rør det er. Ingen høyder, ingen kummer, ingen grøft – og ingen terreng hentes.
09_91 … 09_99) og tomt
høydefelt – koden forkortet til åtte tegn («SP 160») –, SOSI med ..NØ, DXF
som flate polylinjer per kode, LandXML-linjer «nord øst» og GeoJSON med
skisse: true. Fila sier at det er en skisse. Stikningsdata og grøftemasser
finnes ikke for en skisse – det er ingen høyder å stikke ut.Kartverkets DTM1 viser bakken slik den var da området sist ble skannet. Er det fylt eller gravd siden, regner tomta på terreng som ikke finnes lenger. △ Triangulering i førstevalget (eller «△ Triangulering (fra fil)» i anleggslista) leser innmålte terrengpunkter – LandXML, KOF eller SOSI, samme filer som rørene – og lager en trekantflate av dem.
Flaten er rett mellom punktene. Er kanten målt på toppen av en fylling, er skråningen ned til foten utenfor og ikke med.
Optimaliseringen vekter, i den rekkefølgen det gjør vondt:
I tillegg er kravene fra veiklassen og grensene for hva som lar seg bygge lagt inn som svært dyre brudd, så en løsning som bryter dem blir aldri valgt.
Under Vegmal → Grenser setter du hva som lar seg bygge: største fyllingshøyde, største skjæringsdybde og største utslag fra vegkant. «Regn bare ut til» stopper regnestykket et gitt antall meter fra vegkanten, så du får massene for det du faktisk har tenkt å gjøre. Setter du «Kan flytte linjen inntil», får «Optimaliser» lov til å flytte senterlinjen sidelengs for å treffe billigere terreng – knekkpunktene i kartet flyttes, så du ser hvor den nye linjen går.
Der terrenget gjør det umulig å holde både stigningskravet og fyllingsgrensen – over en trang kløft må veien bru den – blir profilen dratt så nær som mulig, og resten kommer som merknad. Programmet sier ifra i stedet for å skjule det.
| Post | Slik |
|---|---|
| Rensk / avdekking | Tykkelse × (fotavtrykk + margin på hver side) |
| Skjæring | Fra terreng etter rensk ned til planum, grøft og skjæringsskråning |
| – fordelt på fjell og løsmasse | Etter dybden til fjell i hvert punkt |
| Fylling | Fra terreng etter rensk opp til planum og fyllingsskråning |
| Bærelag / slitelag | Tykkelse × bredde, breddeutvidet i kurver |
| Massebalanse | Hvor mye av skjæringen som kan brukes om igjen i fyllingen |
| Massetransport | Brucknerkurve – hvor det er overskudd og hvor det mangler masse |
Detaljer som er tatt med:
(1 + t · krumning) etter Pappus' regel,
så volumet blir riktig også i en R = 10-sving.Alle volum er prosjektert fast volum (p.f.m³) om ikke annet står. Omregning til anbrakt volum (p.a.m³) skjer med faktorene du setter under «Vegmal».
| Hva | Kilde |
|---|---|
| Terreng | Kartverket, nasjonal høydemodell DTM1 (1 m, flybåren laser) |
| Bakgrunnskart | Kartverket WMTS (topografisk, turkart, gråtone) |
| Terrengskygge | Kartverket høydedata, skyggerelieff av laserdataene |
| Løsmasser | NGU (valgfritt kartlag) |
| Stedsnavn og adresser | Kartverkets åpne API |
Høydene er kontrollert mot Kartverkets offisielle punkt-API og stemmer eksakt
(node test/selftest.js, punkt 8). Knappen «Kontroller høyder mot Kartverket»
under fanen «Linje» kjører den samme kontrollen på din egen trasé.
Terrenghøydene er målt. Dybden til fjell er et anslag – og det er den som avgjør hva jobben koster. Sidepanelet og rapporten regner derfor sprengningen om igjen med fjellet en halvmeter høyere og en halvmeter lavere, så du ser hva anslaget faktisk betyr i kubikk. På demoprosjektet flytter et halvmetersbom 1 115 m³ – 70 % av hele skjæringsvolumet.
Registrer fjellpunkt i kartet der dere vet hva som ligger under. Det er det eneste som strammer inn dette tallet.
Husk: terrengmodellen viser terrenget slik det var da området sist ble skannet. Er det gjort inngrep etterpå, eller står det tett skog med dårlig laserdekning, må du kontrollere mot befaring.
| Format | Til hva |
|---|---|
| KOF | Stikningsdata til totalstasjon og maskinstyring |
| LandXML | Linjeføring med kurveelementer og lengdeprofil – leses av de fleste maskinstyringer |
| SOSI | Kartdata til kommune og Kartverket |
| DXF | Tegning til AutoCAD og liknende |
| CSV | Stikningsdata og masseoppsett per profil, til regneark |
| GeoJSON | Senterlinje, fotavtrykk og fjellobservasjoner |
Rør – innmålte og planlagte – går ut i de samme formatene, med tre høyder som egne lag: bunn innvendig (bunnløpet), topp rør og gravebunn (bunnen av grøfta, brutt der det ikke graves). Den som setter opp maskina, velger laget.
| Format | Rørene |
|---|---|
| KOF | Stikningspunkt i hvert knekkpunkt, hver 10. meter og enden: RORBUNN, RORTOPP, GRAVBUNN; kummene KUMBUNN (bunnløp) og KUMTOPP (lokk). Hodet sier hva rørnumrene er |
| LandXML | En 3D-linje (PlanFeature) per rør og høyde, og kummene som punkt (CgPoint) |
| SOSI | Innmålte rør: bare det som kom inn med fila – én Rørledning per rør med punktene i millimeter (ENHET 0.001) slik de står i XML-fila, i fila sin UTM-sone også når programmet regner i en annen, og koden som navn; ingen bunn innvendig, gravebunn, diameter, høydereferanse eller merknader. En samlefil har én sone – den til anlegget du står i – og et anlegg i en annen står utenfor (svaret sier det); eksporter det for seg. Planlagte rør: Rørledning (bunn og topp) og Grøftebunn som kurver i centimeter, med høydereferanse og diameter; kummene som Kum |
| DXF | 3D-polylinjer på lagene <KODE>_BUNN, _TOPP og _GRAVEBUNN; kummene som sirkler på bunnløpet |
| CSV | Stikningsliste med alle tre høydene, terreng og overdekning per punkt; grøftemassene per kode |
| GeoJSON | Rørene som linjer med egenskapene, kummene som punkt |
Formatene er skrevet etter spesifikasjonene, men er ikke prøvd mot hvert enkelt mottakersystem. Ta en prøveimport av én fil før dere baserer en jobb på dem.
Rapport gir en utskriftsklar side med lengdeprofilen, et utvalg tverrsnitt og full stikningstabell med koordinater og høyder for senterlinje og begge vegkanter. Profilene tegnes på nytt i lys palett for papir. Lagres som PDF fra nettleseren.
To testsett, som dekker hver sin del:
node test/selftest.js
154 kontroller uten nettleser: koordinatregning mot kjente referanser, linjeføring mot geometri regnet for hånd, lengdeprofil mot parabelformlene, masseberegning mot et tverrsnitt regnet ut for hånd med sju siffer, veiklassene mot tallene i normalen, kurvereglene, innlesing av høydetabeller, eget tverrfall per profil, avkortet beregningsbredde, grensene mot terrenget, massebalansen mot bokføringsreglene, avlesning av PDF, pakkingen av terrengfliser, og terrengmodellen mot Kartverket.
Åpne programmet med ?test=1 bakerst i adressen for den andre halvparten:
134 kontroller av selve grensesnittet – lagring, tegning av linje, alle
profilverktøyene, høydetabellen, alle ni veiklassene, tverrprofilet, grensene,
eksportene, rapporten og panelene. Den lager sitt eget prosjekt og rydder opp
etter seg, så den er trygg å kjøre på en maskin med ekte prosjekter.
node test/rorprove.js
Rørene: innlesing av LandXML, kodetolkingen, linjene mot punkter med kjent fasit (fram og tilbake, rør om hverandre, stikkledninger i sikksakk), brudd, kobling, sone, sammenslåing av en ny fil og overdekningen mot et kunstig terreng.
node test/groftprove.js
Grøfta mot fasit regnet for hånd: én grøft per meter (graving, fundament,
omfylling, gjenfylling, endene), fjellgrøft fra strekninger og sonderinger,
loddrette vegger, sidehelling, hull i terrenget, felles og egen grøft (også midt
på et rør og i en knekk), sammenslåing med fall, ulike lengder og fjell, et
T-kryss bygd som programmet bygger det, mål per kode og strekning,
grøftekasse og spunt (sonen, felles grøft, kummer og tellingen),
dybdeklassene, massebalansen og bakkefaktoren. Med ROR_FIL=<sti til en xml> kjøres
en ekte fil i tillegg i begge rørprøvene – kundens filer ligger ikke i repoet.
node test/rorplanprove.js
De planlagte rørene: bunn ↔ topp med godset, sideavstanden i knekker, høydene for selvfall og trykk mellom kontrollpunktene, kummer, greiner og påkoblinger, kontrollene (overdekning, fall og motfall med millimeteravrundingen, kryssing, høybrekk, lavbrekk og fall for trykkrør), høydene lagt på knapp mot fasit regnet for hånd – faste punkt over taket, greiner som renner inn og nett av greiner, hvorfor det ikke går, og 150 rør og 120 nett på tilfeldig terreng uten uforklart merknad etterpå – fallet mellom kontrollpunktene og ryddingen av plandelen når prosjektfila åpnes.
node test/roreksportprove.js
Eksporten av rør: stikningspunktene (knekk, hver 10. meter, enden og kummene), de tre høydene mot grøftemotoren – også bruddet der røret ligger over terrenget – og hvert format: KOF-navn og koder, LandXML-linjer og kummer, SOSI-kurver i centimeter – for innmålte rør bare det fra fila, i millimeter –, DXF-lag og GeoJSON.
node test/roravvikprove.js
Avviket mot innmålt: kodelikheten, sideavviket med fortegn (også i en knekk og forbi enden), høydeavviket med godset til hver sin kode, toleransene for selvfall og trykk, knytningen til nærmeste rør, dekningen og hullene, punkt nær men utenfor søkebredden og merknadene.
node test/traseimportprove.js
Traseer fra fil: KOF med linjeblokker, lukkede og åpne linjer, punkt med samme kode og koder med mellomrom, sonen fra hodet, stikningsfila røreksporten skriver lest tilbake; DXF med løse streker som kjedes (ikke gjennom en T, og med 3D-høyden i skjøtene), LWPOLYLINE med høyde, 2D- og 3D-polylinjer, buer, sirkler og ARC, papirrom, flatenett, speiling med høyden og 20 000 streker på tid.
node test/stikkrenneprove.js
Stikkrennene mot fasit regnet for hånd på en rett veg: fylling på flatt terreng (fot til fot pluss tillegget, minstefallet, overdekningen i vegkanten), massene uendret av en renne, en skjev renne (også i en stigning, og på terreng som faller langs vegen, der endene leses der renna krysser foten), sidebratt terreng med innløpet i grøftebunnen og renna dreid om utløpet for overdekningen, senking uten og med fall å gi, låste høyder, og det som ikke går.
node test/makinprove.js
Hent fra Makin: ZIP-leseren, proxyen (hvilke kall som slippes gjennom, adressene
bygd av validerte parametre, no-store, at nøkkelen aldri står i et svar) og
klienten (nøkkelen i lageret, ventingen på eksporten, deling i tidsbolker og
feilmeldingene), alt mot en falsk fetch og laget testdata – Makin kalles aldri.
Triangulering (test/trianguleringprove.js): Delaunay, ytterkanten på en
L-form, volumet mot et kjent terreng (1 m over 20 × 20 m er 400 m³), merking av
feilpunkt, LandXML og sonen fra Leica-projeksjonen, terrenget med overlag,
fjelldybden, matjorda og masseutskiftingen under en fylling og prosjektfila. npm test kjører alle elleve.
test/makin-sonde.js er ikke en del av npm test: en prøve du kjører selv, med
din egen nøkkel i MAKIN_NOKKEL, mot en ekte eksport. Den skriver bare
oppbygningen (antall, typer, linjer som .PUNKT eller .KURVE, om navn
kolliderer mellom maskiner), aldri koordinater, navn, koder eller nøkkelen.
node test/demo-ydestad.js
Kjører hele kjeden på virkelig terreng ved Ydestad i Lyngdal og skriver
demoprosjektet til public/demo/.
api/dtm/flis.js henter og pakker en terrengflis (Vercel-funksjon)
api/makin.js smal proxy mot Makin' 3D: fast liste med kall, nøkkelen lagres aldri
api/punkt.js kontroll mot Kartverkets punkt-API
api/sok.js stedsnavn- og adressesøk
lib/hoydedata.js GeoTIFF-leser, flishenting og pakking
lib/zip.js ZIP-leser (eksporten fra Makin), uten avhengigheter
server.js lokal utviklingsserver som bruker de samme funksjonene
vercel.json utlegging
public/js/geo.js UTM-projeksjon (Krüger, 4. orden) og målestokkfaktor
public/js/linjeforing.js horisontal linjeføring med sirkelkurver
public/js/vertikalprofil.js lengdeprofil, retting mot kravene, innlesing av høydetabell
public/js/terreng.js terrengmodell i nettleseren, bilineær interpolasjon, innmålt terreng oppå
public/js/triangulering.js innmålte punkter til trekantflate: Delaunay, ytterkant, volum mot DTM1
public/js/ui-tin.js Triangulering i skjermen: filen, Masser-fanen, knappene, punkttabellen
public/js/ui-tin3d.js det innmålte terrenget i 3D før godkjenning: lagt til og fjernet mot DTM1
public/js/masser.js tverrprofil og volumberegning
public/js/stikkrenner.js stikkrennene: endene, lengden, høydene og overdekningen av tverrsnittet
public/js/veiklasser.js veiklassene fra landbruksveinormalen
public/js/lager.js prosjektlager i nettleseren, import og eksport
public/js/eksport.js KOF, LandXML, SOSI og DXF
public/js/pdfimport.js avlesning av tegnede kurver i en PDF
public/js/ror.js rørene: LandXML, koder, linjer, sone, profil
public/js/groft.js grøfta: rutenett, felles grøft, kummer, fjell, lag, dybdeklasser, balanse
public/js/rorplan.js planlagte rør: høydene, kummer, greiner, påkoblinger og kontrollene
public/js/roreksport.js rørene til KOF, LandXML, SOSI, DXF og GeoJSON – bunn, topp og gravebunn
public/js/roravvik.js planlagte rør mot innmålte: avvik i plan og høyde, dekning og toleranser
public/js/traseimport.js traseer fra KOF og DXF
public/js/makin.js klienten mot Makin via /api/makin: nøkkelen, eksporten, tidsbolker
public/js/ui-makin.js Hent fra Makin i skjermen: knappene, nøkkel- og koblingsdialogen
public/js/ui-ror*.js rørene i skjermen: import, faner, profil, 3D
public/js/ui-rorplan.js planlagte rør i skjermen: tegning, redigering, Rør-fanen, punktfeltet
public/js/ui-groft.js grøfta i skjermen: Rør-fanen, verktøyene i kartet, normalgrøfta
public/js/farger.js tegnefargene, hentet fra CSS-variablene
public/js/nettlesertest.js gjennomgang av grensesnittet (?test=1)
public/js/ui-3d.js 3D-tegneren felles for veg, tomt og rør (lag, kamera, mus; prosessoren som reserve)
public/js/gl3d.js skjermkortet bak 3D-bildet (WebGL 2): mesh, bilde, avlesning og dybde
public/js/ui-*.js kart, lengdeprofil, tverrprofil, rapport
public/bilde/hm-logo.png HM-logoen (samme fil som i de andre appene)
public/demo/ demoprosjekt som blir lagt inn første gangen
Terrengflisene blir sendt som hele centimeter over et nullnivå for flisen
(16 bits). Terrengmodellen er selv oppgitt i centimeter, så ingenting går tapt –
kontrollen mot Kartverkets API gir nå 0,000 m avvik – og flisen blir under
halvparten så stor på nettet. FLIS_VERSJON i public/js/terreng.js må økes
dersom formatet blir endret, siden flisene blir bufret i ett år.
Makin' Excavator har koden enten fra lista (står i code/..OBJTYPE, og
navnet er bare «P12 (0)») eller skrevet som navnet på punktet («vann 63(2) (1)»,
og koden er bare «Punkt»). Da hentes koden fra navnet uten tellerne
(«vann 63»), med små bokstaver og mellomrom mellom tall og bokstaver, så
«vann110» og «Vann 110» blir samme rør – og «tr40 (0)» blir samme som «tr40»
fra lista. Skrivefeil («vanl 110») blir egne koder. Datoen 2008-01-08 som
står i hver fil, byttes mot datoen til det siste målte punktet.
SOSI: bare .PUNKT leses; en .KURVE er en logglinje, og punktene på
den står også som egne punkt – den telles som hoppet over. Koordinatene regnes
med ..ENHET og ..ORIGO-NØ, sonen fra ..KOORDSYS (22/23/25) når den står der.
Punktene blir rør av seg selv. Fila har bare punkter, og operatøren måler fram og tilbake og hopper mellom rørene i samme grøft – målerekkefølgen kan ikke brukes. Programmet trekker linjene etter hvor punktene ligger: punkt med samme kode som ligger høyst 25 m fra hverandre, henger sammen (minste spenntre). Avstanden kan endres i Rør-fanen.
Punktene er toppen av røret, målt midt over senterlinja. Sett ovenfra ligger de i senter av røret; i høyden er de topp rør. Senter er en halv diameter lenger ned, bunnen en hel. Diameteren leses av koden («180 PE», «SP 160PE») og kan rettes i Koder-fanen.
Overdekningen måles mot Kartverkets terreng (DTM1) – slik marka var da den ble skannet.
Koordinatsystemet står sjelden i fila. Programmet bruker det fila oppgir, ellers sonen som legger rørene ved de andre anleggene i prosjektet, ellers UTM 32 – og dialogen sier hva den valgte og hvorfor. Legges en fil i en annen sone til et røranlegg, regnes de nye punktene om til anleggets sone.
Punkt med koordinater utenfor UTM i Norge – en måling uten fix som ble skrevet som 0 0 0 – hoppes over og telles. Er halvparten eller mer utenfor, er fila i et annet system (NTM, lokalt), og den avvises med en forklaring.
Kobler programmet feil, rettes det i kartet: slå av et punkt, bryt en strek, koble to ender. Rettingene står seg når en nyere fil importeres – punktene kjennes igjen på id-en i fila, og ingenting slettes stille.
Endre rør gjør resten for hånd: dra et punkt dit røret faktisk går, klikk på en rørstrek for å sette inn et nytt punkt (høyden ligger på streken), eller ved enden for å forlenge røret. Et klikk på et punkt åpner det – et nytt punkt kan få en annen høyde eller tas bort, et flyttet kan flyttes tilbake. Målte høyder endres aldri; bare hvor punktet står. Også dette er rettinger, som står seg ved ny import og ny henting fra Makin.