Сначала я подумал, что это может быть связано со старой проблемой Basemap
. Однако я думаю, что ваша проблема связана не с Basemap
, который на самом деле правильно обрабатывает перенос долготы, как вы могли бы видеть, если бы вы использовали только маркеры для построения наземного трека спутника.
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
f = plt.figure(figsize(10,7.5))
m = Basemap(projection="mill", lon_0=0)
m.drawcoastlines()
m.drawparallels(np.arange(-90,91,30),labels=[1,0,0,0])
m.drawmeridians(np.arange(-180,181,60), labels=[0,0,0,1])
x,y = m(lon, lat)
m.plot(x, y, color="red", latlon=False, marker='.', linestyle='None')
![введите описание изображения здесь](https://i.stack.imgur.com/SBPJA.png)
Окончательное решение состоит в том, чтобы разделить ваш наземный трек на несколько треков и построить их с помощью LineCollection
, как также объяснено здесь. Более простой подход (если вы ожидаете один разрыв по долготе):
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
latlon_ar = np.array(latlon)
threshold = 90
idx_wrap = np.nonzero(np.abs(np.diff(latlon_ar[:,1])) > threshold)[0]+1
lon_1 = lon[:idx_wrap]
lat_1 = lat[:idx_wrap]
lon_2 = lon[idx_wrap:]
lat_2 = lat[idx_wrap:]
f = plt.figure(figsize(10,7.5))
m = Basemap(projection="mill", lon_0=0)
m.drawcoastlines()
m.drawparallels(np.arange(-90,91,30),labels=[1,0,0,0])
m.drawmeridians(np.arange(-180,181,60), labels=[0,0,0,1])
x1, y1 = m(lon_1, lat_1)
x2, y2 = m(lon_2, lat_2)
m.plot(x1, y1, color="red", latlon=False)
m.plot(x2, y2, color="blue", latlon=False)
![введите описание изображения здесь](https://i.stack.imgur.com/4cN0Y.png)
Изменить Эта подтвержденная ошибка в Basemap
отвечает за поведение в первый пример вопроса, где Basemap.plot
вызывается напрямую со значениями широты и долготы, установив флаг latlon
в True
. Существует решение, которое заключается в ручном смещении входных координат перед построение, как в следующем коде.
lons, lats = m.shiftdata(lon, lat)
m.plot(lons, lats, color="blue", latlon=True, marker='.', linestyle='None')
![введите описание изображения здесь](https://i.stack.imgur.com/WaNQm.png)
person
lmillefiori
schedule
02.06.2016