Отображение данных на карте в проекторе Mercator выглядит перевернутым на 90 градусов - PullRequest
0 голосов
/ 28 марта 2020

Я использую Arch Linux с версией картотеки 0.17.0, установленной в системе через менеджер пакетов. Я пытаюсь нанести простое спутниковое изображение из файла hdf5 с использованием картографии в качестве инструмента для построения графиков. Ниже приведен пример кода, который я пытаюсь сделать, чтобы создать изображение: -

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import h5py
import numpy as np
import cartopy
import matplotlib.pyplot as plt
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER

input_file = "../input/satellite/3RIMG_27MAR2020_0545_L1C_ASIA_MER.h5"

fh=h5py.File(input_file, 'r')
X = fh["X"][()]
Y = fh["Y"][()]
IMG_TIR1 = fh["IMG_TIR1"][()][0, :, :]

lower_latitude, left_longitude = fh['Projection_Information'].attrs["lower_left_lat_lon(degrees)"]
upper_latitude, right_longitude = fh['Projection_Information'].attrs["upper_right_lat_lon(degrees)"]
lons_values = np.linspace(left_longitude, right_longitude, X.shape[0])
lats_values = np.linspace(lower_latitude, upper_latitude, Y.shape[0])
print(lons_values)
print(lats_values)
lons, lats = np.meshgrid(lons_values, lats_values)

fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(projection=cartopy.crs.Mercator()))

ax.pcolormesh(lons, lats, IMG_TIR1, cmap=plt.cm.gist_gray, transform=cartopy.crs.Mercator())
ax.coastlines('50m', linewidth=0.8, color='black')
gl = ax.gridlines(draw_labels=True)
gl.xformatter = LONGITUDE_FORMATTER
plt.title('IMG_TIR1')

# plt.savefig('INSAT3D_IMG_TIR1_cartopy.png', bbox_inches='tight', dpi=100)

plt.show()

Полученный график выглядит примерно так: -

enter image description here

Есть две проблемы с изображением выше. Во-первых, нанесенные данные перевернуты на 90 градусов вверх ногами, т.е. Индия вместе с данными выглядит вверх ногами. Во-вторых, значения широты и долготы, которые отображаются в диапазоне 0,00 *, где фактические данные, доступные в массивах lons ([ 44.5 ... 110.]) и lats ([-10. ... 45.5]), различаются.

Может кто-нибудь помочь мне понять, почему данные перевернуты и благодарны за помощь, чтобы сделать его идеальным.

Обновление 1 Решена проблема с переворачиванием данных путем изменения латов при построении с помощью следующей команды: -

IMG_TIR1 = fh["IMG_TIR1"][()][0, ::-1, :]

После этого изображение выглядит следующим образом: -

enter image description here

Но второй вопрос, касающийся отметок в латах и ​​лонах, не отображающих фактические значения, остается тем же.

1 Ответ

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

Если ваши координаты данных выражены в латах / лонах, то вы должны использовать преобразование PlateCarree вместо Mercator.

fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(projection=cartopy.crs.Mercator()))

# Change the transform keyword here
ax.pcolormesh(lons, lats, IMG_TIR1, cmap=plt.cm.gist_gray, transform=cartopy.crs.PlateCarree())

См. Эту страницу в документации по картону, чтобы лучше это понять: https://scitools.org.uk/cartopy/docs/latest/tutorials/understanding_transform.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...