座標の一括変換を有効にするために既存のスクリプトを微調整しようとしています。バッチ変換座標、クラス定義エラー
はしかし、私は次のエラーが表示されます NameError:名「RDWGSConverter」が
は、私はクラスが先行定義されるべき理解定義されていません。しかし、もし私が何かを見逃していないなら、これは事実であるはずですか?
import urllib.parse
from openpyxl import load_workbook, Workbook
"""load datafile"""
workbook = load_workbook('convertor.xlsx')
worksheet = workbook.active
Xco=[]
Yco=[]
Xco = [row[1].value for row in worksheet.iter_rows() ]
Yco = [row[2].value for row in worksheet.iter_rows() ]
coordinates = [(Xco), (Yco)]
print(Xco[5])
print(range(len(Xco)))
class RDWGSConverter:
for i in (range(len(Xco))):
X0 = Xco[i]
Y0 = Yco[i]
phi0 = 52.15517440
lam0 = 5.38720621
print(Xco[i])
def fromRdToWgs(self, coords):
Kp = [0,2,0,2,0,2,1,4,2,4,1]
Kq = [1,0,2,1,3,2,0,0,3,1,1]
Kpq = [3235.65389,-32.58297,-0.24750,-0.84978,-0.06550,-0.01709,-0.00738,0.00530,-0.00039,0.00033,-0.00012]
Lp = [1,1,1,3,1,3,0,3,1,0,2,5]
Lq = [0,1,2,0,3,1,1,2,4,2,0,0]
Lpq = [5260.52916,105.94684,2.45656,-0.81885,0.05594,-0.05607,0.01199,-0.00256,0.00128,0.00022,-0.00022,0.00026]
dX = 1E-5 * (coords[0] - self.X0)
dY = 1E-5 * (coords[1] - self.Y0)
phi = 0
lam = 0
for k in range(len(Kpq)):
phi = phi + (Kpq[k] * dX**Kp[k] * dY**Kq[k])
phi = self.phi0 + phi/3600
for l in range(len(Lpq)):
lam = lam + (Lpq[l] * dX**Lp[l] * dY**Lq[l])
lam = self.lam0 + lam/3600
return [phi,lam]
def fromWgsToRd(self, coords):
Rp = [0,1,2,0,1,3,1,0,2]
Rq = [1,1,1,3,0,1,3,2,3]
Rpq = [190094.945,-11832.228,-114.221,-32.391,-0.705,-2.340,-0.608,-0.008,0.148]
Sp = [1,0,2,1,3,0,2,1,0,1]
Sq = [0,2,0,2,0,1,2,1,4,4]
Spq = [309056.544,3638.893,73.077,-157.984,59.788,0.433,-6.439,-0.032,0.092,-0.054]
dPhi = 0.36 * (coords[0] - self.phi0)
dLam = 0.36 * (coords[1] - self.lam0)
X = 0
Y = 0
for r in range(len(Rpq)):
X = X + (Rpq[r] * dPhi**Rp[r] * dLam**Rq[r])
X = self.X0 + X
for s in range(len(Spq)):
Y = Y + (Spq[s] * dPhi**Sp[s] * dLam**Sq[s])
Y = self.Y0 + Y
return [X,Y]
def main():
# Rotterdam Centraal Station
coords = [91819, 437802]
conv = RDWGSConverter()
wgsCoords = conv.fromRdToWgs(coords)
newCoords = conv.fromWgsToRd(wgsCoords)
print(coords, newCoords, wgsCoords)
if __name__ == "__main__":
main()
このコードの構造に間違いがないかを確認してくれてありがとう!
Grts
ありがとうございます! ループのアイデアは、Xco、Ycoのすべてのペアの計算を行うことができます。 おそらくもっと良い方法があります:) –
私はそれを見ています。しかし、 'fromRdToWgs'と' fromWgsToRd'メソッドを 'X0'と' Y0'の異なる値で何度も定義しています。同じ名前の2つのメソッドを定義することはできません。したがって、メソッドを複数回定義すると、変数の* last *値を使用して各メソッドの* last *定義のみになります。 – BoarGules