緯度経度が-180から+180にスワップするような、緯度/経度/データのペアがアンティメリディアを横切る場合、どのようにしてpcolor(mesh)
地球全体を満たすグリッドセルを描くことから?私の問題は、basemap
ではなくcartopy
を使用していることを除いて、hereと同じです。リンクされた質問(約basemap
)に近い5年前のコメントは、cartopy
解決策があると主張しているが、これは掲載されていない。グリッドのないグリッド線(水平線)を防止する
例コード:
#!/usr/bin/env python3.6
import numpy
import matplotlib.pyplot
import cartopy.crs
lons = numpy.array([[-174.719, -175.297, -175.883],
[-175.164, -175.734, -176.312],
[-175.594, -176.164, -176.734],
[-176.016, -176.578, -177.148],
[-176.43 , -176.984, -177.547],
[-176.836, -177.383, -177.938],
[-177.227, -177.773, -178.312],
[-177.609, -178.148, -178.688],
[-177.984, -178.516, -179.047],
[-178.352, -178.875, -179.398],
[-179.727, 179.766, 179.266],
[ 179.945, 179.445, 178.945],
[ 179.625, 179.133, 178.641],
[ 179.312, 178.828, 178.336],
[ 179.008, 178.523, 178.039],
[ 178.711, 178.234, 177.75 ],
[ 178.414, 177.945, 177.469],
[ 178.133, 177.656, 177.188],
[ 177.844, 177.383, 176.914],
[ 177.57 , 177.109, 176.648]])
lats = numpy.array([[ 67.391, 67.492, 67.586],
[ 67.055, 67.148, 67.25 ],
[ 66.711, 66.812, 66.906],
[ 66.375, 66.469, 66.562],
[ 66.031, 66.125, 66.219],
[ 65.688, 65.781, 65.875],
[ 65.344, 65.438, 65.523],
[ 65. , 65.094, 65.18 ],
[ 64.656, 64.742, 64.836],
[ 64.312, 64.398, 64.484],
[ 62.922, 63. , 63.086],
[ 62.57 , 62.648, 62.734],
[ 62.219, 62.297, 62.383],
[ 61.867, 61.945, 62.023],
[ 61.516, 61.594, 61.672],
[ 61.164, 61.242, 61.32 ],
[ 60.812, 60.891, 60.961],
[ 60.812, 60.891, 60.961],
[ 60.461, 60.531, 60.609],
[ 60.102, 60.18 , 60.25 ]])
data = numpy.array([[ 231.73, 231.56, 231.22],
[ 231.72, 231.72, 231.72],
[ 232.24, 232.73, 233.37],
[ 233.22, 233.69, 234.01],
[ 234.33, 234.94, 235.39],
[ 234.5 , 235.11, 235.71],
[ 235.41, 235.71, 236. ],
[ 235.27, 235.72, 236.31],
[ 234.67, 235.43, 235.73],
[ 235.43, 236.17, 235.88],
[ 236.18, 236.18, 236.18],
[ 236.07, 236.36, 236.79],
[ 235.8 , 236.1 , 235.8 ],
[ 236.84, 236.84, 236.55],
[ 238.27, 238.27, 238.54],
[ 237.72, 237.44, 237.72],
[ 238.42, 238.28, 238.28],
[ 238.57, 238.57, 238.43],
[ 240.17, 240.04, 239.65],
[ 241.21, 241.21, 241.09]])
proj = cartopy.crs.Mollweide()
ax = matplotlib.pyplot.axes(projection=proj)
trans = proj.transform_points(cartopy.crs.Geodetic(), lons, lats)
ax.coastlines()
ax.pcolormesh(trans[:, :, 0], trans[:, :, 1], data, transform=proj)
matplotlib.pyplot.savefig("/tmp/test.png")
の予想される出力は、北太平洋のどこかに中心にデータのビットを持つマップになります。現実には、私は、地球全体の幅にまたがる非常に細長いマップを取得:
私はより簡単に質問にそれを組み込むことができるようなポイントの数が少ないにデータを制限しました、実際には私は両極を常に横切る極衛星データの完全軌道を持っているので、常にアンチメリディアンを横切っています。実際の軌道のための結果は次のようになります。中央経度を変更
は、問題を再配置します。私は地図の端を横切る場所から中心の経度を選ぶことによって重大度を減らすことができます。この例では、前のマップと同じデータがプロットされているが、90°Eの中心経度と:
This pull request 2012から関連する表示され、そう明らかに、関連する機能があることが想定されますしかし、私はそれをどのように使用するのか手がかりがありません。この問題は、どのグローバルマップ投影でも発生します。私はcartopy 0.15.1を使用しています。
これを正しくプロットするにはどうすればよいですか?
['Mollweide'投影](http://scitools.org.uk/cartopy/docs/latest/crs/projections.html#mollweide)にはオプション' central_longitude'があります。あなたはその価値を変えようとしましたか? – tom
@tom良い質問です。それは解決しませんが、手がかりを提供します。これは、緯度/経度座標の折り返しではなく、投影された座標の折り返しです。更新された地図を見る。 – gerrit