简明GISer Python学习指南
缘起
python是GISer工作和学习中的好工具,因为快速算法原型、人工智能研发、处理数据、处理流程自动化都在使用python。我对工具的了解的基本原则是大胆尝试,小心求证。2012年接触到python,是因为arcgis 10.0把VBScript废掉用python来替代,后期在图书馆看到有不少学习python的同学,而且诸如GoAgent、 Google App Engine这些工具也用了Python,所以,这门语言有市场。
而且实际用了一下,比较符合我的认知习惯,比较容易学习,语法简明易于理解,同期我也接触过不少脚本语言,MATLAB、php、js、vbs,还有后来的R,都远不及python优雅和简明。开发效率比较高,可扩展性好,无论是作为别的平台的扩展还是自身扩展都比较简单。
随着16年AlphaGo掀起的人工智能热潮,tensorflow等使用python开发的人工智能框架把python推上风口,学校也教授《Python 空间数据处理(Geoprocessing With Python)》,随着对gdal的python接口的深入学习越发着迷于python各方面的优良性能,Python的运行效率自然比不上C++,但是各种开源工具包的获取和安装都很简单,基本上只要有pip就可以整合了,可能这就是之前Perl、Ruby这些语言比较火的原因吧,只是这些语言的语法太诡异,应用也有局限。
多年的深入学习,对python的了解也渐趋全面起来,系统记录自己走过的路、趟过的坑。
GISer学Python
Python简介
首先,python的本质是工具和arcgis、envi、ecognition等软件的本质是一致的。Python的基本内容很简单,但是高级内容庞杂,因此,不需要求全责备,面面俱到,把学习目标控制在自己需要的范围即可。
它和计算机沟通的方式是语言,而不是图形交互。不像ArcGIS、ENVI那样所见即所得,但是它更灵活,在熟悉语法的情况下,可以更好地定制操作,实现自动化,减少劳动的时间。利用Python和Arcpy可以实现ArcGIS操作的成千上万次的重复。
作为一门语言(计算机),计算机语言的词汇很少,也很多,少的是关键字,只有几十个,多的是变量名、函数名这些自定义的词汇。记住关键字和语法是最基本的。语法的最基本是让计算机执行操作,以及控制这些操作的以何种方式执行,仅此而已。最基本的操作就是数学运算、逻辑运算,控制方法无非顺序、条件、循环。其他内容无非是为了实现这些关键功能,结合语言的概念(词、句、段、篇),便于程序员编写代码。引入语言的概念,就是避免直接编写机器语言,机器语言看似毫无意义的0、1序列让开发者忘记写代码的初衷,以近似自然语言的方式完成代码的功能。另一方面,因为需要进行数学、逻辑的运算,所以又引入一些数学的概念(整型、浮点型、声明、变量、参数、函数、操作符、表达式等)。把这些概念和语言里面的具体实现对应起来,就可以在编写代码的时候找到合适的工具实现功能。
Python是一门解释型的计算机脚本语言,所有的高级编程语言最后还是要转换成CPU能理解的机器语言。解释型是从程序转变成机器语言的方式来说的,Python是通过解释器转换后变成了机器语言,开发者只要编写完程序,用解释器解释就可以执行程序。对比C、C++语言,简单易学,几乎不用思考就能够上手,输出hello,world,无需过多的储备知识。开发者不需要知道解释器是什么,怎么让解释器执行Python文件,但是C就要求开发者知道自己用了什么编译器,不同编译器的实现有什么区别,在不同操作系统下编译出来的可执行程序格式也不同,等等。Python开发者只要打上:python helloworld.py,程序就运行了。计算机脚本语言,一般可以认为这是一门弱类型的语言,想想C里面的long、short、int、float、double、char等等,以及每个变量声明时都必须声明它的类型,函数也是,但Python不需要,也不允许你声明变量类型,它会在解释的时候根据上下文自行判断。
便于适配现有平台,许多高级语言的发展时间比较短,自身的生态不健全,如果可以快速借用现有平台,开发者就可以快速地迁移到这个平台,减轻技术栈迁移的成本(时间、精力)。生产力得到较大提升,至少在某些方面拥有远超之前平台的效率。Python运行速度相对于C之类的编译型语言比较慢,但是这个短板不会成为瓶颈问题,且不说cython的效率接近于C,其高效的扩展接口,可以直接调用C、Fotran编写程序库执行高效代码。
学什么
GISer学Python除了掌握Python本身的核心语法,需要掌握一些常用的空间信息开发工具库,后文会列出。gis专业的方向也就那么些,我了解的就是空间数据处理(区划图、分布图)、空间信息系统建设(空间数据云、数据库以及各种系统)、空间分析算法(数据分析-行为模式、分布规律、地统计分析,地理理论推导-空间分析)、数字地图制图(地理要素表达、色彩、投影)、地理环境仿真模拟(建模-高精度曲面模型、DEM、DTM)。除了仿真模拟这一块,Python基本上都有比较可靠的工具。
学习的方法主要是自学和参加学校的课程,如果要参加课程可以尽量现在网络上找一些教学视频看一下,了解一下教学质量和教学方式。路线思路如下图: