matplotlibとcartopyを使用してChoroplethマップを作成しようとしていますが、シェープファイルを最初にプロットする必要があります。しかし、同様の質問にhereとhereと尋ねられても、私はそうすることはできませんでした。私は投影または境界が誤って指定されていると思われます。カートファイルの形状ファイルの一致投影
マイシェープ投影
PROJCS["WGS_1984_UTM_Zone_32Nz",
GEOGCS["GCS_WGS_1984",
DATUM["WGS_1984",
SPHEROID["WGS_84",6378137,298.257223563]],
PRIMEM["Greenwich",0],
UNIT["Degree",0.017453292519943295]],
PROJECTION["Transverse_Mercator"],
PARAMETER["False_Easting",32500000],
PARAMETER["False_Northing",0],
PARAMETER["Central_Meridian",9],
PARAMETER["Scale_Factor",0.9996],
PARAMETER["Latitude_Of_Origin",0],
UNIT["Meter",1]]
を有し、私が話している場合、約vg250_2010-01-01.utm32w.shape.ebenen/vg250_ebenen-historisch/de1001/vg250_gem.shp
私のコードは、私は、対応する方法を使用して境界を得
#!/usr/local/bin/python
# -*- coding: utf8 -*-
import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader
import matplotlib.pyplot as plt
fname = 'path/vg250_gem.shp'
proj = ccrs.TransverseMercator(central_longitude=0.0,central_latitude=0.0,
false_easting=32500000.0,false_northing=0.0,
scale_factor=0.9996)
municipalities = list(shpreader.Reader(fname).geometries())
ax = plt.axes(projection=proj)
plt.title('Deutschland')
ax.add_geometries(municipalities,proj,edgecolor='black',facecolor='gray',alpha=0.5)
ax.set_extent([32458044.649189778*0.9, 5556418.748046352*1.1, 32465287.307457082*0.9, 5564153.5456742775*1.1],proj)
plt.show()
あるhereをダウンロードすることができフィオナから。 Pythonがエラーをスローする
Traceback (most recent call last):
File "***/src/analysis/test.py", line 16, in <module>
ax.set_extent([32458044.649189778, 5556418.748046352, 32465287.307457082, 5564153.5456742775],proj)
File "/usr/local/lib/python2.7/site-packages/cartopy/mpl/geoaxes.py", line 652, in set_extent
ylim=self.projection.y_limits))
ValueError: Failed to determine the required bounds in projection coordinates. Check that the values provided are within the valid range (x_limits=[-20000000.0, 20000000.0], y_limits=[-10000000.0, 10000000.0]).
[Finished in 53.9s with exit code 1]
これは私には意味がありません。また、ccrs.UTM()を使って実験すると、白い部分を示すプロットが得られます。もし誰かが私にこの問題を解決する方法を教えてもらえると感謝します。ありがとうございました!
私はcartopyなどについて何も知りませんが、エラーメッセージに次のツー最後の行を読んで、いくつかの必要なxと記載されているyの限界が、set_extent 'へのお電話での限界があります'(エラーの原因となった呼び出し)は、それらの必要な制限の範囲外です。 – tsj
これは、フィオナを使ってシェイプファイルの境界を抽出したので、「これは私にとっては意味がない」と言いました。上で、私は 'set_extent'メソッドを使って試してみました - この行を一緒に削除することを含めて - でもそれはうまくいきませんでした。 – Jhonny
あなたは与えられた範囲にかかわらず、カートリストが受け入れる範囲外です。繰り返しますが、私はこれらのパッケージに精通していませんが、 'proj'の構築では、32.5Mの' false_easting'を提供しています。おそらく、これはx方向のシフトをもたらすだろう。 'set_extent'の呼び出しでは、このようなシフトによって訂正される32.5Mに近い2つの値があります。 cartopyのドキュメントを見ると、 'set_extent'への入力は(x0、x1、y0、y1)ですが、(x0、y0、x1、y1)を与えたように見えるので、' false_easting'は許容範囲に戻ってきます。 – tsj