我想有一个围绕用户输入纬度和经度的正方形地图。
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() 我认为当我在赤道附近时,球形度被考虑在内,我可能会得到一个很好的正方形图。但是,当我接近两极时,正方形将开始缩小,最终我将得不到一个好的面积,因为我必须从正方形面积中取出纬度和经度,并用它们计算一些值。
例如,下面是两个图
在lat=80 long = 60时绘制
这张图片澄清了这个问题。我也需要完全相反的那一边,所以纬度应该再次开始从90下降到0,但之后经度会再次改变。这样,我就无处可去,被卡住了。

在经度= 22和经度= 78处绘制

第一个变成矩形,第二个变成正方形。如何使它们与任何给定的经度的面积相等?
即使我将set_extent的投影更改为LCC或任何其他投影,也无法以中心为单位设置范围。
发布于 2020-09-04 12:02:46
解决方案很简单,我完全误解了正交投影的工作原理。在正交投影中投影和设置范围都可以正常工作。以下是解决方案-
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处绘制

在lat=22和long = 88处绘制

这两个地图清楚地覆盖了给定纬度和经度值附近的相同区域。谢谢!
https://stackoverflow.com/questions/63674860
复制相似问题