Как построить угловые точки географических координат, полученных из повернутых координат - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть координаты четырех углов моего домена в повернутой координате. Это rlons: -25,6, 32,48, -25,6, 32,48

рлат: -27,6, -27,6, 26,08, 26,08

повернутый северный полюс долг -170, лат 40

Сначала я должен преобразовать углы из повернутой координаты в географическую координату.

после преобразования фактические географические координаты

lons: -13,7893,39,6672,82,6967, -54,64, -13,7893

лат: 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()

Когда я запускаю это, он генерирует карту с правильными углами, но каким-то образом линии, соединяющие углы, являются прямыми, которые не точны. Это должно быть что-то похожее на прикрепленный рисунок: enter image description here

1 Ответ

0 голосов
/ 28 апреля 2018

Вам нужно использовать метод .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()

Итоговый участок:

enter image description here

...