地图——依据python的gis开发与应用-亚洲ca88官方网站发布时间:2021-10-22 21:16:22 来源:亚洲ca88官方网站这是沁园春里最难的、最中心的部分。没有地图,GIS是玩不转的。没有柱石,如何能建起楼房?地图便是gis的柱石。我的论文要义是依据python做gis,所以python成了我的制图东西。而python是一个奇特的言语,它的开发者为它和它的忠诚编程粉丝规划和开发了林林总总的python包和python库,就只谈制做地图这方面的包和库就有好几种,比方matplotlib、folium、basemap、pyplot、cartopy等等。我前面也提到了,python 2.X版别在2020年被中止保护和晋级,而作为python 2.X的殉葬品,basemap等包也得不到更新。可是我国人自己研制的pyecharts是开发地图的神器,适用于python任何版别里,并且我用的是python 3.8版别,所以我就用它来完结这次的地图制造项目。 Pyecharts制造出来的东西是可视化的、有交互性的。Pyecharts输出格局现在所知只要两种:别离为html格局和png格局。可是Pyecharts的交互性只能表现在HTML上,无法将交互性引用到图片中,因而pyecharts能够和一些web结构联动,这是后话,暂时不在这儿谈。 另话:制造地图除了像我这样以外,还能够调用API来做。像百度地图、高德地图等地图制造公司都有相关地图制造开发敞开渠道,是地图爱好者等人的天堂。有了这些API,就能够把python的地图包给省下了,可是要导入urllib包、requests包等跟爬虫相关的包,并且这个制图方法要点不在python身上,而是HTML修改上。所以我没有挑选这个方法,这个方法无法表现gis是依据python上。 Pyecharts由一支国人团队研制,有专门的操作阐明,其阐明网址是:/,他们还特别为编程者设有一个实例网址(专门供给事例供爱好者去研讨pyecharts深化学习):gallery.pyecharts.org/#/,里边有许多令人惊奇到失声的美图和代码,让人恋恋不舍。 这一步虽说是制造地图,其实否则,地图的制造早就被pyecharts的开发人员给做好了,我只需求调用它即可,然后再给它附上数据,这就成为了我首创独有的地图。 能够不必再写爬数据的代码,但缺陷是:当天只能爬当天的数据,之前的数据一概爬不到,并且我也不可能天天爬。 第一步,除了pyecharts,还要导入pandas。Pandas也是一个奇特的包。我的数据是存在excel里的,一般python调用excel的数据需求下好几个包,并且还要依据excel版别不相同下对应版其他包。Pandas一会儿就把这些琐碎的杂事处理了,pandas有一个excel读取函数,不管excel文件后边装点是.xlsx仍是.xls,皆能够读取调用。这个函数是read_excel(),假如被调用的excel里有多个页表,就需求在该函数内标明是哪个页表,用sheet_name=’ ‘来表明。以我的代码为例,如下: 这个意思是读取G盘里pycharm/Spider/疫情历史数据(个人收拾,非官方供给)这个文件夹里的名为“疫情数据2019年12月”的excel文件中的名为‘2019-12-31’的页表,因为我在这个excel文件里设置了许多页表,需求独自提出,否则默许读取的是第一个页表或许读取会犯错。 第二步,将读取的数据转换为二元的列表,即和pyecharts里地图数据格局相吻合。该列表代码如下所示: 我这个excel表里有两列,我别离命名为‘province’和‘confirmed’,别离代表我国的省份和各自省份确诊人数。我就需求这两列数据来做文章、做地图、做GIS。 这第三步跟之前的其一的第二部相似,调用Map()里的set_global_opts()函数,给地图设置标题、设置数据规模。然后再运用add函数增加地图数据和地图类型。假如能够,在做这步之前最好先创立一个地图目标,这样做不怎么会出过失。 最终再用render()函数输出成果。成果如下图4.15所示(该示例显现的疫情时刻是2019年12月31日): 这个方法的缺陷是:无法做到批量化,做这么多张地图,要一个一个地输入excel文件名,使命量非常重,且这么做简略犯错。 其实做到这儿我就现已完结了我的使命。那些疫情地图基本上算是GIS,归于较简略的。我之前也说了,GIS是数据上的地图。我把数据镶嵌在地图里并显现出来,就现已做出了一个GIS。 可是我不满足,我觉得要用一个东西来烘托它,就像用盘子来托住瓜果菜蔬。GUI成了我的首选。我思来想去,我决议运用Qt,尽管这是一个C++编程软件,但它和python有联络、有相关,并且在python中可用GUI编程里Qt是最为拔尖、最受编程者的欢迎,所以我挑选了它来制造我的GUI。 Qt制造GUI我在前面讲过,这儿就不重复了。可是我不只仅是把html网页嵌入到GUI里,我想做一个界面,一个能够直接看不止一个疫情地图的界面。这样就不只仅是在Qt里拖动几个组件那么简略,而是需求再参加信号与槽。信号(Signal)便是一种布告,一种需求在特定状况下被发射(emit)的布告;而槽(Slot)则是对那些信号呼应的函数。槽本质上便是一个函数,所以它就能够被调用。可是槽函数和其他函数不相同的当地是:槽函数是能够与其间一个信号彼此相关,所以当发射某个信号那个片刻,与此相相关的对应槽函数会被主动履行。 其他话不多说了,我直接上图。在Qt里除非用到非常杂乱的界面,否则只需简略操作即可取得一般界面。如下图4.16: 这个方法的短板显露出来了。用这个界面不能放入超越10个HTML页面,否则界面会主动闪退,并且假如屡次运转,电脑会直接黑屏。我上网查资料,发现这个现象被称为“仓库溢出”,处理的方法涉及到多线程。我觉得好杂乱,不如先设置一个总界面,上面有多个按钮,别离对应不一起刻段,仅仅觉得这样做不美观就抛弃了,我仍是决议另辟蹊径。 这个事例是关于我国每年各省GDP汇总。这个图例里不只有地图和时刻线,还有饼图、柱形图、折线图和时刻线上的轮播(可主动播放)。 这张图显现的是2020年4月份每一天疫情感染确诊人数状况图,其间包括GIS、折线图、柱形图和饼图,并且有数据显现。 B、现在我只能把一个月的数据进去,无法一起放五个月的。因而我为此做了五个不同的timeline。 C、这次做的地图跟之前做的不相同,之前那张能够在省的上方呈现数据,而这张不可,数据是呈现在其他一个小柱子上,有些不方便,可是现在我改动不了。 运用PyInstaller其实非常简略。翻开命令提示符,把途径改到想要存储文件的当地(pyinstaller生成的文件与cmd开始方位休戚相关,所以一定要选好途径),然后在cmd里敲入如下指令(举例,我这儿用的源文件是pyecharts5.py): 在履行这条指令完结后,会在该文件夹下呈现两个文件夹,别离为dist和build。其间:build是用来存储pyinstaller发生临时文件的目录(可安全删去);dist里边包括可履行文件pyecharts5.exe(可履行文件名同源文件名相同),其他文件是该可履行文件的动态链接库。 我点开pyecharts5.exe后先是呈现如cmd相似的界面,然后才呈现源文件编写的界面。如下图4.20所示: 因为直接调用6.2里用到的.py文件,没有换其他文件,得到的成果同6.2的是相同的,仅仅输出方法不同,一个是pycharm输出,另一个是pyinstaller输出。 上一篇:逐梦异乡铜梁人之宋关福 行走云端看世界 下一篇:怎样轻松完成GIS电子地图开发? - OSCHINA |