python - 使用 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()
我认为考虑了球形度,当我靠近赤道时,我可能会得到一个很好的正方形图。但是,当我接近两极时,正方形会开始缩小,最终我不会得到一个好的区域,因为我必须从那个正方形区域获取纬度和经度,并用它们计算一些值。
例如,下面是两个图
在 lat=80 long = 60 处绘制
这张图说明了这个问题。我也需要截然相反的一面,所以纬度应该再次从 90 开始减少到 0,但是经度会再次改变。这样,我无处可去,卡住了。
在 lat = 22 和 long = 78 处绘制
第一个变成长方形,第二个变成正方形。如何使它们与任何给定的经纬度面积相等?
即使我更改set_extent
toLCC
或任何其他的投影,我也无法根据中心设置范围。
解决方案
解决方案相当简单,我完全误解了正交投影的工作原理。在正交投影中投影和设置范围都可以正常工作。这是解决方案 -
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 处绘制
两张地图都清楚地覆盖了给定纬度、经度值周围的相同区域。谢谢!!!
推荐阅读
- postgresql - 最好使用 SERIAL PRIMARY KEY 或 GENERATED ALWAYS AS IDENTITY 作为 PostgreSQL 中的主键
- javascript - 遍历上述 JSFiddle 中的每个列表项并执行以下操作:
- sql - 查找分配给单个路由器但也是分配给公共路由器的 IP 的一部分的 IP
- javascript - Javascript 动画闪烁
- json - 在 DataWeave 中连接来自两个数组的值
- python - 如何使用 Python 获取父 USB 设备信息?
- oracle - 无法看到 SQL Developer 物化视图 SQL
- assembly - 为什么这个程序循环?
- java - 如何针对实体图发出一个查询而不是多个查询
- python - 对一串 X、Y 和 Z 字符进行排序的最小交换次数