控制网复测平面基准归算程序(包含控制网复测平面基准计算,平面控制网稳定性计算,水准测段高差稳定计算三个程序功能)
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

WDcompute.py 20KB

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