问题描述
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,ccrs.PlateCarree())
ax.coastlines()
ax.gridlines(draw_labels=True)
plt.show()
我认为考虑到球形度,当我靠近赤道时可能会得到一个好的正方形图。但是,当我接近两极时,正方形将开始缩小,最终我将找不到一个好的区域,因为我必须从该正方形区域中获取经度和纬度,并用它们计算一些值。
例如,下面是两个图
以lat = 80 long = 60绘制图
此图片澄清了问题。我也需要完全相反的一面,因此纬度应再次从90减小到0,但随后的经度将再次改变。这样,我就无路可走了。
以lat = 22和long = 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()
在lat = 90且long = 180处的图
以lat = 22和long = 88绘制图
这两个地图都清楚地覆盖了给定纬度和经度值周围的同一区域。 谢谢!!!