【发布时间】:2019-02-07 08:23:41
【问题描述】:
有没有办法将图形的范围设置为超出投影限制?
例如,当使用“Rijksdriehoek”投影 (EPSG 28992) 时,Cartopy (proj4?) 的限制是错误的,太窄了。
该投影旨在覆盖整个荷兰,但施加的限制甚至导致该国部分地区被切断。而我宁愿将范围设置得比官方边界稍宽一些,以提供一些额外的背景信息。
很遗憾,set_extent 方法报错:
ValueError: Failed to determine the required bounds in projection
coordinates. Check that the values provided are within the valid range
(x_limits=[646.3608848793374, 284347.25011780026],
y_limits=[308289.55751689477, 637111.0245778429]).
set_xlim/set_ylim 方法似乎没有任何作用,这适用于普通的 matplotlib 轴。
示例代码:
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
projection = ccrs.epsg(28992)
fig, ax = plt.subplots(figsize=(5,10), subplot_kw=dict(projection=projection))
ax.coastlines(resolution='10m')
ax.add_feature(cfeature.NaturalEarthFeature('cultural', 'admin_0_boundary_lines_land', '10m', facecolor='none', edgecolor='k'))
图形的范围自动设置为投影的范围:
print(projection.bounds)
print(ax.get_extent())
(646.3608848793374, 284347.25011780026, 308289.55751689477, 637111.0245778429)
(646.3608848793374, 284347.25011780026, 308289.55751689477, 637111.0245778429)
根据有关投影的文档,实际限制应为:(-700 300000 289000 629000)。但即使是那些看起来也有点严格的可视化目的。
参见例如“有效性范围”部分:
【问题讨论】:
-
愚蠢的问题:在发生这种限制的规模上(即整个国家的地图),您会发现与没有这些限制的任何其他投影有什么不同吗?
-
是的,当然可以,例如使用
UTM 31N。但这也需要重新投影我拥有的栅格数据,这是不太理想的。不过,这是一种解决方法。 -
再一次,我在这里可能错了,但请记住坐标系之间的差异最多为 100 米,因此甚至可能不需要重新投影? (那是基于德国的 Gauß-Krüger vs. UMT,我不知道“Rijksdriehoek”)
标签: python matplotlib cartopy