python 在測繪作業中的一些小應用(與cad互動)-1
雖然筆者已經基本上告別了本科的測繪工程專業,但是筆者的本科同學他們在實際作業中難免會遇到一些批量化、重複性勞動問題,如果會程式設計,寫上一個小指令碼,無疑會提高工作效率。
下面是筆者本科同學處理測量資料時遇到的問題,筆者通過python與CAD的互動完美的解決了!
問題1:提取斷面上地性線上的高程
問題2:場平設計高程,十字絲交點的座標(x,y,z)
首先,python 作為一個膠水語言,與各行各業的介面是無與倫比,與cad的介面庫有:autocad、dxfgrabber、dxfwrite。筆者目前就知道這三個,孤陋寡聞。如有興趣,可以關注freecad,一個開源的python 與cad軟體。
筆者程式使用的是dxfgrabber庫,讀取dxf檔案。
對於第一個問題:
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_()
“`
相關推薦
python 在測繪作業中的一些小應用(與cad互動)-1
雖然筆者已經基本上告別了本科的測繪工程專業,但是筆者的本科同學他們在實際作業中難免會遇到一些批量化、重複性勞動問題,如果會程式設計,寫上一個小指令碼,無疑會提高工作效率。 下面是筆者本科同學處理測量資
關於mybaties中的一些小問題(不定時更新)
select id="searchproductInfoByQuery" resultMap="ProductMap"> SELECT * FROM (select ROWNUM RN,A.* from PRODUCTINFO A where CATALOGID=#{que
ADO.NET中DataTable的應用(讀書筆記4)
errors 訪問 cep ati 設置 datarow ember for sql 一.思維導圖 二.知識點描述 DataTable是一個臨時保存數據的網格虛擬表(表示內存中數據的一個表。) 1.用法介紹: (1)可以使用相應的 DataTable 構造函數創建 Da
msgsnd函式 msgrcv函式的一些小問題(IPC_NOWAIT慎用!)
這兩個函式別看它簡單,真的是一不小心就會出錯的啊 報錯1:msgsnd: Invalid argument msgrcv: Argument list too long 這真的是一個最常見的錯誤了。。。歸根究底是緩衝區長度的問題 1⃣️這個問題我出錯後修復之後竟然無法重現錯誤了。
Python列印list中的所有元素(list巢狀)
#!/usr/bin/python # _*_ coding: UTF-8 _*_ t=[1,2,3,[3,4,5,[5,4,3],5],1,2,[4,5],7,4,[6,34]] def func(L): for i in L:
實現antd下拉框動態新增內容(與資料庫互動)
antd下拉控制元件的動態內容新增(與資料庫互動) antd這個框架給開發帶來了極大的方便,但同時,我認為還有一些不方便的地方:常用的邏輯在文件中沒有體現。需要前端開發經驗的人才能快速上手,而我剛剛接觸這個東西,antd基本將所有常用的控制元件全都封裝了,包括select下拉框,在以往的開發當中,我常常將下
關於java的一些小知識(課程作業02)
整型 公開 實例 -1 更多 nbsp 使用 默認 第一個 1,在java源代碼中加空格註釋不會影響程序的編譯速度。 2,一個java類文件中真的只能有一個公有類嗎? 如果只在第一個public類裏面定義實體,或者兩個都不定義並沒有報錯且程序可以運行。每個編
WebStorm及emmet插件使用中的一些小技巧(持續更新)
TE sublime 上一個 最大化 lpad prev web 組成 toggle Ctrl+/ 或 Ctrl+Shift+/ 註釋(// 或者/*…*/ ) Shift+F6 重構-重命名 Ctrl+X 刪除行 Ctrl+D 復制行 Ctrl+G
python中一些小的知識點
asc byte 知識 error nbsp 中一 文件 users cte 1:只有數字,字符串有小數據池 小數據池:在一定範圍內,即使分別給兩兩個變量賦相等的值,它們的id地址還會是相同的 數字範圍: -5 ~ 256 字符串:1:不能有特殊字符 2:str*
nodejs在自然語言處理中的一些小應用
nodejs做自然語言處理是非常可行的,這次我做了一些小小的嘗試,一起來體驗一下吧。 因為還保持著對自然語言處理的那份熱愛,最近沒事的時候會把畢業論文翻出來看(畢業論文的課題就是關於自然語言處理的),然後在我的新部落格中加入了一些相關的處理,主要做了以下幾個
判斷點是否在多邊形內的Python實現及小應用(射線法)
判斷點是否在多邊形內的Python實現及小應用(射線法) 轉 https://www.jianshu.com/p/ba03c600a557 判斷一個點是否在多邊形內是處理空間資料時經常面對的需求,例如GIS中的點選功能、根據多邊形邊界篩選出位於多邊形內的點、求交集、篩選不在多邊形內
應用TP3.2.3的一些小問題(一)
好久沒寫部落格了,最近剛到青島這邊找工作,有一大堆的事情,加上第一個專案比較趕,一直也沒什麼時間更新下部落格。難得今天有時間,就把最近用TP3.2碰到的一些問題給總結一些,做個記錄吧。1、tp的<
python在網購中的小應用
週末看到蘇寧易購的搶購,研究了一下如果利用python做機器人來搶購 1. 搶購 先人工試驗了一下,結果太低估了秒殺的設計了,不僅有複雜的驗證碼,而且還有問題回答, 回答問題:"千金算盡還?來",其中?是什麼字;沒點文學修養,還沒辦法搶購了
redis 在 php 中的應用(Sorted-set篇)
區間 arr 基數 計算 元素 store size count body 上一篇:redis 在 php 中的應用(Set篇) 本文為我閱讀了 redis參考手冊 之後編寫,註意 php_redis 和 redis-cli 的區別(主要是返回值類型和參數用法) Redis
python簡單小程序(99乘法表)
while 解釋 兩個 位與 顯示 con pri 數字 i+1 1. #99乘法表#第一種 for i in range(1,10): s=‘‘ for j in range (1,i+1): s+=str(j)+‘*‘+str(i)+‘
python之路——作業:高級FTP(僅供參考)
ice 靜態 enc lose 自己的 創建目錄 返回 msg 組成 一、作業需求 1. 用戶加密認證2. 多用戶同時登陸3. 每個用戶有自己的家目錄且只能訪問自己的家目錄4. 對用戶進行磁盤配額、不同用戶配額可不同5. 用戶可以登陸server後,可切換目錄6. 查看當前
python Spatialite庫應用 (sqlite3擴展)
pytho cut imp geo sql 是個 logs lan 查詢 問題: 需要從Spatialite庫中使用python讀取內容,有個geometry字段,讀出來的東西是一串二進制字節。附最初代碼: import sqlite3 conn = sqlite
福州大學W班-團隊作業-隨堂小測(同學錄)成績
9.png 工作 htm 命令 soft 情況 總結 提交代碼 編寫 作業鏈接 https://edu.cnblogs.com/campus/fzu/FZUSoftwareEngineering1715W/homework/1246 作業要求 1、題目 即編寫一個
多路由器環境配置的一些小技巧(達內)
總結 color 條目 nag 知識 rip路由 內網 限制 images rip 的簡單應用,希望通過這個可以讓幹運維的同仁輕松一點實驗拓撲圖:實驗需求:當內網中有很多路由器或多層交換機是,不同網段間通信 ,需要配置動態路由,如手動配置很浪費時間,容易出錯,可以選擇使用r
java中一些小知識和面試問題
() set 返回值 初始 cep 裝箱 聲明 數據 允許 抽象類的總結幾點: · 抽象類與普通類相比最大的不同只是在於抽象類之中存在有抽象方法,所以在抽象類之中依 然可以定義屬性、構造方法等 · 抽象類聲明時不允許使用 final,抽象類必須要求有子類,