Python Basemap drawgreatcircle 在路径上有间隙
Python Basemap drawgreatcircle has a gap in the path
我看到一些奇怪的底图行为。它画了一个大圆圈,里面有一个空隙。
这是从温哥华到伦敦画一个大圆的代码:
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
def plot_map():
bg_color = (0.0, 0.0, 0.0, 1.0)
coast_color = (204/255.0, 0.8, 153/255.0, 0.7)
country_color = (204/255.0, 0.8, 153/255.0, 0.2)
path_color = (204/255.0, 0.2, 153/255.0, 0.6)
dep_lat, dep_lon = 51.470020, -0.454295
arr_lat, arr_lon = 49.193901, -123.183998
plt.figure()
m = Basemap(llcrnrlon=-130.,llcrnrlat=40.,urcrnrlon=10.,urcrnrlat=70.,\
rsphere=(6378137.00,6356752.3142),\
resolution='l',projection='merc',\
lat_0=40.,lon_0=-20.,lat_ts=20.)
m.drawcoastlines(color=coast_color, linewidth=1.0)
m.fillcontinents(color=bg_color, lake_color=bg_color)
m.drawmapboundary(fill_color=bg_color)
m.drawgreatcircle(dep_lon, dep_lat,arr_lon, arr_lat,
linewidth=2.0, color=path_color)
plt.savefig('routes.png', format='png', bbox_inches='tight')
if __name__ == '__main__':
plot_map()
结果如下:
drawgreatcircle 返回的路径对象包含许多 NAN,其中间隙为:
...
[10665759.64101299, 4404955.44856027],
[10474119.01096945, 4511711.30524047],
[ nan, nan],
[ nan, nan],
...
[ nan, nan],
[ nan, nan],
[ 4228670.53408886, 4599991.37541622],
[ 4031731.93039374, 4496703.65196268],
[ 3840974.7826069 , 4389405.80623971],
...
谁能帮帮我?
谢谢
解决您在使用 merc
(Mercator) 投影计算高纬度点时遇到的问题的一种方法是使用其他有效的投影。但是如果你坚持使用墨卡托绘制这样的高纬度点,你可能需要结合2种方法。这里我使用 cyl
(无投影)绘制大圆弧。然后提取它的坐标,最后用坐标在merc
投影上绘制大圆路径。
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
fig=plt.figure()
# use 'cyl' projection to get greatcircle path
# some of the parameters are ignored dummies
m0 = Basemap(llcrnrlon=-130.,llcrnrlat=40.,urcrnrlon=10.,urcrnrlat=70., \
rsphere=(6378137.00, 6356752.3142), \
resolution='l', projection='cyl', \
lat_0=40., lon_0=-20., lat_ts=20.)
dep_lat, dep_lon = 51.470020, -0.454295
arr_lat, arr_lon = 49.193901, -123.183998
# draw greatcircle and grab it
gcc = m0.drawgreatcircle(dep_lon, dep_lat,arr_lon, arr_lat, del_s=100.0, \
linewidth=2.0, color='None')
ax0 = fig.gca()
ax0.set_visible(False) # suppress the plot of 'cyl' projection
# get list of long-lat for greatcircle plot later
xys = gcc[0].get_xydata()
def plot_map():
bg_color = (0.0, 0.0, 0.0, 1.0)
coast_color = (204/255.0, 0.8, 153/255.0, 0.7)
country_color = (204/255.0, 0.8, 153/255.0, 0.2)
path_color = (204/255.0, 0.2, 153/255.0, 0.6)
plt.figure(figsize=[10, 6])
m = Basemap(llcrnrlon=-130.,llcrnrlat=40.,urcrnrlon=10.,urcrnrlat=70., \
rsphere=(6378137.00, 6356752.3142), \
resolution='l', projection='merc', \
lat_0=40., lon_0=-20., lat_ts=20.)
m.drawcoastlines(color=coast_color, linewidth=1.0)
m.fillcontinents(color=bg_color, lake_color=bg_color)
m.drawmapboundary(fill_color=bg_color)
# problematic code ...
# m.drawgreatcircle(dep_lon, dep_lat,arr_lon, arr_lat, del_s=100.0, \
# linewidth=2.0, color=path_color)
# plot path on the map with coordinates obtained earlier
m.plot(xys[:,0], xys[:,1], latlon=True)
plt.savefig('routes.png', format='png', bbox_inches='tight')
if __name__ == '__main__':
plot_map()
结果图:
我看到一些奇怪的底图行为。它画了一个大圆圈,里面有一个空隙。
这是从温哥华到伦敦画一个大圆的代码:
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
def plot_map():
bg_color = (0.0, 0.0, 0.0, 1.0)
coast_color = (204/255.0, 0.8, 153/255.0, 0.7)
country_color = (204/255.0, 0.8, 153/255.0, 0.2)
path_color = (204/255.0, 0.2, 153/255.0, 0.6)
dep_lat, dep_lon = 51.470020, -0.454295
arr_lat, arr_lon = 49.193901, -123.183998
plt.figure()
m = Basemap(llcrnrlon=-130.,llcrnrlat=40.,urcrnrlon=10.,urcrnrlat=70.,\
rsphere=(6378137.00,6356752.3142),\
resolution='l',projection='merc',\
lat_0=40.,lon_0=-20.,lat_ts=20.)
m.drawcoastlines(color=coast_color, linewidth=1.0)
m.fillcontinents(color=bg_color, lake_color=bg_color)
m.drawmapboundary(fill_color=bg_color)
m.drawgreatcircle(dep_lon, dep_lat,arr_lon, arr_lat,
linewidth=2.0, color=path_color)
plt.savefig('routes.png', format='png', bbox_inches='tight')
if __name__ == '__main__':
plot_map()
结果如下:
drawgreatcircle 返回的路径对象包含许多 NAN,其中间隙为:
...
[10665759.64101299, 4404955.44856027],
[10474119.01096945, 4511711.30524047],
[ nan, nan],
[ nan, nan],
...
[ nan, nan],
[ nan, nan],
[ 4228670.53408886, 4599991.37541622],
[ 4031731.93039374, 4496703.65196268],
[ 3840974.7826069 , 4389405.80623971],
...
谁能帮帮我? 谢谢
解决您在使用 merc
(Mercator) 投影计算高纬度点时遇到的问题的一种方法是使用其他有效的投影。但是如果你坚持使用墨卡托绘制这样的高纬度点,你可能需要结合2种方法。这里我使用 cyl
(无投影)绘制大圆弧。然后提取它的坐标,最后用坐标在merc
投影上绘制大圆路径。
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
fig=plt.figure()
# use 'cyl' projection to get greatcircle path
# some of the parameters are ignored dummies
m0 = Basemap(llcrnrlon=-130.,llcrnrlat=40.,urcrnrlon=10.,urcrnrlat=70., \
rsphere=(6378137.00, 6356752.3142), \
resolution='l', projection='cyl', \
lat_0=40., lon_0=-20., lat_ts=20.)
dep_lat, dep_lon = 51.470020, -0.454295
arr_lat, arr_lon = 49.193901, -123.183998
# draw greatcircle and grab it
gcc = m0.drawgreatcircle(dep_lon, dep_lat,arr_lon, arr_lat, del_s=100.0, \
linewidth=2.0, color='None')
ax0 = fig.gca()
ax0.set_visible(False) # suppress the plot of 'cyl' projection
# get list of long-lat for greatcircle plot later
xys = gcc[0].get_xydata()
def plot_map():
bg_color = (0.0, 0.0, 0.0, 1.0)
coast_color = (204/255.0, 0.8, 153/255.0, 0.7)
country_color = (204/255.0, 0.8, 153/255.0, 0.2)
path_color = (204/255.0, 0.2, 153/255.0, 0.6)
plt.figure(figsize=[10, 6])
m = Basemap(llcrnrlon=-130.,llcrnrlat=40.,urcrnrlon=10.,urcrnrlat=70., \
rsphere=(6378137.00, 6356752.3142), \
resolution='l', projection='merc', \
lat_0=40., lon_0=-20., lat_ts=20.)
m.drawcoastlines(color=coast_color, linewidth=1.0)
m.fillcontinents(color=bg_color, lake_color=bg_color)
m.drawmapboundary(fill_color=bg_color)
# problematic code ...
# m.drawgreatcircle(dep_lon, dep_lat,arr_lon, arr_lat, del_s=100.0, \
# linewidth=2.0, color=path_color)
# plot path on the map with coordinates obtained earlier
m.plot(xys[:,0], xys[:,1], latlon=True)
plt.savefig('routes.png', format='png', bbox_inches='tight')
if __name__ == '__main__':
plot_map()
结果图: