大縮尺地図から小縮尺地図までの一般化された道路網地図を取得するために適用される線の一般化について研究しています。私は2つの操作と2つのアルゴリズムを使用しています。これは、シェープファイルライブラリを使用してPythonプログラミング言語で実行されます。2Dのベクターデータ用です。操作:選択と削除。選択には、すべての道路、選択された幅が7メートルを超える、道路の属性機能に接続されているなどの条件を使用しています。除去と同じように、すべての道路と同様に、幅が5メートル未満で除去されます。これまでのところ、それほど問題はありませんでした。
選択と削除の操作が適用された後、条件を通過した道路のシェープファイルが作成されます。私は2つのアルゴリズム、線の単純化と線の平滑化を使用しています。線を単純化するために、私はDouglas-Peuckerの線単純化アルゴリズムを使用しています。ベクトルデータ(座標)を取得し、許容値に基づいていくつかのポイントを削除します。私はPythonプログラミング言語を使用してそれを行っています。簡略化された線を取得した後、線の平滑化などの編集が必要です。ここでは、ガウスのアルゴリズムを使用していますが、プログラミング環境に慣れていないため、理解できないエラーが返されます。
import numpy
### This is the Gaussian data smoothing function I wrote ###
def smoothListGaussian(list1,degree):
window=degree*2-1
weight=numpy.array([1.0]*window)
print weight
weightGauss=[]
for i in range(window):
i=i-degree+1
frac=i/float(window)
gauss=1/(numpy.exp((4*(frac))**2))
weightGauss.append(gauss)
print weightGauss
weight=numpy.array(weightGauss)*weight
print weight
print len(list1)-window
smoothed=[0.0]*(len(list1)-window)
print smoothed
for i in range(len(smoothed)):
smoothed[i]=sum(numpy.array(list1[i:i+window])*weight)/sum(weight)
return smoothed
a=[[78.03881018900006, 30.315651467000066], [78.044901609000078, 30.31512798600005], [78.04927981700007, 30.312510579000048], [78.050041244000056, 30.301755415000059], [78.072646124000073, 30.281720353000082], [78.07902308000007, 30.273344651000059]]
smoothListGaussian(a,3)
何か、アイデアをお願いします。または、ラインの各ポイントの座標を使用してベクトルデータのラインを平滑化するPythonの他のアルゴリズムがある場合
どんな答えもありがたいです!