【问题标题】:How can i plot a png image on a cartopy basemap in a special projection?如何在特殊投影中的 cartopy 底图上绘制 png 图像?
【发布时间】:2019-10-05 11:26:29
【问题描述】:

我正在尝试打开一个 png-Image 以将此图像绘制在 cartopy 的底图上。 我已经按照以下说明进行操作: https://scitools.org.uk/cartopy/docs/v0.15/examples/geostationary.html


import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy
from PIL import Image



def create_map(image):

    res = '10m'
    proj = ccrs.NorthPolarStereo(central_longitude=10.0)
    img = plt.imread(image)
    img_extent = (2.0715, 15.72, 46.9526, 54.5877)

    ax = plt.axes(projection = proj)
    ax.set_extent = ([3.0889, 17.1128, 46.1827, 55.5482])    

    land_10m = cfeature.NaturalEarthFeature('physical', 'land', res,
                                         edgecolor = 'face', 
                                         facecolor=cfeature.COLORS['land'],
                                         zorder=0)

    state_provinces_10m = cfeature.NaturalEarthFeature(category = 'cultural', 
                                                       name = 'admin_1_states_provinces_lines',
                                                       scale = res,
                                                       facecolor = none)

    ax.add_feature(state_provinces_10m, edgecolor='gray')
    ax.add_feature(land_10m)
    ax.add_feature(cartopy.feature.BORDERS.with_scale(res), linestyle='-', linewith=1)
    ax.add_feature(cartopy.feature.COASTLINE.with_scale(res), linestyle='-')

    plt.imshow(img, origin='upper', extent=img_extent, transform = proj)

    plt.show()

create_map('image.png')

我的结果是定义范围的底图,但没有我的图像。我做错了什么?

问候

【问题讨论】:

    标签: matplotlib python-3.7 cartopy


    【解决方案1】:

    imshow 的转换参数几乎可以肯定是不正确的。北极立体投影中(2.0715, 15.72, 46.9526, 54.5877) 的图像范围是靠近北极的一个非常小的区域,它不在您想要的地图范围内。从上下文来看,范围似乎是在地理坐标中指定的,在这种情况下,解决方案应该是在您的 imshow 调用中使用 transform=ccrs.PlateCarree()

    一般来说,我建议您始终明确说明您的坐标系是什么,所以我建议

    def create_map(image):
    
        res = '10m'
        proj = ccrs.NorthPolarStereo(central_longitude=10.0)
        img = plt.imread(image)
        img_extent = (2.0715, 15.72, 46.9526, 54.5877)
    
        ax = plt.axes(projection = proj)
        # EXPLICIT CRS HERE:
        ax.set_extent([3.0889, 17.1128, 46.1827, 55.5482], crs=ccrs.PlateCarree())    
    
        land_10m = cfeature.NaturalEarthFeature('physical', 'land', res,
                                                edgecolor = 'face', 
                                                facecolor=cfeature.COLORS['land'],
                                                zorder=0)
    
        state_provinces_10m = cfeature.NaturalEarthFeature(category = 'cultural', 
                                                           name = 'admin_1_states_provinces_lines',
                                                           scale = res,
                                                           facecolor = none)
    
        ax.add_feature(state_provinces_10m, edgecolor='gray')
        ax.add_feature(land_10m)
        ax.add_feature(cartopy.feature.BORDERS.with_scale(res), linestyle='-', linewith=1)
        ax.add_feature(cartopy.feature.COASTLINE.with_scale(res), linestyle='-')
    
        # USE CORRECT CRS HERE
        plt.imshow(img, origin='upper', extent=img_extent, transform=ccrs.PlateCarree())
    
        plt.show()
    

    本文档提供有关 Cartopy 中的变换/投影的指南:https://scitools.org.uk/cartopy/docs/latest/tutorials/understanding_transform.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-24
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 2023-02-25
      相关资源
      最近更新 更多