Python将地图绘制到球体上

时间:2018-10-30 21:49:52

标签: python plot 3d visualization cartopy

我有一张要投影到球体上的地图,我在另一个线程中建议使用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

复制并粘贴

1 个答案:

答案 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/

有关读写栅格数据的信息,请参见rasteriohttps://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)