Initial commit: browser OSM city generator
This commit is contained in:
commit
2d4bad0dc7
32 files changed
+5915
No files matched your search
@@ -0,0 +1,39 @@
|
||||
// Генерация мира из файла Overpass JSON без браузера.
|
||||
// npx tsx scripts/cli.ts input.json south west north east [out.json]
|
||||
import { readFileSync, writeFileSync } from 'node:fs';
|
||||
import { generateWorldSync } from '../src/gen/generate';
|
||||
|
||||
const [inp, s, w, n, e, out] = process.argv.slice(2);
|
||||
if (!inp || !e) {
|
||||
console.error('usage: tsx scripts/cli.ts input.json south west north east [out.json]');
|
||||
process.exit(1);
|
||||
}
|
||||
const els = JSON.parse(readFileSync(inp, 'utf8')).elements;
|
||||
const t0 = Date.now();
|
||||
const world = generateWorldSync(els, [+s, +w, +n, +e], inp, 1);
|
||||
const dt = Date.now() - t0;
|
||||
|
||||
const kinds: Record<string, number> = {};
|
||||
const roomKinds: Record<string, number> = {};
|
||||
let floors = 0, rooms = 0, props = 0, doors = 0, windows = 0, noEntrance = 0, units = 0, beds = 0;
|
||||
for (const b of world.buildings) {
|
||||
kinds[b.kind] = (kinds[b.kind] ?? 0) + 1;
|
||||
floors += b.floors.length;
|
||||
units += b.units.length;
|
||||
beds += b.beds;
|
||||
for (const f of b.floors) {
|
||||
rooms += f.rooms.length;
|
||||
props += f.props.length;
|
||||
doors += f.doors.length;
|
||||
windows += f.windows.length;
|
||||
for (const r of f.rooms) roomKinds[r.kind] = (roomKinds[r.kind] ?? 0) + 1;
|
||||
}
|
||||
if (b.floors[0] && !b.floors[0].doors.some((d) => d.rooms[1] === 'outside')) noEntrance++;
|
||||
}
|
||||
console.log(`${dt} ms; buildings ${world.buildings.length}, areas ${world.areas.length}, roads ${world.roads.length}, street props ${world.props.length}`);
|
||||
console.log('kinds', kinds);
|
||||
console.log(`floors ${floors}, rooms ${rooms}, doors ${doors}, windows ${windows}, furniture ${props}, units ${units}, beds ${beds}, no entrance ${noEntrance}`);
|
||||
console.log('rooms', roomKinds);
|
||||
const json = JSON.stringify(world);
|
||||
console.log(`world json ${(json.length / 1e6).toFixed(1)} MB`);
|
||||
if (out) writeFileSync(out, json);
|
||||
Reference in new issue
Block a user