0

上記の質問を参照してください。アイリス キューブから Google マップの緯度/経度を取得したいだけです...

cube.coord_system()

LambertAzimuthalEqualArea(latitude_of_projection_origin=54.9, longitude_of_projection_origin=-2.5, false_easting=0.0, false_northing=0.0, ellipsoid=GeogCS(semi_major_axis=6378137.0, semi_minor_axis=6356752.314140356))

ここに画像の説明を入力

4

1 に答える 1

2

x 座標と y 座標のみを変換してデータをプロットする場合は、irisandを使用できcartopyます。

import iris
import numpy as np

まず、ネイティブ投影で座標点を取得します

proj_x = cube.coord("projection_x_coordinate").points
proj_y = cube.coord("projection_y_coordinate").points

次に、同じ形状の 2 次元配列のペアを作成します。

xx, yy = np.meshgrid(proj_x, proj_y)

次に、ネイティブ プロジェクションを抽出し、それをプロジェクションに変換しcartopyます。

cs_nat = cube.coord_system()
cs_nat_cart = cs_nat.as_cartopy_projection()

次に、標準の楕円体投影などのターゲット投影を作成します。

cs_tgt = iris.coord_systems.GeogCS(iris.analysis.cartography.DEFAULT_SPHERICAL_EARTH_RADIUS)
# Again, convert it to a cartopy projection
cs_tgt_cart = cs_tgt.as_cartopy_projection()

最後に、cartopyの transform メソッドを使用して、ネイティブ投影の 2D 座標配列をターゲット投影の座標に変換します。

lons, lats, _ = cs_tgt_cart.transform_points(cs_nat_cart, xx, yy).T
# Note the transpose at the end.

zまた、上記の関数は常に座標配列を返しますが、この場合は 0 であることにも注意してください。

lonsその後、とを使用しlatsて、Google マップまたは他のアプリケーションでデータをプロットできます。これらの新しい座標は曲線であるため、実際には 2D 配列でなければならないことに注意してください。

irisただし、 (および)のデータをプロットする場合は、次のmatplotlib方法で実行できます。

import cartopy.crs as ccrs
import matplotlib.pyplot as plt


proj_x = cube.coord("projection_x_coordinate").points
proj_y = cube.coord("projection_y_coordinate").points
cs_nat_cart = cube.coord_system().as_cartopy_projection()

fig = plt.figure()
ax = fig.add_subplot(111, projection=ccrs.PlateCarree())
ax.pcolormesh(proj_x, proj_y, cube.data, transform=cs_nat_cart)
ax.coastlines()

お役に立てれば。

于 2020-06-15T10:42:41.080 に答える