【问题标题】:Polar Stereographic projection of geopandas world mapgeopandas世界地图的极地立体投影
【发布时间】:2019-04-12 07:30:51
【问题描述】:

我想使用包含低分辨率世界地图的 geopandas(请参阅here)作为我的数据的背景。只要我使用例如'PlateCarree' 投影。

如果我现在想使用极地立体投影

ccrs.NorthPolarStereo()

ccrs.SouthPolarStereo()

它不起作用。

我的代码看起来像这样(使用 python 3)

import geopandas as gpd
import cartopy.crs as ccrs

crs = ccrs.NorthPolarStereo()
crs_proj4 = crs.proj4_init
world = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres"))
w = world.to_crs(crs_proj4)
w.plot(facecolor='sandybrown', edgecolor='black',)

知道极地立体投影是否根本不适用于此地图(如果是,为什么?)还是我做错了什么?

【问题讨论】:

    标签: python geopandas cartopy


    【解决方案1】:

    当使用特定的 cartopy 投影进行绘图时,最好使用 cartopy 实际创建 matplotlib 图形和轴,以确保它知道投影(在技术术语中:确保它是 GeoAxes,请参阅https://scitools.org.uk/cartopy/docs/latest/matplotlib/intro.html):

    crs = ccrs.SouthPolarStereo()
    crs_proj4 = crs.proj4_init
    w = world.to_crs(crs_proj4)
    
    fig, ax = plt.subplots(subplot_kw=dict(projection=crs))
    w.plot(ax=ax, facecolor='sandybrown', edgecolor='black')
    

    但是,这似乎仍然绘制了超出范围的形状。使用 cartopy add_geometries 方法,这更好地尊重程度:

    fig, ax = plt.subplots(subplot_kw=dict(projection=crs))
    ax.add_geometries(w['geometry'], crs=crs, facecolor='sandybrown', edgecolor='black')
    

    这乍一看有点奇怪(中间的南极洲很小),但这似乎是意料之中的(见https://scitools.org.uk/cartopy/docs/latest/crs/projections.html#southpolarstereo)。

    一般情况下,请参阅文档中结合 GeoPandas 和 cartopy 的示例:https://geopandas.readthedocs.io/en/latest/gallery/cartopy_convert.html

    【讨论】:

    • 是的,这行得通,谢谢。然而,这并不能真正解决我的问题,因为我不仅需要使用立体投影进行绘图,而且还想要拥有蓝色(或任何其他颜色)的海洋。使用这个我很遗憾无法做到这一点。我将把这个要求包含在我原来的问题中。
    • 得到答案后改变问题并不是很好。您可能希望接受此答案,因为它解决了您的一个问题,并在添加了新要求的情况下提出新问题。将来请确保从一开始就包含所有要求,以便更轻松地为您的问题提供正确的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    相关资源
    最近更新 更多