使用 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 处绘图
这两张地图都清楚地覆盖了给定纬度、经度值周围的相同区域。
谢谢!!!
我想在用户输入的纬度和经度周围创建一个正方形地图。
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 处绘图
这两张地图都清楚地覆盖了给定纬度、经度值周围的相同区域。 谢谢!!!