Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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 如何绘制由旋转坐标导出的地理坐标角点_Python_Geospatial_Matplotlib Basemap - Fatal编程技术网

Python 如何绘制由旋转坐标导出的地理坐标角点

Python 如何绘制由旋转坐标导出的地理坐标角点,python,geospatial,matplotlib-basemap,Python,Geospatial,Matplotlib Basemap,在旋转坐标系中,我的域的四个角的坐标。 这些是 rlons:-25.6,32.48,-25.6,32.48 rlats:-27.6、-27.6、26.08、26.08 旋转的北极是 lon-170,lat 40 首先,我必须将角点从旋转坐标转换为地理坐标 转换后的实际地理坐标为 伦敦:-13.7893,39.6672,82.6967,-54.64,-13.7893 lats:18.3262,15.9548,59.6559,64.5671,18.3262 然后我想在底图中绘制角点。但是我的代码没有

在旋转坐标系中,我的域的四个角的坐标。 这些是 rlons:-25.6,32.48,-25.6,32.48

rlats:-27.6、-27.6、26.08、26.08

旋转的北极是 lon-170,lat 40

首先,我必须将角点从旋转坐标转换为地理坐标

转换后的实际地理坐标为

伦敦:-13.7893,39.6672,82.6967,-54.64,-13.7893

lats:18.3262,15.9548,59.6559,64.5671,18.3262

然后我想在底图中绘制角点。但是我的代码没有精确的边界。准确的边界应为曲线,而不是顶部和底部的直线

import matplotlib.pyplot as plt 
from mpl_toolkits.basemap import Basemap
import numpy as np

x_big = [-13.7893,39.6672,82.6967,-54.64,-13.7893]
y_big = [18.3262,15.9548,59.6559,64.5671,18.3262]

fig=plt.Figure()
ax = fig.add_subplot(1, 1, 1)
map = Basemap(projection='cyl', resolution = 'i', llcrnrlon=-60, llcrnrlat=5,urcrnrlon=90, urcrnrlat=70)
map.drawcoastlines()
map.drawcountries()
map.bluemarble()
map.plot(x_big, y_big, color='r', lw=5)
map.drawparallels(np.arange(5.,75.,15.),labels=[1,0,0,0])
map.drawmeridians(np.arange(-60.,90.,30.),labels=[0,0,0,1])
plt.show()

当我运行这个程序时,它会生成一个带有右角的贴图,但不知何故,连接角的线是不精确的直线。它应该与附图类似:

您需要使用.drawgreatcircle()方法,而不是简单的plot()。这是工作代码

import matplotlib.pyplot as plt 
from mpl_toolkits.basemap import Basemap
import numpy as np

# these coordinates for points far apart
x_big = [-13.7893, 39.6672, 82.6967, -54.64, -13.7893]  # lon
y_big = [18.3262, 15.9548, 59.6559, 64.5671, 18.3262]   # lat

fig = plt.Figure()
ax = fig.add_subplot(1, 1, 1)
map = Basemap(projection='cyl', resolution = 'i', llcrnrlon=-60, \
              llcrnrlat=5, urcrnrlon=90, urcrnrlat=82)
map.drawcoastlines()
map.drawcountries()
map.bluemarble()
map.plot(x_big, y_big, color='red', lw=1)

# plot line of great circles
map.drawgreatcircle(x_big[0], y_big[0], x_big[1], y_big[1], del_s=500, lw=2, color="y")
map.drawgreatcircle(x_big[1], y_big[1], x_big[2], y_big[2], del_s=500, lw=2, color="y")
map.drawgreatcircle(x_big[2], y_big[2], x_big[3], y_big[3], del_s=500, lw=2, color="y")
map.drawgreatcircle(x_big[3], y_big[3], x_big[0], y_big[0], del_s=500, lw=2, color="y")

map.drawparallels(np.arange(5., 75., 15.), labels=[1,0,0,0])
map.drawmeridians(np.arange(-60., 90., 30.), labels=[0,0,0,1])
plt.show()
结果图:


matplotlib怎么知道您想要曲线?如果您将网格点从旋转坐标转换为地理坐标,理想情况下应该将其转换为曲线。你没有告诉matplotlib关于网格点、旋转坐标或曲线的任何信息,你只是给了它标准地理坐标中的角。是的,我知道。如果我能得到一个关于如何告诉matplotlib旋转坐标和网格线的建议,那就太好了。为了使matplotlib绘制的线看起来像曲线,您通常会添加更多的点。域的边界不太可能沿着大圆。我猜它们在旋转的CS中是直线,在这种情况下,“水平”的肯定不是大圆段(尽管“垂直”的可能)。但是问题不清楚。@Goyo当问题不清楚时(你的话),连接地球上一系列点的线应该是大圆弧作为第一个猜测。