使用 Cartopy 在给定的 Lat-Long 周围绘制等面积地图

Plotting equal area map around a given Lat-Long using Cartopy

我想在用户输入的纬度和经度周围创建一个正方形地图。

import cartopy.crs as ccrs
import matplotlib.pyplot as plt 
import cartopy.feature  
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
x=float(input('Enter latitude:'))
y=float(input('Enter longitude:')) 

ax = plt.axes(projection=ccrs.PlateCarree())
ax.set_extent([y-10,y+10,x-10,x+10],ccrs.PlateCarree())

ax.coastlines()
ax.gridlines(draw_labels=True)
plt.show()

剧情不错 如果我不去两极,这会起作用-

这里不计算地球的球度,90度就停止了-

如果我将投影更改为正交投影,极点问题可能会得到解决。

import cartopy.crs as ccrs
import matplotlib.pyplot as plt 
import cartopy.feature  
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
 
x=float(input('Enter latitude:'))
y=float(input('Enter longitude:')) 

ax = plt.axes(projection=ccrs.Orthographic(y,x))
ax.set_extent([y-10,y+10,x-10,x+10],ccrs.PlateCarree())


ax.coastlines()
ax.gridlines(draw_labels=True)

plt.show() 

我认为考虑了球形度,当我在赤道附近时,我可能会得到一个很好的方形图。但是,当我接近两极时,正方形会开始缩小,最终我无法得到一个好的区域,因为我必须从那个正方形区域获取纬度和经度,并用它们计算一些值。

例如下面两张图

地块纬度=80,经度=60

这张图说明了问题。我还需要截然相反的一侧,所以纬度应该再次从 90 开始减少到 0,但经度会再次改变。就这样,我哪儿也去不了,卡住了。

在纬度 = 22 和经度 = 78 处绘图

第一个变成长方形,第二个变成正方形。我怎样才能使它们的面积与任何给定的经纬度相等?

即使我将 set_extent 的投影更改为 LCC 或任何其他投影,我也无法根据中心设置范围。

解决方法很简单,我完全误解了正交投影的工作原理。在正交投影中投影和设置范围都可以正常工作。这是解决方案-

import cartopy.crs as ccrs
import matplotlib.pyplot as plt 
import numpy as np 
x=float(input('Enter latitude:'))
y=float(input('Enter longitude:')) 
ax = plt.axes(projection=ccrs.Orthographic(y,x))
ax.set_extent((-1000000,1000000,-1000000,1000000),ccrs.Orthographic(y,x))
ax.coastlines('50m')
ax.gridlines(draw_labels=True)
plt.show()

在纬度 = 90 和经度 = 180 处绘制

在纬度 = 22 和经度 = 88 处绘图

这两张地图都清楚地覆盖了给定纬度、经度值周围的相同区域。 谢谢!!!