本文有浓烈的个人偏好,每个语言都有各自的特点,选择适合自己的就好。
本人在接触Python之后,对其甚是喜欢。网上虽然有关于其在空间数据处理方面的中文文章,但总体不多。计划写一些关于Python在GIS和遥感等空间数据处理分析方面的应用。在后续的文章中将主要包括Python的入门、基本环境配置、常用工具包及其在遥感和GIS数据处理方面的基本应用。
前言
作为一个非计算机专业的人,接触过的编程语言其实也不算少了。入门的经典C语言就不必说了,本科还曾经选修过VB
和java
(上完课就还给老师了),用过C#
,C++
做一些小软件,现在主要用Python
偶尔加R
辅助,再加上曾尝试写过一两行代码的IDL
和Matlab
。正所谓贪多嚼不烂,哪一个都没能精通甚至谈的上熟练使用。出国留学之后,希望能做一些和机器学习相关的内容,网上搜罗一遍,看各种语言之争,最后决定从Python
入手,至少到目前觉得Python
值得我投入那么多时间去学习掌握它。
为什么选择Python
因为学会Python
你就能飞了。。。
1. Python
方便灵活
之前对于矢量或栅格数据的处理,非常严重的依赖于ArcGIS
和ENVI
,尤其是数据读取,如ArcGIS
的.shp
,ENVI
的.img
,以及LiDAR
的.las
等这类独有的格式,离开了这些专业软件基本就不知道该怎么对付这类数据了。所以在选择语言的时候,矢栅数据读取以及数据基本分析(空间分析,遥感影像的)是否灵活方便很重要,这也是为什么在学校时都是学的基于ArcGIS Engine
和IDL
二次开发(好像GIS
专业的特长就是二次开发似的,总感觉这就像是软件开发世界的二等公民)。Python
在一定程度上能够解决这个问题,不再依赖于特定的软件平台,毕竟那些对工具依赖性强的工作,你的价值越依附于工具,你越是要警惕自己的思考能力被工具剥夺。
2. Python
库丰富
可以说我在了解Python
各种库上面花费了很多时间,有时间应该整理一个表格分类列出来有用的工具包。至少,在矢量数据方面,有GDAL
,Geopandas
,leafet
,rasterio
;fiona而栅格数据方面,通用的图像处理有opencv
,scikit-image
,用于遥感图像的有spectral-python
。更重要的是,如果想涉足机器学习,python
更有从较通用的sklearn
到深度学习的Tensorflow
、keras
等一大票工具包等着你。
3. Python
资源多
在此是指有问题基本都能在stackoverflow等找到答案,也有很多相关的书籍。
4. 代码共享方便
这里特指Juypter Notebook
的.ipynb
文件。文字说明,代码,图在一个文件里面,也可以在gist和nbviewer直接在线共享浏览,微软和anaconda也提供了在线运行环境,申请个账号就能直接运行代码。
4. Python"上手快"
之所以列在最后,我对这点是有些质疑的。因为没有一定的编程功底和对编程语言的理解,很难说的上上手快。装个flask包,敲几行代码运行起来一个网站,不能称之为上手了。我一开始对着些教程敲代码,的确感觉python能在相对短的时间内,用较少的代码完成一些复杂的工作,但都是在利用已有的工具包的情况下,当实际需要处理数据时,还是要非常频繁的去google或翻之前的资料,很多情况都是没有能够深入的去理解。
Python能做什么
对GIS和遥感数据来说,Python能做的事情,那简直是不要太多。
1. 数据读取和处理
2. 脚本
ArcGIS,ENVI等商业软件都可以用Python做脚本语言,QGIS,SNAP和EnMAP等开源工具也用到了它。
3. 机器学习
更时髦的词,可以用地理空间智能,时空大数据等等。
4. Web开发
GeoDjango
5. 桌面开发
Python结合tkinter和pyqt,也能胜任,但没啥优势可言。不过,貌似除了三维、VR/AR,普通的桌面开发也已经颓废,被Web和移动端占据了。
总结
一句话总结: Python的生态系统庞大,应用场景丰富。
作者:时空Drei
链接:https://www.jianshu.com/p/f01315e034a7