使用python中的matplotlib-basemap创建地球仪

问题描述 投票:0回答:1

我在这里找到:

https://makersportal.com/blog/2018/8/16/rotating-globe-in-python-using-basemap-toolkit

一些使用底图制作地球仪的代码。它们对我来说似乎真的很好(我是底图的初学者),但是每次我运行它们时,我都会遇到相同的错误:

GEOS_ERROR:b'IllegalArgumentException:RobustDeterminant遇到非限定数字'

这是我最感兴趣的网站代码:

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

fig = plt.figure(figsize=(7,6))

# set perspective angle
lat_viewing_angle = 45.4642
lon_viewing_angle = 9.1900

# define color maps for water and land
ocean_map = (plt.get_cmap('ocean'))(210)
cmap = plt.get_cmap('gist_earth')

# call the basemap and use orthographic projection at viewing angle
m1 = Basemap(projection='ortho',
           lat_0=lat_viewing_angle,lon_0=lon_viewing_angle,resolution=None)

# define map coordinates from full-scale globe
map_coords_xy = [m1.llcrnrx,m1.llcrnry,m1.urcrnrx,m1.urcrnry]
map_coords_geo = [m1.llcrnrlat,m1.llcrnrlon,m1.urcrnrlat,m1.urcrnrlon]

#zoom proportion and re-plot map 
zoom_prop = 7.0 # use 1.0 for full-scale map

m = Basemap(projection='ortho',resolution='l',
            lat_0=lat_viewing_angle,lon_0=lon_viewing_angle,llcrnrx=-map_coords_xy[2]/zoom_prop,
            llcrnry=-map_coords_xy[3]/zoom_prop,urcrnrx=map_coords_xy[2]/zoom_prop,
            urcrnry=map_coords_xy[3]/zoom_prop)

# coastlines, map boundary, fill continents/water, fill ocean, draw countries
m.drawmapboundary(fill_color=ocean_map)
m.fillcontinents(color=cmap(200),lake_color=ocean_map)
m.drawcoastlines()
m.drawcountries()

# latitude/longitude line vectors
lat_line_range = [-90,90]
lat_lines = 8
lat_line_count = (lat_line_range[1]-lat_line_range[0])/lat_lines

merid_range = [-180,180]
merid_lines = 8
merid_count = (merid_range[1]-merid_range[0])/merid_lines

m.drawparallels(np.arange(lat_line_range[0],lat_line_range[1],lat_line_count))
m.drawmeridians(np.arange(merid_range[0],merid_range[1],merid_count))

# scatter to indicate lat/lon point
x,y = m(lon_viewing_angle,lat_viewing_angle)
m.scatter(x,y,marker='o',color='#DDDDDD',s=3000,zorder=10,alpha=0.7,\
            edgecolor='#000000')
m.scatter(x,y,marker='o',color='#000000',s=100,zorder=10,alpha=0.7,\
            edgecolor='#000000')

plt.annotate('Milan, Italy', xy=(x, y),  xycoords='data',
            xytext=(-110, -10), textcoords='offset points',
            color='k',fontsize=12,bbox=dict(facecolor='w', alpha=0.5),
            arrowprops=dict(arrowstyle="fancy", color='k'),
            zorder=20)

# save figure at 150 dpi and show it
plt.savefig('ortho_zoom_example.png',dpi=150,transparent=True)
plt.show()

错误甚至都没有说明问题所在,所以我无能为力...我该怎么解决?我很快就会需要它,所以如果您向我建议了一些解决方案,我将非常高兴

python python-3.x matplotlib-basemap
1个回答
0
投票

我也遇到了这个问题,我找到了问题,但是我不知道解决方法。

m = Basemap(projection='ortho',=====>m = Basemap(projection='ortho',

这样做将允许您的代码运行

© www.soinside.com 2019 - 2024. All rights reserved.