/* 589-1 경위도 겹 → TM 자리 헬퍼 — `B04_PreProcess_UI_MapRender(_Prepare).ts` 의 `createTmNormalizer` · * `normOfLonLat` · `imageScreenMatrix` 를 stdin 입력으로 돌려 JSON 으로 냄. * 입력 { meta, lonlat: [[lon, lat]], image: [w, h], views: [[w, h, scale, ox, oy]] } */ const path = require("path"); const { makeLoader } = require("./helper_ts_stub_loader.cjs"); const ROOT = path.join(__dirname, "..", ".."); const { load } = makeLoader({ root: ROOT, ui: () => ({ themeColor: () => "" }) }); const render = load("B04_PreProcess", "B04_PreProcess_UI_MapRender.ts"); const prep = load("B04_PreProcess", "logic", "B04_PreProcess_UI_MapRender_Prepare.ts"); const input = JSON.parse(require("fs").readFileSync(0, "utf-8")); const { meta } = input; const tmNorm = render.createTmNormalizer(meta); const oldNorm = render.createNormalizer(meta); const unit = { width: 1, height: 1, scale: 1, offsetX: 0, offsetY: 0 }; unit.mapRect = { x: 0, y: 0, width: 1, height: 1 }; const out = { hasToNorm: typeof tmNorm.toNorm === "function", tm: input.lonlat.map(([lon, lat]) => prep.normOfLonLat(tmNorm, lon, lat)), old: input.lonlat.map(([lon, lat]) => prep.normOfLonLat(oldNorm, lon, lat)), oldScreen: input.lonlat.map(([lon, lat]) => render.lonLatToScreen(oldNorm, unit, lon, lat)), views: input.views.map(([w, h, scale, ox, oy]) => { const mapRect = render.computeMapRect(meta, w, h); const view = { width: w, height: h, scale, offsetX: ox, offsetY: oy, mapRect }; const [iw, ih] = input.image; const toScreen = (nx, ny) => render.normalizedToScreen(view, nx, ny); const matrix = prep.imageScreenMatrix(meta, tmNorm, iw, ih, toScreen, w / 2, h / 2); return { mapRect, matrix }; }), }; process.stdout.write(JSON.stringify(out));