Есть ли возможность ограничить координаты при построении файла grib в python? - PullRequest
1 голос
/ 01 марта 2020

Я хотел бы создавать карты погоды из моделей. Для этой цели немецкая служба погоды предоставляет свои прогнозные данные в формате GRIB2.

С помощью xarray я читаю файл grib следующим образом:

ds = od('path/to/grib', backend_kwargs={'filter_by_keys': {'typeOfLevel': 'heightAboveGround', 'level': 2}})

После этого я хочу построить эти данные:

fig = plt.figure(figsize=(10,10))
ax = plt.axes(projection=ccrs.Robinson())
ax.coastlines(resolution='10m')
ax.gridlines()

states_provinces = cfeature.NaturalEarthFeature(
    category='cultural',
    name='admin_0_boundary_lines_land',
    scale='10m',
    facecolor='none')
provinces_provinces = cfeature.NaturalEarthFeature(
    category='cultural',
    name='admin_1_states_provinces_lines',
    scale='10m',
    facecolor='none')


ax.add_feature(cfeature.COASTLINE)
ax.add_feature(states_provinces, edgecolor='gray', zorder=1)
ax.add_feature(provinces_provinces, edgecolor='gray', zorder=1)

plot = ds.t2m.plot(cmap=plt.cm.coolwarm, transform=ccrs.PlateCarree())

Но эти файлы GRIB предназначены для всей Европы. Я хочу только построить, например, данные для Германии с картой в фоновом режиме? Так как я могу ограничить координаты (широта, долгота), чтобы на построенной карте отображалась только, например, Германия?

1 Ответ

1 голос
/ 02 марта 2020

Что вы можете сделать, это замаскировать данные с помощью функции where:

ds = ds.where(np.logical_and(ds.latitude > lat_bounds_min, ds.latitude < lat_bounds_max))
ds = ds.where(np.logical_and(ds.longitude > lon_bounds_min, ds.longitude < lon_bounds_max))

Чтобы получить только Германию, вам нужны шейп-файлы, чтобы проверить, есть ли координаты в немецком многоугольнике или нет. Но это не очень понятно, если вам нужно такое решение.

...