feat(qgis): add editable traffic signal assemblies
This commit is contained in:
@@ -153,6 +153,7 @@ function writeDerivedConfig(area) {
|
||||
gpkg: area.outputs.gpkg,
|
||||
project: area.outputs.qgisProject,
|
||||
preview: area.outputs.qgisPreview,
|
||||
trafficSignalAssemblies: area.outputs.trafficSignalAssemblies,
|
||||
arrowScale: area.qgis.arrowScale,
|
||||
arrowMergeTriangles: area.qgis.arrowMergeTriangles,
|
||||
arrowOutlineSimplifyMeters: area.qgis.arrowOutlineSimplifyMeters,
|
||||
@@ -200,6 +201,7 @@ function buildIntermediates(area) {
|
||||
derivedConfig: fileRecord(derivedConfigPath),
|
||||
geojsonDir: fileRecord(area.outputs.geojsonDir),
|
||||
...sceneGeojsonRecords(area),
|
||||
trafficSignalAssemblies: fileRecord(area.outputs.trafficSignalAssemblies),
|
||||
trafficSignals: fileRecord(area.outputs.trafficSignals),
|
||||
gpkg: fileRecord(area.outputs.gpkg),
|
||||
qgisProject: fileRecord(area.outputs.qgisProject),
|
||||
@@ -207,6 +209,7 @@ function buildIntermediates(area) {
|
||||
},
|
||||
summary: {
|
||||
geojson: geojsonFeatureCounts(area),
|
||||
trafficSignalAssemblies: featureCount(area.outputs.trafficSignalAssemblies),
|
||||
},
|
||||
warnings: [],
|
||||
});
|
||||
@@ -241,10 +244,12 @@ function reimportGpkg(area) {
|
||||
outputs: {
|
||||
geojsonDir: fileRecord(area.outputs.geojsonDir),
|
||||
...sceneGeojsonRecords(area),
|
||||
trafficSignalAssemblies: fileRecord(area.outputs.trafficSignalAssemblies),
|
||||
trafficSignals: fileRecord(area.outputs.trafficSignals),
|
||||
},
|
||||
summary: {
|
||||
geojson: geojsonFeatureCounts(area),
|
||||
trafficSignalAssemblies: featureCount(area.outputs.trafficSignalAssemblies),
|
||||
},
|
||||
warnings: [],
|
||||
});
|
||||
@@ -253,10 +258,9 @@ function reimportGpkg(area) {
|
||||
function buildBlenderScene(area) {
|
||||
ensureFile(blenderExecutable(area), "Blender executable");
|
||||
ensureFile(path.join(repoRoot, "blender", "generate_scene.py"), "Blender scene generator");
|
||||
// Traffic signal anchors are derived from the current OSM input plus the
|
||||
// normalized stop-line/intersection layers. Regenerate them for every
|
||||
// Blender build so partial runs cannot reuse a stale signal topology after
|
||||
// the source OSM has changed.
|
||||
ensureFile(area.outputs.trafficSignalAssemblies, "Editable traffic signal assemblies");
|
||||
// Blender consumes the editable assembly layer; OSM only initializes it in
|
||||
// intermediates, so QGIS edits remain authoritative across later stages.
|
||||
writeTrafficSignals(area);
|
||||
ensureFile(area.outputs.trafficSignals, "Traffic signal anchors");
|
||||
fs.mkdirSync(path.dirname(area.outputs.blend), { recursive: true });
|
||||
@@ -300,6 +304,7 @@ function buildBlenderScene(area) {
|
||||
osm: fileRecord(area.input),
|
||||
geojsonDir: fileRecord(area.outputs.geojsonDir),
|
||||
...sceneGeojsonRecords(area),
|
||||
trafficSignalAssemblies: fileRecord(area.outputs.trafficSignalAssemblies),
|
||||
trafficSignals: fileRecord(area.outputs.trafficSignals),
|
||||
},
|
||||
outputs: {
|
||||
@@ -529,11 +534,7 @@ function writeCesiumPreview(area) {
|
||||
}
|
||||
|
||||
function writeTrafficSignals(area) {
|
||||
const signals = readTrafficSignals(
|
||||
path.join(area.outputs.geojsonDir, "vehicle_stop_lines.geojson"),
|
||||
path.join(area.outputs.geojsonDir, "intersection_surface.geojson"),
|
||||
area.input,
|
||||
);
|
||||
const signals = readTrafficSignals(area.outputs.trafficSignalAssemblies, area.input);
|
||||
fs.writeFileSync(area.outputs.trafficSignals, `${JSON.stringify(signals, null, 2)}\n`);
|
||||
console.log(`Traffic signals: ${signals.signals.length} anchors in ${area.outputs.trafficSignals}`);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user