当前位置: 首页 > 后端技术 > Python

Python绘制你自己的世界地图

时间:2023-03-26 00:30:55 Python

Python之所以如此受欢迎,是因为它不仅可以用于科学技术领域,还可以作为许多其他学科的研究工具,其中最常见的就是绘制地图。今天我们使用matplot工具包之一:mpltoolkits绘制世界地图。这是一个简单的可视化地图工具。如果你想绘制更复杂的地图,可以考虑使用GoogleMapsAPI,但这不在我们今天的讨论范围之内。里面。1.安装如果你没有安装过Python,请看这篇文章:超详细的Python安装指南为了能够顺利的进行这个项目,你需要先安装以下依赖,在cmd或者Terminal中输入如下命令:pipinstallnumpypipinstallmatplotlibforUsingmpl_toolkits,仅仅安装matplotlib是不够的,我们还需要单独安装basemap,如果你已经安装了Anaconda,那么这一步很容易做到,输入以下命令安装:condainstallbasemap没有的话会麻烦一点:1.安装geos:pipinstallgeos2.根据自己的Python版本下载basemaphttp://www.lfd.uci.edu/~gohlke/pythonlibs/#basemapPS:cp后面的数字是Python的版本。(页面按ctrl+F,输入basemap快速定位)3、cmd下进入文件所在目录,运行pipinstallbasemap?1.2.1?cp37?cp37m?win_amd64.whl2。简单地图让我们开始画一个地球,圆心指向中国:#importrequiredpackagesimportnumpyasnpiimportmatplotlib.pyplotaspltfrommpl_toolkits.basemapimportBasemap#initializegraphicsplt.figure(figsize=(8,8))#底图:圆,lat_0:纬度;lon_o:经度,(113,29)为武汉m=Basemap(projection='ortho',resolution=None,lat_0=29,lon_0=113)#背景色m.bluemarble(scale=0.5)#显示plt.show()这里的重点是Basemap,指定你要放置的中心。效果还不错,不仅如此,它不仅仅是一个图像,它是一个功能齐全的matplotcanvas。这也意味着,你可以在上面画线!我们把地图放大,进入华人区,标出深圳的位置:#导入需要的包importnumpyasnpiimportmatplotlib.pyplotaspltfrommpl_toolkits.basemapimportBasemap#下面三行是matplot显示中文来自pylabimportmplmpl.rcParams['font.sans-serif']=['FangSong']mpl.rcParams['axes.unicode_minus']=Falsefig=plt.figure(figsize=(8,8))#注意几个新参数width和height用于控制缩放比例#分别代表投影的宽和高(8E6代表8x10^6米)m=Basemap(projection='lcc',resolution=None,width=8E6,height=8E6,lat_0=23,lon_0=113,)m.bluemarble(scale=0.5)#这里的经纬度为:(longitude,latitude)x,y=m(113,23)plt.plot(x,y,'ok',markersize=5)plt.text(x,y,'深圳',fontsize=12,color="red")plt.show()不要用蓝色背景图,不是很清楚,让我们将其更改为浮雕类型:是的明显地看到山脉和丘陵等地理特征。您还可以根据需要连接某些城市或在某些经纬度之间绘制区域。别忘了,这是matplotlib的可编辑画布。3.世界地图接下来,我们将上述世界地图展开成一个带有经纬线的平面图形。#导入所需的包importnumpyasnpiimportmatplotlib.pyplotaspltfrommpl_toolkits.basemapimportBasemapfromitertoolsimportchaindefdraw_map(m,scale=0.2):#绘制带阴影的浮雕图像m.shadedrelief(scale=scale)#剪切根据纬度和经度,每隔13度画一条线lats=m.drawparallels(np.linspace(-90,90,13))lons=m.drawmeridians(np.linspace(-180,180,13))#收集所有lineslat_lines=chain(*(tup[1][0]fortupinlats.items()))lon_lines=chain(*(tup[1][0]fortupinlons.items()))all_lines=chain(lat_lines,lon_lines)#在循环中画线forlineinall_lines:line.set(linestyle='-',alpha=0.3,color='w')fig=plt.figure(figsize=(8,6),edgecolor='w')m=Basemap(projection='cyl',resolution=None,llcrnrlat=-90,urcrnrlat=90,llcrnrlon=-180,urcrnrlon=180,)draw_map(m)plt.show()嗯,有点像那样。可以自己打印出来教孩子地理。可是他要学地理,好像整个世界都大了点?让他先了解世界著名景点的位置,好吗?#导入需要的包importnumpyasnpiimportmatplotlib.pyplotaspltfrommpl_toolkits.basemapimportBasemapfromitertoolsimportchain#下面三行是matplot显示中文的frompylabimportmplmpl.rcParams['font.sans-serif']=['FangSong']mpl.rcParams['axes.unicode_minus']=Falsedefdraw_point(m,x,y,name):#这里的经纬度为:(longitude,latitude)x,y=m(x,y)plt。plot(x,y,'ok',markersize=5)plt.text(x,y,name,fontsize=12,color="red")defdraw_map(m,scale=0.2):#绘制带阴影的浮雕Imagem.shadedrelief(scale=scale)#根据经纬度裁剪,每隔13度画一条线lats=m.drawparallels(np.linspace(-90,90,13))lons=m.drawmeridians(np.linspace(-180,180,13))#收集所有行lat_lines=chain(*(tup[1][0]fortupinlats.items()))lon_lines=chain(*(tup[1][0]fortupinlons.items()))all_lines=chain(lat_lines,lon_lines)#Loopdrawinglinesforlineinall_lines:line.set(linestyle='-',alpha=0.3,color='w')fig=plt.figure(figsize=(8,6),edgecolor='w')m=Basemap(projection='cyl',resolution=None,llcrnrlat=-90,urcrnrlat=90,llcrnrlon=-180,urcrnrlon=180,)locations={'TajMahal':(17,78),'吉萨金字塔':(29,31),'巨石阵':(51,1),'巴黎圣母院':(48,2),'卢浮宫':(48,2),'红场和克里姆林宫':(55,37),#...}draw_map(m)forlocinlocations:print(locations[loc])draw_point(m,locations[loc][1],locations[loc][0],loc)plt.show()这种方式只需要将某个地方的经纬度类似地添加到locations中,就可以显示在地图上,还可以自定义绘制两地之间的连线,或者专注于某个区域的放大,总而言之,基本上你想做的事情基于Matplotlib就可以完成。这是我们文章的结尾。如果你今天想要我们的Python教程,请继续关注我们。如果对您有帮助,请在下方点赞/观看。有什么问题可以在下方留言区留言,我们会耐心解答!Python实用书(pythondict.com)不只是一本书欢迎来到公众号:Python实用书原文来自Python实用书:Python绘制你的世界地图