python basemap_在python中使用matplotlib basemap生成globe

本文介绍使用Python的Basemap库绘制地图的方法,并分享了一个具体的示例代码。该代码尝试通过正射投影展示意大利米兰附近的地理区域,但在运行过程中遇到了GEOS错误。文中包含了如何设置视角角度、定义颜色映射等步骤。
摘要由CSDN通过智能技术生成

用一些基础代码制作地图。

它们在我看来真的很好(我是basemap的初学者),但每次运行它们时都会遇到相同的错误:

GEOS_错误:b'IllegalArgumentException:RobustPreliminate遇到非有限数'

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

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()

错误甚至连哪一行的问题都没有说出来,所以我忍不住。。。

主要是为了写个代码,以后用得着时可以直接调用,文件里的类直接继承QWidget,可以作为部件放入Layout,省的以后还要麻烦重复的写代码。本人气象行业,会用到地图叠加风羽。 ---------- 主要实现了以下功能: 1. 绘制正常的折线或散点图(可以多条折线) 2. 绘制色斑图(等高线图) 3. 将数组显示为图片(主要是自己要用于卫星云图显示) 4. 利用basemap,在地图地图上添加风羽(风杆) ---------- 暂时先实现这些功能,方便再写界面的时候直接调用。basemap没有python3.6版本的,所以用的是非官方包。 文件说明: 一、总体说明 A、类 文件里分为两个类:PlotWidget和PlotGeoWidget文件里分为两个类:```PlotWidget```和```PlotGeoWidget``` B、用到的库 1、matplotlib(2.0.2) 2、PyQt5(5.6) 3、basement(第三方非官方包) 4、numpy(1.14.5) 5、math(python自带) 二、PlotWidget类 A、描述 该类作为一个独立的QWidget部件,可以直接放入Layout作为一个普通部件 B、方法 1、plot_lines 功能:绘制线型图像(可多条曲线) ```def plot_lines(self, x_data, y_data, xlim=None, ylim=None, linestyle=['-'], linewidth=[2], linecolor=['black'], xticks=None, xlabels=None, x_labels_rotation=0, x_labels_fontsize=20, yticks=None, ylabels=None, y_labels_rotation=0, y_labels_fontsize=20, x_name=None, y_name=None, title=None, label=[None], label_loc='upper right')``` 参数解释: x_data、y_data: 要画的数据 必须在数据外面再套一个[],应为可能会容纳多组数据 例如只有一组数据[1,2,3,4,5],也需要在外面加上[]变成[[1,2,3,4,5]] xlim、ylim: 坐标轴范围,元组类型 例如:(0,100) linestyle、linewidth、linecolor: 线型线宽线色,列表 列表里每个元素都是按照matplotlib的线型线宽线色来表示 xticks、yticks: 坐标轴上要显示的刻度位置,列表类型 例如:[0,10,20,30] 代表在只显示10 20 30的刻度 xlabels、ylabels: 坐标轴上显示刻度位置要显示的文字,列表类型 前提是必须有xticks、yticks 例如:当xticks=[0,10,20,30]时,xlabels=['x', 'xx', 'xxx', 'xxxx']代表在0 10 20 30 刻度处显示'x', 'xx', 'xxx', 'xxxx'文字 x_labels_rotation、x_labels_fontsize、y_labels_rotation、y_labels_fontsize: 坐标轴上文字旋转角度和文字大小 x_name、y_name: 坐标轴标注 title: 图片题名 label: 图注,列表类型 label_loc: 图注位置,按照matplotlib图注规范 2、plot_contour 功能:画等值线图 ```def plot_contour(self, x_data, y_data, val, title=None, x_name=None, y_name=None, xticks=None, xlabels=None, x_labels_rotation=0, x_labels_fontsize=20, yticks=None, ylabels=None, y_labels_rotation=0, y_labels_fontsize=20)``` 参数解释: x_data、y_data、val: 要画的数据(x,y,z值) title: 图片题名 x_name、y_name: 坐标轴标注 xticks、yticks: 坐标轴上要显示的刻度位置,列表类型 xlabels、ylabels: 坐标轴上显示刻度位置要显示的文字,列表类型 x_labels_rotation、x_labels_fontsize、y_labels_rotation、y_labels_fontsize: 坐标轴上文字旋转角度和文字大小 3、plot_digital_image 功能:显示数字图像,如云图、照片等,但是需要先将图片转为数组 ```def plot_digital_image(self, img)``` 参数解释: img: 图片的数组 三、PlotGeoWidget A、描述 该类作为一个独立的QWidget部件,可以直接放入Layout作为一个普通部件 B、方法 1、map_wind 功能:显示本场周边地区地图,在地图上画出风杆 ```def map_wind(self, lon, lat, spe, dir)``` 参数解释: lon、lat: 经纬度,以小数表示 spe、dir: 风速风向
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值