Как я могу нанести изображение в формате png на базовую карту картоплана в специальной проекции? - PullRequest
0 голосов
/ 05 октября 2019

Я пытаюсь открыть png-изображение, чтобы нанести это изображение на базовую карту картопий. Я уже следовал этим инструкциям: 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')

Мои результаты являются базовой картой определенного экстента, но без моего изображения. Что я делаю не так?

С уважением

1 Ответ

0 голосов
/ 07 октября 2019

Ваш аргумент преобразования для imshow почти наверняка неверен. Экстерьер изображения (2.0715, 15.72, 46.9526, 54.5877) в стереографической проекции северной полярной области - это очень маленький регион вблизи Северного полюса, который находится за пределами желаемого экстента карты. Из контекста это выглядит так, будто экстент указан в географических координатах, и в этом случае решение должно использовать transform=ccrs.PlateCarree() в вашем вызове imshow.

В общем, я рекомендую четко указывать, какая у вас система координатв любое время, поэтому я хотел бы предложить

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()

Эта документация содержит руководство по преобразованиям / проекциям в картопах: https://scitools.org.uk/cartopy/docs/latest/tutorials/understanding_transform.html

...