您的位置:首页 > 编程语言 > Python开发

python 在测绘作业中的一些小应用(与cad交互)-1

2018-02-02 22:33 651 查看
虽然笔者已经基本上告别了本科的测绘工程专业,但是笔者的本科同学他们在实际作业中难免会遇到一些批量化、重复性劳动问题,如果会编程,写上一个小脚本,无疑会提高工作效率。

下面是笔者本科同学处理测量数据时遇到的问题,笔者通过python与CAD的交互完美的解决了!

问题1:提取断面上地性线上的高程

问题2:场平设计高程,十字丝交点的坐标(x,y,z)

首先,python 作为一个胶水语言,与各行各业的接口是无与伦比,与cad的接口库有:autocad、dxfgrabber、dxfwrite。笔者目前就知道这三个,孤陋寡闻。如有兴趣,可以关注freecad,一个开源的python 与cad软件。

笔者程序使用的是dxfgrabber库,读取dxf文件。

对于第一个问题:笔者写了一个GUI

from PyQt5 import  QtWidgets
from cass import Ui_MainWindow
from PyQt5.QtWidgets import QFileDialog
import dxfgrabber
class height(QtWidgets.QMainWindow,Ui_MainWindow):
def __init__(self):
super(height,self).__init__()
self.setupUi(self)
self.openfile.triggered.connect(self.o1)
self.extract_h.triggered.connect(self.e1)
self.save_txt.triggered.connect(self.s1)
def o1(self):
self.file,ok=QFileDialog.getOpenFileName(self,"打开",None,"*.dxf")
def e1(self):
dxf=dxfgrabber.readfile(self.file)
h1=[]
c=[]
allGCD=[h for h in dxf.entities if h.layer=='GCD']
alldmx=[line for line in dxf.entities if line.layer=='dmx']
l1=[line for line in alldmx if line.dxftype=='LINE']
for heigh in allGCD:
h1.append(heigh.insert)
for i in l1:
c.append([i.start,i.end])
#计算每个线的斜率
k1=[]
for i in range(len(c)):
k1.append((c[i][1][1]-c[i][0][1])/(c[i][1][0]-c[i][0]0]))
#计算高程点与直线的斜率,#,以所有线的起点为基准,判断每个高程点和起点连线的斜率与所有线的斜率,如果相同,则高程点再地性线上
k2=[]
for i in range(len(c)):
for j in range(len(h1)):
k3=(h1[j][1]-c[i][0][1])/(h1[j][0]-c[i][0][0])
if abs(k3)-abs(k1[i])>-0.2 and abs(k3)-abs(k1[i])<0.2:
k2.append(j)
self.allresult_h=[]
for i in k2:
self.allresult_h.append(h1[i])
def s1(self):
path,ok=QFileDialog.getSaveFileName(self,"保存结果",None,"*.txt")
with open(path,'w') as file:
for line in self.allresult_h:
for i in line:
file.writelines(str(i)+',')
file.writelines('\n')
if __name__=='__main__':
import sys
app=QtWidgets.QApplication(sys.argv)
myapp=height()
myapp.show()
app.exec_()




“`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: