案例九:生成沉降分析报告

案例概述

本案例从 GDIM 读取沉降点信息与累计沉降数据,按所选监测点绘制沉降曲线图,进行沉降回归分析,最后按 Word 模板输出沉降分析报告。

你将学到

PipeLine 中连接读表、回归分析、图表绘制、报告输出,生成可在 GDIM 上运行的 .pipe 应用。

  • GdimTableReader 读取沉降点信息表与累计沉降数据。

  • AddTableColumns 转换累计沉降数据,TimeSeriesRegression 进行双曲线/指数时序回归。

  • LineChartPlotterScatterChartPlotterPlotMerger 绘制及合并沉降预测曲线和沉降散点图。

  • DocDataWriterMergeDocDataDocPrinter 将表格、回归结果与图表写入 Word 报告。

实现思路

  1. 创建 GdimTableReader,读取「沉降点信息表」与「累计沉降数据」,用 TablesQuerytpl_number 筛选所选监测点。

  2. TableSelector 提取累计沉降表,AddTableColumns 生成「观测累计沉降」列。

  3. TimeSeriesRegression 进行回归分析,得到预测曲线数据与回归参数;DocDataWriter 将筛选后的点信息转为报告数据。

  4. 绘制累计沉降折线图、预测曲线与观测散点图,PlotMerger 将预测曲线与散点图合并为对比图并导出图片。

  5. 各分支经 DocDataWriter 转为 DocDataMergeDocData 合并后由 DocPrinter 按模板输出 .docx 文件。

关键代码

本例关键在于时序回归、图表合并与报告数据汇总,对应代码如下。

query_table = TablesQuery("QueryTable")
query_table.query_template = "`沉降点编号` == {tpl_number}"
query_table.template_variables = {
    "tpl_number": TemplateVariableConfig(
        title="沉降点编号",
        value_type="str",
        schema_type="auto_select",
    )
}

regression_table = TimeSeriesRegression("RegressionLineData")
regression_table.model_type = "hyperbolic"
regression_table.prediction_time = 365

plot_merger = PlotMerger("PlotMerger")
plot_merger.add_dynamic_ports_in("InputPlotData1")
plot_merger.add_dynamic_ports_in("InputPlotData2")

merge_doc_data = MergeDocData("MergeDocData")
merge_doc_data.add_dynamic_ports_in("InputDataDocData")
merge_doc_data.add_dynamic_ports_in("InputRegressionDocData")
merge_doc_data.add_dynamic_ports_in("InputImageDocData")
merge_doc_data.add_dynamic_ports_in("InputSettlementLineDocData")

pipeline.add_links(
    plot_line.OutputPlotData >> plot_merger.InputPlotData1
    | plot_sactter.OutputPlotData >> plot_merger.InputPlotData2
    | merge_doc_data.OutputDocData >> print_doc.InputDocData
)
pipeline.run()

更进一步

完整代码请查看以下链接:

settlementReport.py