我有一张要投影到球体上的地图,我在另一个线程中建议使用cartopy。我在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()
我得到的是一个白色填充圆圈enter image description here
我不知道为什么我看不到任何网格线或图像!我试图plot.show(img)并加载了图像!我基本上只是从this thread
复制并粘贴答案 0 :(得分:1)
您使用plt.imread
加载的图像文件不是地理空间栅格格式,通常是以.tiff
扩展名结尾的GeoTIFF文件。
问题是您的图像缺少与cartopy
对齐的坐标参考系统(CRS)。例如,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)