資源簡介
已知空間坐標和對應的屬性,利用python的matplotlib繪制等值線圖,可進行不規則的凹邊界約束。是本文原創博客https://blog.csdn.net/csubai07/article/details/106482015源文件

代碼片段和文件信息
#!/usr/bin/env?python
#?-*-?coding:?utf-8?-*-
#?@File??:?Drawscript.py
#?@Author:?白冬鑫
#?@Date??:?2020/6/1
#?@Desc??:?Drawscript.py?用途:
#?@license?:?Copyright(C)?中南大學?and?致力科技
#?@Contact?:?baidongxin07@csu.edu.cn;?baidongxin07@gmail.com
import?xlrd
import?numpy?as?np
from?scipy.interpolate?import?griddata
import?alphashape
from?matplotlib?import?pyplot?as?plt
plt.rcParams[‘font.sans-serif‘]?=?[‘Times?New?Roman‘]
plt.rcParams[‘axes.unicode_minus‘]?=?False
def?isPointinPolygon(point?rangelist):??#?[[00][11][01][00]]?[10.8]
????#?判斷是否在外包矩形內,如果不在,直接返回false
????lnglist?=?[]
????latlist?=?[]
????for?i?in?range(len(rangelist)?-?1):
????????lnglist.append(rangelist[i][0])
????????latlist.append(rangelist[i][1])
????#?print(lnglist?latlist)
????maxlng?=?max(lnglist)
????minlng?=?min(lnglist)
????maxlat?=?max(latlist)
????minlat?=?min(latlist)
????#?print(maxlng?minlng?maxlat?minlat)
????if?(point[0]?>?maxlng?or?point[0]?????????????point[1]?>?maxlat?or?point[1]?????????return?False
????count?=?0
????point1?=?rangelist[0]
????for?i?in?range(1?len(rangelist)):
????????point2?=?rangelist[i]
????????#?點與多邊形頂點重合
????????if?(point[0]?==?point1[0]?and?point[1]?==?point1[1])?or?(point[0]?==?point2[0]?and?point[1]?==?point2[1]):
????????????#?print(“在頂點上“)
????????????return?True
????????#?判斷線段兩端點是否在射線兩側?不在肯定不相交?射線(-∞,lat)(lnglat)
????????if?(point1[1]?=?point[1])?or?(point1[1]?>=?point[1]?and?point2[1]?????????????#?求線段與射線交點?再和lat比較
????????????point12lng?=?point2[0]?-?(point2[1]?-?point[1])?*?(point2[0]?-?point1[0])?/?(point2[1]?-?point1[1])
????????????#?print(point12lng)
????????????#?點在多邊形邊上
????????????if?(point12lng?==?point[0]):
????????????????#?print(“點在多邊形邊上“)
????????????????return?True
????????????if?(point12lng?????????????????count?+=?1
????????point1?=?point2
????#?print(count)
????if?count?%?2?==?0:
????????return?False
????else:
????????return?True
if?__name__?==?‘__main__‘:
????workbook?=?xlrd.open_workbook(“slope01-t.xlsx“)
????nsheet?=?workbook.nsheets
????#?求點集的邊界
????sheet?=?workbook.sheets()[0]
????nrows?=?sheet.nrows
????ncols?=?sheet.ncols
????verctices?=?[]
????x?=?[]
????y?=?[]
????value?=?[]
????for?ni?in?range(1?nrows):
????????xi?=?sheet.cell_value(ni?1)
????????yi?=?sheet.cell_value(ni?2)
????????vi?=?sheet.cell_value(ni?3)
????????x.append(xi)
????????y.append(yi)
????????value.append(vi)
????????verctices.append((xi?yi))
????#?計算邊界
????alpha?=?alphashape.optimizealpha(verctices)
????alpha_shape?=?alphashape.alphashape(verctices?alpha)
????boundary?=?alpha_shape.boundary.coords[:]
????#?將list轉為numpy的array
????x?y?z?=?np.array(x)?np.array(y)?np.array(value)
????#?準備待插值位置
????xi?=?np.linspace(x.min()?x.max()?200)
????yi?=?np.linspace(y.min()?y.max()?200)
????X?Y?=?np.meshgrid(xi?yi)
????#?插值
????Z?=?griddata((x?y)?z?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????25930??2020-06-01?21:34??slope01-t.xlsx
?????文件???????10904??2020-06-01?22:18??slope01.png
?????文件????????3625??2020-06-01?21:45??Drawsc
評論
共有 條評論