Python Нанесение карты на сферу - PullRequest
0 голосов
/ 31 октября 2018

У меня есть карта, которую я хочу проецировать на сферу, я использую картопы, как предложено в другой теме. Я программирую в Jupyter.

Мой код:

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

os.chdir(os.getenv("HOME"))
os.chdir("Downloads/")
img = plt.imread("europamap1.jpg")

plt.figure(figsize=(3, 3))

ax = plt.axes(projection=ccrs.Orthographic(-10, 45))
ax.gridlines(color="black", linestyle="dotted")
ax.imshow(img, origin="upper", extent=(-180, 180, -90, 90),
          transform=ccrs.PlateCarree())  # Important

plt.show()

Я получаю белый кружок введите описание изображения здесь

Я не знаю, почему я не вижу ни линий сетки, ни изображения! Я попытался plot.show (img) и изображение загружено! Я в основном только что скопировал и вставил из этой темы

1 Ответ

0 голосов
/ 31 октября 2018

Файл изображения, который вы загружаете с plt.imread, не является геопространственным растровым форматом, обычно это файлы GeoTIFF, которые заканчиваются расширением .tiff.

Проблема в том, что вашему изображению не хватает системы координат координат (CRS) для выравнивания с cartopy. Например print(img.crs) скорее всего не печатает CRS.

Для проецирования ваших данных вам потребуется найти файл GeoTIFF и выровнять CRS с проекцией, которую использует cartopy, например, - ccrs.PlateCarree().

Некоторые тестовые спутниковые снимки можно найти здесь: https://gisgeography.com/usgs-earth-explorer-download-free-landsat-imagery/.

Для чтения и записи растровых данных см. rasterio: https://rasterio.readthedocs.io/en/latest/.

Вот пример использования GeoTIFF из источника, указанного в комментариях. https://photojournal.jpl.nasa.gov/tiff/PIA03526.tif:.

import matplotlib.pyplot as plt
import rasterio
from rasterio import plot

src = rasterio.open(r"../tests/data/PIA03526.tif")
plot.show(src)
...