与cartopy.io.img_tiles交叉日期线

问题描述 投票:0回答:1

[我正在尝试找出如何生成与Cartopy和img_tiles中的地形交叉的日期线的地图。这是我到目前为止的内容:

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import cartopy.feature as cfeature
import cartopy.io.img_tiles as cimgt
import shapely.geometry as sgeom

my_dpi = 96
plt.figure(figsize=(1530/my_dpi, 900/my_dpi), dpi=my_dpi, frameon=False)
plt.subplots_adjust(left=0.0, right=1.0, top=1.0, bottom=0)
ax = plt.axes(projection=ccrs.Mercator(central_longitude=180))
terrain = cimgt.Stamen('terrain-background')
ax.add_image(terrain, 4)     
states = cfeature.NaturalEarthFeature('cultural', 'admin_1_states_provinces', '10m', edgecolor='darkblue',facecolor='none')
ax.add_feature(states, linewidth = 0.1, linestyle='-')

# draw box
box = sgeom.box(minx=69, maxx=210, miny=-57, maxy=13.5)
ax.add_geometries([box], ccrs.PlateCarree(), facecolor='coral', 
                   edgecolor='black', alpha=0.5)
# Set extent
ax.set_extent(oceania_coords,  crs=ccrs.PlateCarree())

plt.show()

[当我在要放大的区域周围绘制一个框时,它看起来是正确的。

enter image description here

当我尝试在此范围内使用ax.set_extent时,似乎可以正确设置所有功能,但会破坏img_tiles功能。

enter image description here

有什么办法解决这个问题?感谢您的帮助!

python cartopy
1个回答
0
投票

我有一个对我来说足够好的解决方案,通过以适当的比例邻接两个子图并关闭边框,这对我来说已经足够了。接缝上有一个微小的伪影,但我主要是在此框架中切海洋,所以我可以接受。当我将俄罗斯纳入框架时,这一点更加明显。

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import cartopy.feature as cfeature
import cartopy.io.img_tiles as cimgt
import shapely.geometry as sgeom
import matplotlib.gridspec as gridspec
my_dpi=96
f = plt.figure(figsize=(1530/my_dpi, 900/my_dpi), dpi=my_dpi, frameon=False)
spec = gridspec.GridSpec(ncols=2, nrows=1,width_ratios=[111,30])
plt.subplots_adjust(left=0.0, right=1.0, top=1.0, bottom=0)

ax1 = f.add_subplot(spec[0],projection=ccrs.Mercator(central_longitude=180))
terrain = cimgt.Stamen('terrain-background')
ax1.add_image(terrain, 3)
states = cfeature.NaturalEarthFeature('cultural', 'admin_1_states_provinces', '10m', edgecolor='darkblue',facecolor='none')
ax1.add_feature(states, linewidth = 0.1, linestyle='-')
ax1.set_extent([69, 180, -57, 13.5],  crs=ccrs.PlateCarree())
plt.gca().outline_patch.set_visible(False)

ax2 = f.add_subplot(spec[1],projection=ccrs.Mercator(central_longitude=180))
ax2.add_image(terrain, 3)
ax2.add_feature(states, linewidth = 0.1, linestyle='-')
ax2.set_extent([-180,-150, -57, 13.5],  crs=ccrs.PlateCarree())
plt.gca().outline_patch.set_visible(False)

plt.subplots_adjust(wspace=0)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.