2011-07-21 18 views
8

私は、次の、 入力しようとしました:その後、私は+/- 50メートル東距/北距値上、によって、その周りにボックスを計算するのは、50メートルを言ってもらおう緯度/経度データ を。緯度/経度に緯度/経度は非常に欠陥がありますが、どうですか?

は、今私は緯度/経度にそれを再変換し、スクリプトを使用して:

http://robotics.ai.uiuc.edu/~hyoon24/LatLongUTMconversion.py私はちょうどすることができない結果を得る、LONは前にその後の周りに、2

zone, easting, northing = LLtoUTM(23, location.get_lat(), location.get_lon()) 

topUTM = northing + error 
bottomUTM = northing - error 
leftUTM = easting - error 
rightUTM = easting + error 
left, top = UTMtoLL(23, leftUTM, topUTM, zone) 

約7であります私のコードにエラーがありますか?またはスクリプトに欠陥がありますか?

だから私は

>>> p = pyproj.Proj(proj='utm', zone=32, ellps='WGS84') 
>>> p 
<pyproj.Proj object at 0x7ff9b8487dd0> 
>>> x,y = p(47.9941214, 7.8509671) 
>>> print x,y 
5159550.36822 1114087.43925 
>>> print p(x,y,inverse=True) 
(47.971558538495991, 7.8546573140162605) 

を何が起こるかを見るために緯度/経度にUTMし、ちょうど緯度/経度をpyprojを使用しようとしましたそして、ここで、それはのように非常に遠く上からのスクリプトのようにありませんが、まだそれを使用することができないほど強く誤っているように見えます。どうして?より正確な結果を得るために私は何ができますか?

編集:

私はtest()を実行し、すべてのテストに合格しました。

EPSGファイルにはそのような事はありません。私が見つけた最も近いものはこれでした:

<32632> +proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> 

いいえtmerc。また、towgs84をパラメータとして渡す必要がありますか?上記のものは?

答えて

2

pyProjとあなたの問題は、ちょうどここに説明したもののように聞こえる:

http://code.google.com/p/pyproj/issues/detail?id=3

解決されます。

solved! in epsg file there must be

<2392> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <>

note the towgs84 parameter!

あなたがpyprojを引き続き使用する場合はアウトスレッド

チェック。

また、モジュールの仕事のtest()機能はありませんか? testディレクトリにあるスクリプトを試しましたか?

+0

のUbuntu 13.04ウズウズが最新PyProj自体が間違って見つけることが含まれるであろうことを期待して、これらを試してみてください。ソースからインストールしてください! – Richard

23

私は先週、Python用の小さなUTM変換ライブラリを作成したとPythonパッケージインデックスにそれをアップロードしました:http://pypi.python.org/pypi/utm

私はpyprojを使用して、それを比較して、それはより速く、より正確です。あなたのサンプルデータを考えると、これは結果である:

>>> import utm 

>>> u = utm.from_latlon(47.9941214, 7.8509671) 
>>> print u 
(414278, 5316285, 32, 'T') 

>>> print utm.to_latlon(*u) 
(47.994157948891505, 7.850963967574302) 

UPDATE:リチャーズanswerは、以下のこの問題の真の解決策を説明しています。

+0

ありがとうございます!作品はちょうど完全 –

+0

シャウトアウトのおかげで@TBieniek! – Richard

+0

ありがとう、この実装のために、絶対に貴重! – Blackbrook

17

エラーがあなたのコードです。

まず第一に、他の回答の一つに記載されているPyProjの問題が本当です。あなたのEPSGファイルをチェックし、それがライン

<2392> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <> 

towgs84パラメータが含まれて確認する必要があります。

PyProjとあなたの問題は、投影コマンドを使用して、ミスから生じています。

47.9941214N、7.8509671E、convert to UTMとすると、Zone 32、414278 Easting、5316286 Northingになります。

あなたは、次のPyProj操作を実行:

p = pyproj.Proj(proj='utm', zone=32, ellps='WGS84') 
>>> x,y = p(47.9941214, 7.8509671) 
>>> print x,y 
5159550.36822 1114087.43925 
>>> print p(x,y,inverse=True) 
(47.971558538495991, 7.8546573140162605) 

をしかし、我々はPyProj documentationに相談した場合、我々は以下を参照してください。

引数の経度、緯度の意志でのprojクラスのインスタンスを呼び出し

lon/lat(度)からx/yネイティブマップ投影座標( メートル)に変換します。

さんが再びOPのPyProj操作を実行してみましょう、しかし、経度/緯度引数の順序を切り替える:

p = pyproj.Proj(proj='utm', zone=32, ellps='WGS84') 
>>> x,y = p(7.8509671, 47.9941214) 
>>> print x,y 
414278.16731 5316285.59492 
>>> print p(x,y,inverse=True) 
(7.850967099999812, 47.994121399999784) 

操作が完全に(ほとんど)自体を反転します!

UTMtoLL(ReferenceEllipsoid, northing, easting, zone) 

しかし、あなたはleftUTMが偏東あるUTMtoLL(23, leftUTM, topUTM, zone)を使用してtopUTMが北距です:あなたはUTMtoLLの定義でhttp://robotics.ai.uiuc.edu/~hyoon24/LatLongUTMconversion.pyに見れば

は、あなたの質問の最初の部分に答えるためには、次のことを見つけます。

したがって、両方のあなたの最初のスクリプトとPyProjの場合には、あなたは、引数の間違った順序を使用しました。

それは常に誰かのは間違っていることを示唆している前に、あなたの仕事をチェックダブル(またはトリプル)には良いリマインダーです。つまり、Pythonのドキュメントはnot the greatestであり、PyProjのドキュメントはこの例では極秘です。 Webベースのこのコマンドの説明とその使用例が付いていると、おそらくあなたの怒りを防ぎました。

1

私はpyprojと何の問題もない、次のコード

from pyproj import Proj 

Lat = 52.063098675 
Lon = -114.132980348 #Calgary 

ZoneNo = "11" #Manually input, or calcuated from Lat Lon 
myProj = Proj("+proj=utm +zone="+ZoneNo+",\ 
+north +ellps=WGS84 +datum=WGS84 +units=m +no_defs") #north for north hemisphere 
UTMx, UTMy = myProj(Lon, Lat) 

######################################## 

#UTM ==> Lat Lon: 
ZoneNo = "11" #Manually input or from other sources 
myProj = Proj("+proj=utm +zone="+\ 
ZoneNo+", +north +ellps=WGS84 +datum=WGS84 +units=m +no_defs") 
Lon2, Lat2 = myProj(UTMx, UTMy,inverse=True) 

print Lat2 
print Lon2