控制网复测平面基准归算程序(包含控制网复测平面基准计算,平面控制网稳定性计算,水准测段高差稳定计算三个程序功能)
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

GCshow.py 9.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. import itertools
  2. import sqlite3
  3. from PySide6.QtGui import QStandardItemModel, QStandardItem
  4. from PySide6.QtCore import QItemSelectionModel
  5. def main_function(ui, db_path, utf_en):
  6. # 确保 utf_en 是字节字符串
  7. if not isinstance(utf_en, bytes):
  8. utf_en = utf_en.encode('utf-8')
  9. # 设置 QTabWidget 的可见性和标签文本
  10. tabs_to_show = [(0, '水准测段高差计算成果表')]
  11. for index in range(ui.tabWidget.count()):
  12. visible = index in [t[0] for t in tabs_to_show]
  13. ui.tabWidget.setTabVisible(index, visible)
  14. for index, text in tabs_to_show:
  15. ui.tabWidget.setTabText(index, text)
  16. # 连接到数据库并执行查询
  17. db1 = sqlite3.connect(db_path)
  18. db1.text_factory = lambda x: str(x, 'utf-8')
  19. cursor1 = db1.cursor()
  20. # 查询 GC_Output_Point 表中的 TableName 字段
  21. query_table_names = "SELECT DISTINCT TableName FROM GC_Output_Point"
  22. cursor1.execute(query_table_names)
  23. query = """
  24. SELECT New_ID, New_ResultName, New_SPName, New_EPName, New_HDiff, New_RLen, Correct_Factor, Period_Diff, Dis_Ass
  25. FROM GC_Output_Point
  26. WHERE TableName = ?
  27. """
  28. cursor1.execute(query, (utf_en,))
  29. result = cursor1.fetchall()
  30. cursor1.close()
  31. db1.close()
  32. # 创建 QStandardItemModel 实例
  33. model = QStandardItemModel()
  34. model.setColumnCount(len(result[0]))
  35. # 设置表头
  36. headers = ['序号', '结果期数', '起点', '终点', '高差', '路线长', '修正数', '期间差异', '变形判定']
  37. model.setHorizontalHeaderLabels(headers)
  38. for row_data in result:
  39. items = []
  40. for i, item in enumerate(row_data):
  41. if i == 4 or i == 5: # 索引4(高差)
  42. item = f"{item:.6f}" # 格式化为6位小数
  43. elif i == 6: # 索引 6(修正数)
  44. item = f"{item:.2f}"
  45. elif i == 7: # 假设 Period_Diff 在索引 7
  46. if item is not None and isinstance(item, (int, float)):
  47. item = f"{item:.2f}" # 格式化为2位小数
  48. else:
  49. item = "" # 如果是 None 或非数字类型,显示空字符串
  50. elif i == 8: # 假设 Dis_Ass 在索引 8
  51. if item is not None and isinstance(item, str):
  52. item = item # 显示字符串内容
  53. else:
  54. item = "" # 如果是 None,显示空字符串
  55. items.append(QStandardItem(str(item)))
  56. model.appendRow(items)
  57. # 设置并展示表格
  58. ui.resultTableView.setModel(model)
  59. ui.resultTableView.show()
  60. # 隐藏 QLabel
  61. ui.default_remind.hide()
  62. def search_show_function(ui, db_path, utf_en):
  63. # 确保 utf_en 是字节字符串
  64. if not isinstance(utf_en, bytes):
  65. utf_en = utf_en.encode('utf-8')
  66. tabs_to_show = [(0, '输入数据'), (1, '水准测段高差计算成果表')]
  67. for index in range(ui.View.count()):
  68. visible = index in [t[0] for t in tabs_to_show]
  69. ui.View.setTabVisible(index, visible)
  70. for index, text in tabs_to_show:
  71. ui.View.setTabText(index, text)
  72. # 连接到数据库并执行查询
  73. db1 = sqlite3.connect(db_path)
  74. db1.text_factory = lambda x: str(x, 'utf-8')
  75. cursor1 = db1.cursor()
  76. # 查询 GC_Input_Point 表中的数据
  77. input_query = """
  78. SELECT New_ID, Last_ResultName, Last_SPName, Last_EPName, Last_HDiff, Last_RLen, New_ResultName, New_SPName, New_EPName, New_HDiff, New_RLen
  79. FROM GC_Input_Point
  80. WHERE TableName = ?
  81. """
  82. cursor1.execute(input_query, (utf_en,))
  83. input_result = cursor1.fetchall()
  84. # 查询 GC_Input_Param 表中的数据
  85. param_query = """
  86. SELECT ObservationLevel, Ms_Station, Last_StationCount, Last_SumHDiff, Last_SumRLen, New_StationCount, New_SumHDiff, New_SumRLen
  87. FROM GC_Input_Param
  88. WHERE TableName = ?
  89. """
  90. cursor1.execute(param_query, (utf_en,))
  91. param_result = cursor1.fetchall()
  92. # 创建 QStandardItemModel 实例
  93. input_model = QStandardItemModel()
  94. input_model.setColumnCount(len(input_result[0]) + 8) # 增加八列(2 + 6)
  95. # 设置表头
  96. input_headers = [
  97. '序号', '上期成果名', '上期测段起点', '上期测段终点', '上期高差', '上期路线长', '本期成果名',
  98. '本期测段起点', '本期测段终点',
  99. '本期高差', '本期路线长', '观测等级', '测站全中误差',
  100. '上次总测段数', '上期高差合计', '上期路线长合计', '本期总测段数', '本期高差合计', '本期路线长合计'
  101. ]
  102. input_model.setHorizontalHeaderLabels(input_headers)
  103. # 使用 itertools.zip_longest 处理长度不一致的情况
  104. for row_data, param_data in itertools.zip_longest(input_result, param_result, fillvalue=(None, None, None, None, None, None, None, None)):
  105. items = []
  106. for i, item in enumerate(row_data):
  107. if item is None:
  108. item = "" # 如果是 None,显示空字符串
  109. else:
  110. if i in [4, 5, 10, 11]: # 索引4,5,10,11(高差和路线长)
  111. item = f"{item:.6f}" # 格式化为6位小数
  112. items.append(QStandardItem(str(item)))
  113. # 添加新的列数据
  114. if param_data is not None:
  115. observation_level, ms_station, last_station_count, last_sum_hdiff, last_sum_rlen, new_station_count, new_sum_hdiff, new_sum_rlen = param_data
  116. else:
  117. observation_level, ms_station, last_station_count, last_sum_hdiff, last_sum_rlen, new_station_count, new_sum_hdiff, new_sum_rlen = "", "", "", "", "", "", "", ""
  118. # 确保 observation_level 和 ms_station 是字符串
  119. if observation_level is None:
  120. observation_level = ""
  121. if ms_station is None:
  122. ms_station = ""
  123. # 确保其他字段是字符串或格式化后的字符串
  124. if last_station_count is None:
  125. last_station_count = ""
  126. if last_sum_hdiff is None:
  127. last_sum_hdiff = ""
  128. else:
  129. last_sum_hdiff = f"{last_sum_hdiff:.6f}"
  130. if last_sum_rlen is None:
  131. last_sum_rlen = ""
  132. else:
  133. last_sum_rlen = f"{last_sum_rlen:.6f}"
  134. if new_station_count is None:
  135. new_station_count = ""
  136. if new_sum_hdiff is None:
  137. new_sum_hdiff = ""
  138. else:
  139. new_sum_hdiff = f"{new_sum_hdiff:.6f}"
  140. if new_sum_rlen is None:
  141. new_sum_rlen = ""
  142. else:
  143. new_sum_rlen = f"{new_sum_rlen:.6f}"
  144. items.append(QStandardItem(str(observation_level)))
  145. items.append(QStandardItem(f"{ms_station:.2f}" if isinstance(ms_station, (int, float)) else ""))
  146. items.append(QStandardItem(str(last_station_count)))
  147. items.append(QStandardItem(str(last_sum_hdiff)))
  148. items.append(QStandardItem(str(last_sum_rlen)))
  149. items.append(QStandardItem(str(new_station_count)))
  150. items.append(QStandardItem(str(new_sum_hdiff)))
  151. items.append(QStandardItem(str(new_sum_rlen)))
  152. input_model.appendRow(items)
  153. # 设置并展示输入数据表格
  154. ui.View.setTabText(0, '输入数据')
  155. ui.resultTableView1.setModel(input_model)
  156. ui.resultTableView1.show()
  157. # 隐藏 QLabel
  158. ui.default_remind1.hide()
  159. # 查询 GC_Output_Point 表中的数据
  160. output_query = """
  161. SELECT New_ID, New_ResultName, New_SPName, New_EPName, New_HDiff, New_RLen, Correct_Factor, Period_Diff, Dis_Ass
  162. FROM GC_Output_Point
  163. WHERE TableName = ?
  164. """
  165. cursor1.execute(output_query, (utf_en,))
  166. output_result = cursor1.fetchall()
  167. # 创建 QStandardItemModel 实例
  168. output_model = QStandardItemModel()
  169. output_model.setColumnCount(len(output_result[0]))
  170. # 设置表头
  171. output_headers = ['序号', '结果期数', '起点', '终点', '高差', '路线长', '修正数', '期间差异', '变形判定']
  172. output_model.setHorizontalHeaderLabels(output_headers)
  173. for row_data in output_result:
  174. items = []
  175. for i, item in enumerate(row_data):
  176. if i == 4 or i == 5: # 索引4(高差)和索引5(路线长)
  177. item = f"{item:.6f}" # 格式化为6位小数
  178. elif i == 6: # 索引 6(修正数)
  179. item = f"{item:.2f}"
  180. elif i == 7: # 假设 Period_Diff 在索引 7
  181. if item is not None and isinstance(item, (int, float)):
  182. item = f"{item:.2f}" # 格式化为2位小数
  183. else:
  184. item = "" # 如果是 None 或非数字类型,显示空字符串
  185. elif i == 8: # 假设 Dis_Ass 在索引 8
  186. if item is not None and isinstance(item, str):
  187. item = item # 显示字符串内容
  188. else:
  189. item = "" # 如果是 None,显示空字符串
  190. items.append(QStandardItem(str(item)))
  191. output_model.appendRow(items)
  192. # 设置并展示输出数据表格
  193. ui.View.setTabText(1, '水准测段高差计算成果表')
  194. ui.reconTableView1.setModel(output_model)
  195. ui.reconTableView1.show()
  196. # 返回一个选择模型
  197. selectionModel = QItemSelectionModel(input_model) # Item选择模型
  198. ui.resultTableView1.setSelectionModel(selectionModel)
  199. return selectionModel
  200. # 关闭数据库连接
  201. cursor1.close()
  202. db1.close()
  203. # 隐藏 QLabel
  204. ui.default_remind1.hide()