TIN構成輪郭線によってPythonの離散データポイント

エディトリアル(重要)

この学期最後のグレード自動描画プログラムの輪郭を打ち出し入れ言葉が言及することができますクラスの教師約lispのCAD二次開発のコースがあり、私はクラスの後に教師を頼むとき、「どのような言語シリーズは、それを行います?:「先生は言って非常に安全であるものは何でも私は、Pythonのmatplotlibのライブラリは非常にそれを持っていない等高線を描き、この伝達関数を、音楽を聞いたことありますか?髪のテストと教師離散点ファイルは、私がしようとするのを待つことができなかったときに来たとき。
これは、実際にライブラリを逃れるために、単純ではないことを発見しました
関数のパラメータは、輪郭Xを要する、Y、Z、Zは、(X、Y)の関数です。オペレーティング・オンライン記事の例には、紋切りました。Xには、X、Yグリッドnumpyのxのリストを生成linspaceとの最初の、とyのリストであり、Yは、次が重要である、オンラインの記事は言うでしょう便宜上(ここでは、Zは、Fを使用するようにXを代わりに、Y)、変数として(X、Y)の関数としてのZ値。これは聞くことが理にかなっています!しかし、...あなたは、あなたが実施例のZ = F(X、Y)を使用した後、グリッドの数を取る後5点の座標(x、y)に、グリッド内の25点が存在することになるたいとポイントは、彼がポイントの関数としてZを得ることができます。しかし、教師のテキストファイルが200個の以上のポイント、ドットを持って、ドットの水平および垂直方向の座標と標高は、あなたがはっきりアレンジ与えたので、私はオンラインの狂気の誤りによる方法を試みたが、最終的にはときあきらめ、正直古くなってLispのうちコンパイルの使用方法などのリアル。
しかし、コースの地理情報システムこの学期私は少し考えだったように。それは、この幾何補正の内容に来るとき、先生に言えばリサンプリング、リサンプリングが知られている点に基づいて、未知の点についての情報を得ることができ、その後、私は、グリッドのx、yのリサンプリングを投稿することができます。次のプロセスがあります。

特定のプロセス

最初は、データを読み取るための教師を開いてみましょう、私のポイントについてのテキストファイルを送りました。
ここに画像を挿入説明データの各行、最初のドット第2、第3、それぞれX、Y座標、第四の標高データていることが分かります。

f=open(r'C:\Users\58381\Desktop\等高线绘制数据.txt','r')
x=[]#创建三个列表用于存放点的数据
y=[]
h=[]
for line in f:
    p=line[:-1]#去掉每行最后的换行符
    a=p.split(',')#因为每行每个数据之间用","隔开,去掉逗号。
    x.append(float(a[1]))
    y.append(float(a[2]))
    h.append(float(a[3]))
f.close()

その後のx、yのポイントテーブルを置きますか

import numpy as np
points=[]
for i in range(len(x)):
    point=[]
    point.append(x[i])
    point.append(y[i])   
    points.append(point)
points=np.array(points)

これらの点は、グリッド化

xi=np.linspace(min(x),max(x),300)
yi=np.linspace(min(y),max(y),300)

xi,yi=np.meshgrid(xi,yi)#网格化

次のステップは、これらのリサンプリング点、つまり、補間関数を使用することです。scipy.interpolate Pythonライブラリの多くは、我々は、この関数が取るgriddataことができ、補間機能にあります。griddataについて、公式文書が言うには、この持っていた:
scipy.interpolate.griddata(ポイント、値、XI、メソッド、=「リニア」、fill_value = NaNに、Falseを再スケール=を)
あなたは、最初のパラメータを見ることができる点が、として理解することができています2番目の引数が値である既知のデータ点の座標は、これは、標高点を知られており、不明な点座標の標高と、つまり、点の座標を補間するための第三、第四れますメソッドのパラメータ。名に対応するリサンプリング法ニアレストネイバー法、バイリニア補間とキュービックは、「最も近い」、「線形」であるため、 「立方」、 異なる選択方法のさまざまな要件のために、最も遅いスピードが、補間最高のなめらかな曲線のキュービック。

from scipy.interpolate import griddata
zi=griddata(points,h,(xi,yi),method='cubic')

リサンプリングの値を取得した後、次いで輪郭線を描くことができます。

import matplotlib.pyplot as plt
plt.contour(xi,yi,zi)
plt.savefig(r'C:\Users\58381\Desktop\1.pdf')  #把得到的图保存为pdf的格式

結果は以下の通りである
ここに画像を挿入説明検査
次に等価点を追跡する輪郭を描き、誰もがTINの方法によって生成された輪郭線を知っている、ドローネ三角形最初に構築し、次いで、三角形のエッジ上の等価点に挿入されます。ここでは、既知のポイントのドロネー三角形から構築しました。示されているように
ここに画像を挿入説明
(青色のドットが点が知られている)を補間他の同等の高さ(赤)に従って得られたネットワークTINを構築するために見ることができ
ここに画像を挿入説明
、その後、我々は以前に生成された輪郭を見つけることができほとんど赤い点による

ここに画像を挿入説明グリッドが輪郭線データが生成されるため、データの精度が低下します。Caishuxueqian、批判補正を歓迎します!

最後に書かれました

実際には、この方法はあまりにもラフグリッド道を生成し、その輪郭のうち最終フィッティングは完璧ではありません。私は誰かがより良い方法を教えてことを願って、GRID TINによって生成された、非常に感謝!

おすすめ

転載: blog.csdn.net/qq_44171096/article/details/94721002