控制网复测平面基准归算程序(包含控制网复测平面基准计算,平面控制网稳定性计算,水准测段高差稳定计算三个程序功能)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624
  1. import sqlite3
  2. import os
  3. import math
  4. import numpy as np
  5. import math
  6. import numpy as np
  7. from PySide6.QtWidgets import QMessageBox
  8. # region 各种方法
  9. def to_utf8(text):
  10. str1 = text.encode('utf-8')
  11. return str1
  12. def jzys1(listy, zxzby, listx, zxzbx, sf):
  13. rlist = []
  14. listlen = len(listy)
  15. ll = 0
  16. while ll < listlen:
  17. # 第一个的值
  18. # num1 = round(((listx[ll] - zxzbx) / sf),0)
  19. # num2 = round(((listy[ll] - zxzby) / sf),0)
  20. num1 = listx[ll] - zxzbx
  21. num2 = listy[ll] - zxzby
  22. rlist.append(num1)
  23. rlist.append(num2)
  24. ll = ll + 1
  25. return rlist
  26. def jzys2(listy, zxzby, listx, zxzbx, sf):
  27. rlist = []
  28. listlen = len(listy)
  29. ll = 0
  30. while ll < listlen:
  31. # 第一个的值
  32. num2 = (-1) * (listx[ll] - zxzbx) / sf
  33. num1 = (listy[ll] - zxzby) / sf
  34. rlist.append(num1)
  35. rlist.append(num2)
  36. ll = ll + 1
  37. return rlist
  38. def jzys3(listy, aa, bb):
  39. rlist = []
  40. listlen = len(listy)
  41. ll = 0
  42. while ll < listlen:
  43. # 第一个的值
  44. num1 = aa
  45. num2 = bb
  46. rlist.append(num1)
  47. rlist.append(num2)
  48. ll = ll + 1
  49. return rlist
  50. def jzys4(listpasty, zxzbpasty, listpastx, zxzbpastx, listnewy, zxzbnewy, listnewx, zxzbnewx, sf):
  51. rlist = []
  52. listlen = len(listnewx)
  53. ll = 0
  54. while ll < listlen:
  55. num1 = (listpastx[ll] - listnewx[ll] - zxzbpastx + zxzbnewx) / sf
  56. num2 = (listpasty[ll] - listnewy[ll] - zxzbpasty + zxzbnewy) / sf
  57. rlist.append(num1)
  58. rlist.append(num2)
  59. ll = ll + 1
  60. return rlist
  61. def jzys5(listp, zxzbp, sf):
  62. rlist = []
  63. listlen = len(listp)
  64. ll = 0
  65. while ll < listlen:
  66. num1 = (listp[ll] - zxzbp) / sf
  67. rlist.append(num1)
  68. ll = ll + 1
  69. return rlist
  70. def jzys6(listp, num):
  71. rlist = []
  72. listlen = len(listp)
  73. ll = 0
  74. while ll < listlen:
  75. num1 = listp[ll] * num
  76. rlist.append(num1)
  77. ll = ll + 1
  78. return rlist
  79. def cjh(listp):
  80. rp = 0
  81. listlen = len(listp)
  82. ll = 0
  83. while ll < listlen:
  84. num1 = listp[ll] * listp[ll]
  85. rp = rp + num1
  86. ll = ll + 1
  87. return rp
  88. def cjh2(lista, listb):
  89. rp = 0
  90. listlen = len(lista)
  91. ll = 0
  92. while ll < listlen:
  93. num1 = lista[ll] * listb[ll]
  94. rp = rp + num1
  95. ll = ll + 1
  96. return rp
  97. def gsys(listnewp, jxlist1, jylist1, lxlist, lylist, arrz, sf, zxzbnewp, zxzbpastp, ii):
  98. # 新x+(矩阵[jx1 jy1 lx1 ly1]*矩阵z)*缩放-新重心坐标x+旧重心坐标x
  99. rlist = []
  100. listlen = len(listnewp)
  101. ll = 0
  102. while ll < listlen:
  103. arr0 = np.array((jxlist1[ll], jylist1[ll],
  104. lxlist[2 * ll + ii], lylist[2 * ll + ii]))
  105. arr1 = np.matmul(arr0, arrz)
  106. arr3 = sf * arr1
  107. newp = listnewp[ll] + arr3 - zxzbnewp + zxzbpastp
  108. rlist.append(newp)
  109. ll = ll + 1
  110. return rlist
  111. def xcys(newlist, pastlist):
  112. listlen = len(newlist)
  113. ll = 0
  114. rlist = []
  115. while ll < listlen:
  116. num1 = newlist[ll] - pastlist[ll]
  117. num2 = num1 * 1000
  118. rlist.append(num2)
  119. ll = ll + 1
  120. return rlist
  121. def takeFirst(elem):
  122. return elem[0]
  123. # endregion
  124. def insert_into_database1(database, pastname, newname, beforename, excelname, listname1, listpastx1, listpasty1,
  125. listcgcs1, listbex, listbey, sxylist, wypd, gsx, gsy, listcgcs):
  126. # 转换下汉字
  127. utf_tn = to_utf8(excelname)
  128. utf_nn = to_utf8(newname)
  129. utf_pn = to_utf8(pastname)
  130. utf_bn = to_utf8(beforename)
  131. utf_bx = to_utf8('变形')
  132. utf_wd = to_utf8('稳定')
  133. # 将结果输出到数据库
  134. db1 = sqlite3.connect(database)
  135. # 获取游标
  136. cursor1 = db1.cursor()
  137. # 先清除已有数据,用来更新
  138. try:
  139. sqlstr3 = 'delete from WD_Result_Param WHERE TableName = ?'
  140. sqlstr4 = 'delete from WD_Result_Point WHERE TableName = ?'
  141. cursor1.execute(sqlstr3, (utf_tn,))
  142. cursor1.execute(sqlstr4, (utf_tn,))
  143. except:
  144. pass
  145. cursor1.execute(
  146. 'INSERT INTO WD_Result_Param(TableName,Last_ResultName,New_ResultName,Formula_X1,Formula_X2,Formula_X3,Formula_Y1,Formula_Y2,Formula_Y3) VALUES(?,?,?,?,?,?,?,?,?)',
  147. (utf_tn, utf_pn, utf_nn, sxylist[0], sxylist[1], sxylist[2], sxylist[3], sxylist[4], sxylist[5],))
  148. # WD_Result_Point的输入
  149. kk = -1
  150. kk1 = -1
  151. if (-1) in listcgcs:
  152. kk = 1
  153. # 记位移点个数
  154. wyd = 0
  155. for lname in listname1:
  156. # 获取对应索引号
  157. index1 = listname1.index(lname)
  158. PointName = lname
  159. First_X = listbex[index1]
  160. First_Y = listbey[index1]
  161. Last_X = listpastx1[index1]
  162. Last_Y = listpasty1[index1]
  163. Last_Wight = listcgcs1[index1]
  164. New_Wight = listcgcs[index1]
  165. # 位移点
  166. if New_Wight == -1:
  167. # 获取他原本的坐标和初始改算值进行对比
  168. for smx in jslist:
  169. if First_X == smx[0] and First_Y == smx[1]:
  170. numa3 = sxylist[0] * jslist1[index1][0]
  171. numa4 = sxylist[1] * jslist1[index1][1]
  172. numa5 = numa3 + numa4 + sxylist[2]
  173. numa6 = sxylist[3] * jslist1[index1][0]
  174. numa7 = sxylist[4] * jslist1[index1][1]
  175. numa8 = numa6 + numa7 + sxylist[5]
  176. Result_X = numa5
  177. Result_Y = numa8
  178. New_Wight = 1
  179. numb1 = (numa5 - First_X) * 1000
  180. numb2 = (numa8 - First_Y) * 1000
  181. numb3 = numb1 * numb1
  182. numb4 = numb2 * numb2
  183. numb5 = math.sqrt(numb3 + numb4)
  184. New_FirstX = numb1
  185. New_FirstY = numb2
  186. New_FirstP = numb5
  187. # 新-首有个位移判定
  188. if numb5 > wypd:
  189. NFDis_Ass = utf_bx
  190. else:
  191. NFDis_Ass = utf_wd
  192. numc1 = (numa5 - Last_X) * 1000
  193. numc2 = (numa8 - Last_Y) * 1000
  194. numc3 = numc1 * numc1
  195. numc4 = numc2 * numc2
  196. numc5 = math.sqrt(numc3 + numc4)
  197. New_LastX = numc1
  198. New_LastY = numc2
  199. New_LastP = numc5
  200. NLDis_Ass = utf_bx
  201. kk1 = 1
  202. wyd = wyd + 1
  203. break
  204. # 不是位移点
  205. else:
  206. # 全部都是稳定点
  207. if kk == -1:
  208. num3 = Last_X * Last_Wight
  209. num4 = num3 + gsx[index1]
  210. num5 = Last_Wight + 1
  211. num6 = num4 / num5
  212. num7 = Last_Y * Last_Wight
  213. num8 = num7 + gsy[index1]
  214. num10 = num8 / num5
  215. Result_X = num6
  216. Result_Y = num10
  217. New_Wight = num5
  218. numd1 = (num6 - First_X) * 1000
  219. numd2 = (num10 - First_Y) * 1000
  220. numd3 = numd1 * numd1
  221. numd4 = numd2 * numd2
  222. numd5 = math.sqrt(numd3 + numd4)
  223. New_FirstX = numd1
  224. New_FirstY = numd2
  225. New_FirstP = numd5
  226. # 新-首有个位移判定
  227. if numd5 > wypd:
  228. NFDis_Ass = utf_bx
  229. else:
  230. NFDis_Ass = utf_wd
  231. nume1 = (num6 - Last_X) * 1000
  232. nume2 = (num10 - Last_Y) * 1000
  233. nume3 = nume1 * nume1
  234. nume4 = nume2 * nume2
  235. nume5 = math.sqrt(nume3 + nume4)
  236. New_LastX = nume1
  237. New_LastY = nume2
  238. New_LastP = nume5
  239. NLDis_Ass = utf_wd
  240. # 有位移点,且已经走过了
  241. if kk == 1 and kk1 == 1:
  242. num3 = Last_X * Last_Wight
  243. num4 = num3 + gsx[index1 - wyd]
  244. num5 = Last_Wight + 1
  245. num6 = num4 / num5
  246. num7 = Last_Y * Last_Wight
  247. num8 = num7 + gsy[index1 - wyd]
  248. num10 = num8 / num5
  249. Result_X = num6
  250. Result_Y = num10
  251. New_Wight = num5
  252. numd1 = (num6 - First_X) * 1000
  253. numd2 = (num10 - First_Y) * 1000
  254. numd3 = numd1 * numd1
  255. numd4 = numd2 * numd2
  256. numd5 = math.sqrt(numd3 + numd4)
  257. New_FirstX = numd1
  258. New_FirstY = numd2
  259. New_FirstP = numd5
  260. # 新-首有个位移判定
  261. if numd5 > wypd:
  262. NFDis_Ass = utf_bx
  263. else:
  264. NFDis_Ass = utf_wd
  265. nume1 = (num6 - Last_X) * 1000
  266. nume2 = (num10 - Last_Y) * 1000
  267. nume3 = nume1 * nume1
  268. nume4 = nume2 * nume2
  269. nume5 = math.sqrt(nume3 + nume4)
  270. New_LastX = nume1
  271. New_LastY = nume2
  272. New_LastP = nume5
  273. NLDis_Ass = utf_wd
  274. # 有位移点,但没有走过
  275. if kk == 1 and kk1 == -1:
  276. num3 = Last_X * Last_Wight
  277. num4 = num3 + gsx[index1]
  278. num5 = Last_Wight + 1
  279. num6 = num4 / num5
  280. num7 = Last_Y * Last_Wight
  281. num8 = num7 + gsy[index1]
  282. num10 = num8 / num5
  283. Result_X = num6
  284. Result_Y = num10
  285. New_Wight = num5
  286. numd1 = (num6 - First_X) * 1000
  287. numd2 = (num10 - First_Y) * 1000
  288. numd3 = numd1 * numd1
  289. numd4 = numd2 * numd2
  290. numd5 = math.sqrt(numd3 + numd4)
  291. New_FirstX = numd1
  292. New_FirstY = numd2
  293. New_FirstP = numd5
  294. # 新-首有个位移判定
  295. if numd5 > wypd:
  296. NFDis_Ass = utf_bx
  297. else:
  298. NFDis_Ass = utf_wd
  299. nume1 = (num6 - Last_X) * 1000
  300. nume2 = (num10 - Last_Y) * 1000
  301. nume3 = nume1 * nume1
  302. nume4 = nume2 * nume2
  303. nume5 = math.sqrt(nume3 + nume4)
  304. New_LastX = nume1
  305. New_LastY = nume2
  306. New_LastP = nume5
  307. NLDis_Ass = utf_wd
  308. # 在这里整体输出
  309. cursor1.execute(
  310. 'INSERT INTO WD_Result_Point(TableName,First_ResultName,Last_ResultName,New_ResultName,First_X,First_Y,Last_X,Last_Y,Result_X,Result_Y,Last_Wight,New_Wight,New_FirstX,New_FirstY,New_FirstP,NFDis_Ass,New_LastX,New_LastY,New_LastP,NLDis_Ass,PointName) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)',
  311. (
  312. utf_tn, utf_bn, utf_pn, utf_nn, First_X, First_Y, Last_X, Last_Y, Result_X, Result_Y, Last_Wight,
  313. New_Wight,
  314. New_FirstX, New_FirstY, New_FirstP, NFDis_Ass, New_LastX, New_LastY, New_LastP, NLDis_Ass, PointName,))
  315. # 数据库执行
  316. db1.commit()
  317. # 做完一切后,先关闭游标,再关闭数据库
  318. cursor1.close()
  319. db1.close()
  320. gszbx = []
  321. gszby = []
  322. jslist = []
  323. jslist1 = []
  324. def bhjs(listcgcs1, listname1, listpastx1, listpasty1, wypd, listname, listnewx, listnewy, listpastx, listpasty, points,
  325. listcgcs, listbex, listbey, sf, dbpath, befname, finalname, lastname, js, file_name):
  326. np.set_printoptions(suppress=False)
  327. # pt用于给点数point计数
  328. # point会随着回递函数而减少
  329. pt = 0
  330. sumnewx = 0
  331. sumnewy = 0
  332. sumpastx = 0
  333. sumpasty = 0
  334. while pt < points:
  335. sumnewx = sumnewx + listnewx[pt]
  336. sumnewy = sumnewy + listnewy[pt]
  337. sumpastx = sumpastx + listpastx[pt]
  338. sumpasty = sumpasty + listpasty[pt]
  339. pt = pt + 1
  340. # 计算4个重心坐标(最新一期和上一期的)
  341. zxzbnewx = round((sumnewx / points), 7)
  342. zxzbnewy = round((sumnewy / points), 7)
  343. zxzbpastx = round((sumpastx / points), 7)
  344. zxzbpasty = round((sumpasty / points), 7)
  345. # 先计算平移参数
  346. # pycsx = abs(zxzbnewx - zxzbpastx) * 1000
  347. # pycsy = abs(zxzbnewy - zxzbpasty) * 1000
  348. pycsx = abs(zxzbnewx - zxzbpastx)
  349. pycsy = abs(zxzbnewy - zxzbpasty)
  350. # 分别得k,sita的值
  351. klist = jzys1(listnewy, zxzbnewy, listnewx, zxzbnewx, sf)
  352. slist = jzys2(listnewy, zxzbnewy, listnewx, zxzbnewx, sf)
  353. # 得dx,dy
  354. dxlist = jzys3(listnewy, 1, 0)
  355. dylist = jzys3(listnewy, 0, 1)
  356. # 矩阵太难用了,还是手动计算
  357. # 分别计算k、s、dx、dy的乘积和
  358. k2 = cjh(klist)
  359. s2 = cjh(slist)
  360. dx2 = cjh(dxlist)
  361. dy2 = cjh(dylist)
  362. # 这里再创建矩阵1
  363. arr1 = np.array(((k2, 0, 0, 0), (0, s2, 0, 0),
  364. (0, 0, dx2, 0), (0, 0, 0, dy2)))
  365. # 矩阵1的逆矩阵矩阵2
  366. arr2 = np.linalg.inv(arr1)
  367. # 求矩阵l
  368. llist = jzys4(listpasty, zxzbpasty, listpastx, zxzbpastx,
  369. listnewy, zxzbnewy, listnewx, zxzbnewx, sf)
  370. # 得到数列e1,e2,e3,e4
  371. e1 = cjh2(klist, llist)
  372. e2 = cjh2(slist, llist)
  373. e3 = cjh2(dxlist, llist)
  374. e4 = cjh2(dylist, llist)
  375. arrl = np.array(((e1), (e2), (e3), (e4)))
  376. # 得到矩阵z
  377. arrz = np.matmul(arr2, arrl)
  378. # 求转换矩阵
  379. jxlist1 = jzys5(listnewx, zxzbnewx, sf)
  380. jylist1 = jzys5(listnewy, zxzbnewy, sf)
  381. jxlist2 = jylist1
  382. # jylist2 = jxlist1 * (-1)
  383. jylist2 = jzys6(jxlist1, -1)
  384. lxlist = jzys3(jylist1, 1, 0)
  385. lylist = jzys3(jylist1, 0, 1)
  386. # 求改算坐标
  387. gsx = gsys(listnewx, jxlist1, jylist1, lxlist,
  388. lylist, arrz, sf, zxzbnewx, zxzbpastx, 0)
  389. gsy = gsys(listnewy, jxlist2, jylist2, lxlist,
  390. lylist, arrz, sf, zxzbnewy, zxzbpasty, 1)
  391. # 还是要先求较差
  392. xcx = xcys(gsx, listpastx)
  393. xcy = xcys(gsy, listpasty)
  394. # 这里记录下第一次所有点的改算坐标
  395. if js == 0:
  396. lengs = len(gsx)
  397. xx = 0
  398. while xx < lengs:
  399. gszbx.append(gsx[xx])
  400. gszby.append(gsy[xx])
  401. zblist1 = []
  402. zblist1.append(listbex[xx])
  403. zblist1.append(listbey[xx])
  404. zblist1.append(gsx[xx])
  405. zblist1.append(gsy[xx])
  406. zblist1.append(xcx[xx])
  407. zblist1.append(xcy[xx])
  408. jslist.append(zblist1)
  409. zblist2 = []
  410. zblist2.append(listnewx[xx])
  411. zblist2.append(listnewy[xx])
  412. jslist1.append(zblist2)
  413. xx = xx + 1
  414. # 后面不需要经过这个if
  415. # 判定方式是用差值平方和和位移对比
  416. gxpd = 0
  417. lenxc = len(xcx)
  418. yy = 0
  419. while yy < lenxc:
  420. sumxcx = xcx[yy] * xcx[yy]
  421. sumxcy = xcy[yy] * xcy[yy]
  422. sumxc = sumxcx + sumxcy
  423. xcpd = math.sqrt(sumxc)
  424. if xcpd > wypd:
  425. gxpd = -1
  426. break
  427. yy = yy + 1
  428. if gxpd == 0:
  429. # 输出之前把转换参数都算出来
  430. # X=(z1+1)*x+z2*y+(旧重心坐标x-新重心坐标x-新重心坐标x*z1-新重心坐标y*z2+z3)
  431. # Y=(-z2)*x+(z1+1)*y+(z1*新重心坐标y+新重心坐标x*z2+z4+旧重心坐标y-新重心坐标y)
  432. n1 = float(arrz[0]) + 1
  433. n2 = float(arrz[1])
  434. s1 = zxzbnewx * float(arrz[0])
  435. s2 = zxzbnewy * float(arrz[1])
  436. n3 = zxzbpastx - zxzbnewx - s1 - s2 + float(arrz[2])
  437. n4 = (-1) * float(arrz[1])
  438. n5 = n1
  439. s3 = (-1) * float(arrz[0]) * zxzbnewy
  440. s4 = float(arrz[1]) * zxzbnewx
  441. n6 = s3 + s4 + float(arrz[3]) + zxzbpasty - zxzbnewy
  442. sxylist = []
  443. sxylist.append(n1)
  444. sxylist.append(n2)
  445. sxylist.append(n3)
  446. sxylist.append(n4)
  447. sxylist.append(n5)
  448. sxylist.append(n6)
  449. # 输出
  450. relist1 = []
  451. relist1.append(listname)
  452. relist1.append(xcx)
  453. relist1.append(xcy)
  454. relist1.append(listcgcs)
  455. relist1.append(gszbx)
  456. relist1.append(gszby)
  457. relist1.append(sxylist)
  458. # 存入数据库
  459. insert_into_database1(dbpath, lastname, finalname, befname, file_name, listname1, listpastx1, listpasty1,
  460. listcgcs1, listbex, listbey, sxylist, wypd, gsx, gsy, listcgcs)
  461. else:
  462. # 先把所有的合在一起,方便删除
  463. lenlist1 = len(xcx)
  464. ii = 0
  465. relist1 = []
  466. while ii < lenlist1:
  467. smlist1 = []
  468. nn2 = xcx[ii] * xcx[ii]
  469. mm2 = xcy[ii] * xcy[ii]
  470. nm2 = math.sqrt(nn2 + mm2)
  471. smlist1.append(nm2)
  472. smlist1.append(listname[ii])
  473. smlist1.append(listnewx[ii])
  474. smlist1.append(listnewy[ii])
  475. smlist1.append(listpastx[ii])
  476. smlist1.append(listpasty[ii])
  477. relist1.append(smlist1)
  478. ii = ii + 1
  479. # 直接删除最大的那个
  480. relist1.sort(key=takeFirst, reverse=True)
  481. num1 = relist1[0]
  482. # 获取name
  483. num2 = num1[1]
  484. ii2 = 0
  485. mm2 = 0
  486. while ii2 < lenlist1:
  487. if listname[ii2] == num2:
  488. del listname[ii2]
  489. del listnewx[ii2]
  490. del listnewy[ii2]
  491. del listpastx[ii2]
  492. del listpasty[ii2]
  493. points = points - 1
  494. break
  495. else:
  496. ii2 = ii2 + 1
  497. while mm2 < len(listcgcs):
  498. if listname1[mm2] == num2:
  499. listcgcs[mm2] = -1
  500. break
  501. else:
  502. mm2 = mm2 + 1
  503. print(" Finish!")
  504. js1 = 1
  505. bhjs(listcgcs1, listname1, listpastx1, listpasty1, wypd, listname, listnewx, listnewy, listpastx,
  506. listpasty, points, listcgcs, listbex, listbey, sf, dbpath, befname, finalname, lastname, js1, file_name)
  507. def tablein(dbpath, file_name):
  508. # 收集每一列的数据,方便后期计算
  509. listname1 = []
  510. listpastx1 = []
  511. listpasty1 = []
  512. listcgcs1 = []
  513. listname = []
  514. listnewx = []
  515. listnewy = []
  516. listpastx = []
  517. listpasty = []
  518. # 成果次数
  519. listcgcs = []
  520. # 最早的
  521. listbex = []
  522. listbey = []
  523. points = 0
  524. # 查询,提取需要的数据
  525. db2 = sqlite3.connect(dbpath)
  526. cursor2 = db2.cursor()
  527. utfstr1 = to_utf8(file_name)
  528. sqlstr1 = 'SELECT * FROM WD_Input_Point WHERE TableName = ?'
  529. cursor2.execute(sqlstr1, (utfstr1,))
  530. all_da = cursor2.fetchall()
  531. for da in all_da:
  532. listbex.append(da[4])
  533. listbey.append(da[5])
  534. listpastx.append(da[6])
  535. listpastx1.append(da[6])
  536. listpasty.append(da[7])
  537. listpasty1.append(da[7])
  538. listnewx.append(da[8])
  539. listnewy.append(da[9])
  540. listcgcs.append(da[10])
  541. listcgcs1.append(da[10])
  542. points = points + 1
  543. listname.append(da[11])
  544. listname1.append(da[11])
  545. sqlstr2 = 'SELECT * FROM WD_Input_Param WHERE TableName = ?'
  546. cursor2.execute(sqlstr2, (utfstr1,))
  547. all_par = cursor2.fetchall()
  548. befname = all_par[0][0].decode('utf-8')
  549. lastname = all_par[0][1].decode('utf-8')
  550. finalname = all_par[0][2].decode('utf-8')
  551. # pjbc是平均边长
  552. # fxzwc是方向中误差,zrbzwc是最弱边边长相对中误差,pjbcs是平均边数,pjfxs是平均方向数,sf是缩放值
  553. # 新增总边数zbs,总方向数zfxs
  554. # 先计算位移判断值
  555. pjbc = all_par[0][3]
  556. fxzwc = all_par[0][4]
  557. zbs = all_par[0][5]
  558. zfxs = all_par[0][7]
  559. sf = all_par[0][9]
  560. pjbcs = zbs / points
  561. pjfxs = zfxs / points
  562. # 再拆细点
  563. wy1 = pjbc / 1000
  564. wy2 = wy1 + 1
  565. wypd1 = wy2 * wy2 / pjbcs
  566. # 好像206.265是常数系数
  567. wy3 = pjbc * fxzwc / 206.265
  568. wypd2 = wy3 * wy3 / pjfxs
  569. wypd3 = math.sqrt(wypd1 + wypd2)
  570. wypd = round((wypd3 * 2 * math.sqrt(2)), 9)
  571. wypd0 = wypd
  572. js = 0
  573. return listcgcs1, listname1, listpastx1, listpasty1, wypd0, listname, listnewx, listnewy, listpastx, listpasty, points, listcgcs, listbex, listbey, sf, befname, finalname, lastname, js
  574. # 主函数 计算
  575. def main_function(file_name, dbpath):
  576. try:
  577. # 从数据库中调用
  578. listcgcs1, listname1, listpastx1, listpasty1, wypd0, listname, listnewx, listnewy, listpastx, listpasty, points, listcgcs, listbex, listbey, sf, befname, finalname, lastname, js = tablein(
  579. dbpath, file_name)
  580. # 计算
  581. bhjs(listcgcs1, listname1, listpastx1, listpasty1, wypd0, listname, listnewx, listnewy, listpastx, listpasty,
  582. points, listcgcs, listbex, listbey, sf, dbpath, befname, finalname, lastname, js, file_name)
  583. QMessageBox.information(None, "提示", f"文件 '{file_name}' 计算成功!")
  584. return 1
  585. except Exception as e:
  586. QMessageBox.critical(None, "错误", f"文件 '{file_name}' 计算失败!请检查表格是否规范。")
  587. return -1