簡體   English   中英

如何找到合適的cartopy投影?

[英]How to find the right cartopy projection?

我需要用 cartopy 在德國繪制一些數據。 我的情節的數據部分工作正常(所以我現在刪除了它)。 不幸的是,由於投影,該國的形狀發生了變形。

我目前正在使用 PlateCarree 投影,但將其更改為 Orthographic 或其他創建了相同的圖。

如何改善身材?

鏈接到輸出的圖像與想要的輸出

代碼:

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from cartopy.io import shapereader

# get country borders
resolution = '10m'
category = 'cultural'
name = 'admin_0_countries'
shpfilename = shapereader.natural_earth(resolution, category, name)
df = geopandas.read_file(shpfilename)
poly = df.loc[df['ADMIN'] == 'Germany']['geometry'].values[0]

# plot
ax = plt.axes(projection=ccrs.PlateCarree())
ax.set_extent([5.8, 15.1, 47.25, 55.1],
              crs=ccrs.PlateCarree())
ax.add_geometries(poly,
                  crs=ccrs.PlateCarree(),
                  facecolor='gainsboro',
                  edgecolor='slategray',
                  lw=0.1,
                  alpha=.8)

# save plot
save_path = 'germany.png'
plt.savefig(save_path, dpi=250, bbox_inches='tight', pad_inches=0.)
plt.close()

解決方案是使用與此處解釋的相同投影來轉換 Geopandas 數據框

新輸出: Germany.png

新代碼:

    import matplotlib.pyplot as plt
    import cartopy.crs as ccrs
    import geopandas
    from cartopy.io import shapereader

    # get country borders
    resolution = "10m"
    category = "cultural"
    name = "admin_0_countries"
    shpfilename = shapereader.natural_earth(resolution, category, name)
    df = geopandas.read_file(shpfilename)
    df_de = df.loc[df["ADMIN"] == "Germany"]


    extent = [6., 14.8, 47.1, 55.1]

    # plot
    crs = ccrs.Orthographic(
        central_longitude=(0.5 * (extent[0] + extent[1])),
        central_latitude=(0.5 * (extent[2] + extent[3])),
    )

    crs_proj4 = crs.proj4_init

    df_de.crs = "EPSG:4326"
    df_ae = df_de.to_crs(crs_proj4)

    fig, ax = plt.subplots(subplot_kw={"projection": crs})
    ax.set_extent(extent)
    ax.add_geometries(
        df_ae["geometry"],
        crs=crs,
        facecolor="gainsboro",
        edgecolor="slategray",
        lw=0.1,
        alpha=0.8,
    )

    # save plot
    save_path = "germany.png"
    plt.savefig(save_path, dpi=250, bbox_inches="tight", pad_inches=0.0)
    plt.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM