【python|python 在测绘作业中的一些小应用(与cad交互)-1】虽然笔者已经基本上告别了本科的测绘工程专业,但是笔者的本科同学他们在实际作业中难免会遇到一些批量化、重复性劳动问题,如果会编程,写上一个小脚本,无疑会提高工作效率。
下面是笔者本科同学处理测量数据时遇到的问题,笔者通过python与CAD的交互完美的解决了!
问题1:提取断面上地性线上的高程
问题2:场平设计高程,十字丝交点的坐标(x,y,z)
首先,python 作为一个胶水语言,与各行各业的接口是无与伦比,与cad的接口库有:autocad、dxfgrabber、dxfwrite。笔者目前就知道这三个,孤陋寡闻。如有兴趣,可以关注freecad,一个开源的python 与cad软件。
笔者程序使用的是dxfgrabber库,读取dxf文件。
对于第一个问题:笔者写了一个GUI
from PyQt5 importQtWidgets
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_()
文章图片
“`
推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍