2

これは間違いなく、「木を見て木が見えない」瞬間です。私はこのコードを 1 時間見つめていましたが、何が間違っていたのかわかりません。私はそれが私の顔を見つめていることを知っていますが、私はそれを見ることができません!

Python を使用して 2 つの地理座標系を変換しようとしています。

経度 (x 軸) と緯度 (y 軸) の値があり、OSGB 1936 に変換したいと考えています。単一のポイントについては、次のことができます。

import numpy as np
import pandas as pd
import shapefile
import pyproj

inProj = pyproj.Proj(init='epsg:4326')
outProj = pyproj.Proj(init='epsg:27700')

x1,y1 = (-2.772048, 53.364265)

x2,y2 = pyproj.transform(inProj,outProj,x1,y1)

print(x1,y1)
print(x2,y2)

これにより、以下が生成されます。

-2.772048 53.364265
348721.01039783185 385543.95241055806

これは合理的で、経度 -2.772048 が座標 348721.0103978 に変換されることを示唆しています。

実際、これを Pandas データフレームで実行したいと考えています。データフレームには経度と緯度を含む列が含まれており、変換された座標 (newLong と newLat と呼ばれる) を含む 2 つの列を追加したいと考えています。

模範的なデータフレームは次のようになります。

    latitude  longitude
0  53.364265  -2.772048
1  53.632481  -2.816242
2  53.644596  -2.970592

そして、私が書いたコードは次のとおりです。

import numpy as np
import pandas as pd
import shapefile
import pyproj

inProj = pyproj.Proj(init='epsg:4326')
outProj = pyproj.Proj(init='epsg:27700')

df = pd.DataFrame({'longitude':[-2.772048,-2.816242,-2.970592],'latitude':[53.364265,53.632481,53.644596]})

def convertCoords(row):
    x2,y2 = pyproj.transform(inProj,outProj,row['longitude'],row['latitude'])
    return pd.Series({'newLong':x2,'newLat':y2})

df[['newLong','newLat']] = df.apply(convertCoords,axis=1)

print(df)

生成するもの:

    latitude  longitude        newLong         newLat
0  53.364265  -2.772048  385543.952411  348721.010398
1  53.632481  -2.816242  415416.003113  346121.990302
2  53.644596  -2.970592  416892.024217  335933.971216

しかし、現在、newLong と newLat の値が混同されているようです (上記の単一ポイント変換の結果と比較して)。

この結果を生成するためにワイヤーをどこで交差させましたか? (それが完全に明らかである場合は申し訳ありません!)

4

2 に答える 2

4

を実行すると、出力df[['newLong','newLat']] = df.apply(convertCoords,axis=1)の列にインデックスが付けられます。df.applyただし、シリーズは辞書を使用して定義されているため (本質的に順序付けされていません)、列の順序は任意です。

列の順序が固定された Series を返すことを選択できます。

return pd.Series([x2, y2])

convertCoordsまたは、出力にラベルを付けたままにしたい場合は、.join代わりに を使用して結果を組み合わせることができます。

return pd.Series({'newLong':x2,'newLat':y2})
...
df = df.join(df.apply(convertCoords, axis=1))
于 2016-09-21T15:27:07.753 に答える