【问题标题】:Python Plotting map onto spherePython将地图绘制到球体上
【发布时间】:2019-04-04 00:42:44
【问题描述】:

我有一张想要投影到球体上的地图,我按照另一个线程中的建议使用 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复制粘贴过来的

【问题讨论】:

    标签: python plot 3d visualization cartopy


    【解决方案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/

    这是一个使用来自 cmets 中链接的源的 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)
    

    【讨论】:

    • 哦,哇,我没有意识到这一点!你知道如何将这样的地图投影到地球上吗? photojournal.jpl.nasa.gov/catalog/PIA03526
    • @RomeroAzzalini 是的,使用rasterio 库!请参阅我的答案编辑。此外,此笔记本应该可以帮助您入门:github.com/mapbox/rasterio/blob/master/examples/…
    • 它似乎有效,但这不是我想要的。我想将图片包裹在球面上(球体半径 = 1),并希望在同一张图片中进行一些 3D 轨迹绘图
    • @SamComber 仅供参考,该笔记本已从光栅源中删除。维护者说它已被弃用。你在某处有另一个更当前的例子吗?
    猜你喜欢
    • 2013-06-26
    • 2019-04-04
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多