Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Cartopy在给定板条周围绘制等面积地图_Python_Matplotlib_Cartopy - Fatal编程技术网

Python 使用Cartopy在给定板条周围绘制等面积地图

Python 使用Cartopy在给定板条周围绘制等面积地图,python,matplotlib,cartopy,Python,Matplotlib,Cartopy,我想在用户输入的纬度和经度周围有一个正方形的地图 将cartopy.crs导入为CCR 将matplotlib.pyplot作为plt导入 导入cartopy.feature 从cartopy.mpl.gridliner导入经度格式化程序、纬度格式化程序 x=浮动(输入('输入纬度:')) y=浮动(输入('输入经度:')) ax=plt.轴(投影=ccrs.PlateCarree()) 最大设置范围([y-10,y+10,x-10,x+10],ccrs.PlateCarree()) ax.海岸

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

将cartopy.crs导入为CCR
将matplotlib.pyplot作为plt导入
导入cartopy.feature
从cartopy.mpl.gridliner导入经度格式化程序、纬度格式化程序
x=浮动(输入('输入纬度:'))
y=浮动(输入('输入经度:'))
ax=plt.轴(投影=ccrs.PlateCarree())
最大设置范围([y-10,y+10,x-10,x+10],ccrs.PlateCarree())
ax.海岸线()
ax.网格线(绘制标签=True)
plt.show()
这是一个很好的情节 如果我不去两极,这就行了-

地球的球形在这里不算在内,它在90度处停止-

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

将cartopy.crs导入为CCR
将matplotlib.pyplot作为plt导入
导入cartopy.feature
从cartopy.mpl.gridliner导入经度格式化程序、纬度格式化程序
x=浮动(输入('输入纬度:'))
y=浮动(输入('输入经度:'))
ax=投影轴(投影=CCR正交(y,x))
最大设置范围([y-10,y+10,x-10,x+10],ccrs.PlateCarree())
ax.海岸线()
ax.网格线(绘制标签=True)
plt.show()
我想球度已经考虑在内了,当我靠近赤道时,我可能会得到一个很好的正方形图。但是,当我接近极点时,正方形将开始缩小,最终我将无法得到一个好的面积,因为我必须从该正方形面积中获取纬度和经度,并用它们计算一些值

例如,下面是两幅图

lat=80长=60时的绘图

这张图片澄清了这个问题。我还需要正好相反的那一边,所以纬度应该再次从90度下降到0度,但是经度会再次改变。就这样,我哪儿也去不了,被卡住了

在lat=22和long=78时绘图

第一个变为矩形,第二个变为正方形。如何使它们的面积与任何给定的lat-long相等


即使我将
set\u区段
的投影更改为
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()

在lat=90和long=180时绘图

在lat=22和long=88时绘图

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