基于Python的开源GIS应用开发

2020-11-25 11:41林旻徐志
电子技术与软件工程 2020年16期
关键词:函数库编辑器工具箱

林旻 徐志

(1.南京审计大学实验中心 江苏省南京市 211800 2.江苏省南京市江宁区审计局 江苏省南京市 211100)

随着计算机技术的飞速发展,Python 作为一种脚本语言在目前已经有了十分广泛的应用,其拥有的强大功能使其得到了许多行业领域得认同,它不像其他语言一样需要使用编译器,同时还拥有十分丰富的函数库,人们能够通过Python 语言高效地开发出新的应用程序。GIS 即是指地理信息系统,对地理分布、空间分布等数据进行输入、存储、查询以及分析和显示等操作,将这些数据变成地图并使其视觉化,目前已经被广泛应用于许多不同的领域。随着科学技术的进步发展,我国的地理信息技术也在发生质的改变,同时也需要不断利用新的技术手段促进其持续发展。而如果利用Python进行GIS 的开发和应用、利用Python 调用ArcPy 集成ArcGIS 空间分析,那么过程必然会变得更加简便,本文就利用Python 语言及其函数库对GIS 应用的开发进行了具体的研究。

1 Python与GIS

众所周知Python 是一种拥有强大函数库的语言,而其函数库又可分为第三方函数库和标准函数库两大类,其中第三方函数库指的是在原有基础上开发而来的,是Python 区别于其他众多语言之处。而标准函数库则是指Python 本身就有的函数库,能够实现网络、字符、系统等基础性的操作控制,Python 中有超过200 个的标准库[1-2]。而如果要在Python 的基础上进行GIS 的应用开发,那么必然就需要使用到第三方函数库,以下便是几个在GIS 应用开发中常用的Python 第三方函数库的简单介绍。

1.1 Arcpy

ArcGIS 适用于地理处理操作,能够完成空间分析、数据转换、地图模型制作等任务,它支持多种脚本语言,但自从ArcGIS10 的出现,其默认安装程序已经不再是VBA 了,近几年主要以Python作为其替代,而Arcpy 作为ArcGIS10.X 的原有程序窗口,主要被应用于地理数据的交互处理。首先,程序语言编辑器也被称作了集成开发环境,开源软件、商业软件均是市场上常见的程序语言编辑器,Arcpy 的常用语言编辑器有spyder、Python Shell 等。而Arcpy在spyder2.7 编辑器中的编辑和运行,则需要按照一定的步骤进行。ArcGIS 在Arcpy 中的开发应用还需要很好地掌握ModelBulider,从而才能更好地发挥Python 的脚本作用。ArcGIS 的处理框架包括了ArcToolbox、ModelBulider、Python 三大部分。在ArcToolbox 中主要有三种工具箱,脚本工具箱、内置工具箱和模型工具箱,其中脚本工具箱是执行、处理相关脚本文件的,内置工具箱则可实现对某一命令的批处理,模型工具箱则是由ModelBulider 创建的。ModelBulider 包括了连接器、值变量、数据变量以及工具四种类型[3-4]。对于已经构建好的模型流程图可以将其转变为Python 代码,按照顺序单击Model--Export--To Python Script 就能够完成对其的转变了。运用ArcGIS 的空间分析功能,将土地利用现状调查成果、南京天地图数据、卫星影像ENVI 识别数据的建设和占用,与饮用水水源保护红线区域作叠置分析,并且借助model-builder 固化相关审计模型[5]。

1.2 Geopandas

Geopandas 是建立在pandas 基础上的第三方函数库,主要用于地理空间数据的处理,在继承了pandas 的优点的同时,还为地理空间数据的操作提供了高级接口,从而赋予Python 进行GIS 的相关操作的可能性。Geopandas 中包括了geodataframe、geoseris 两种数据类型,分别是pandas 和dataframe 的子类,这两种类型的数据也可以被理解为空间数据的储存器,能够记录空间对象的几何位置、属性等。而shapefile、geodataframe 作为两种不同格式的文件是可以实现相互转化的。通过Geopandas,我们可以制作平面的、曲面等多种几何形状的地图信息,还能进行标点、着色等,能够实现批量化的GIS 操作。Geopandas 有点/点集合、线/线集合、多边形/多边形集合三个基本类的几何对象,通过Geopandas,我们可以实现读取空间数据、写入空间数据等操作。Geopandas 可以读取shapefile、GeoJSON 文件等格式的命令,使用“GeoDataFrame.to_file()”这一方法则可导出多种不同的标准格式,从而写入空间数据。matplotlib 库作为用于地图的制作的高级接口,其操作十分简便。而地理信息有时也需要进行投影,投影又包括了设置投影和重新投影两种操作,如果使用了“from_file()”命令加载的数据那么一般都会有投影信息,而如果没有获得投影信息,那么就需要设置CRS 以设置投影[6-7]。

1.3 GDAL/OGR

GDAL/OGR 文库主要被应用于GIS 格式和扩展之间的转换,其目前能够支持上百个光栅驱动盘以及矢量,有着十分广泛的应用,例如ArcGIS、GRASS GIS、ERDAS 等绝大部分的GIS 软件都需要使用 GDAL/OGR 进行翻译,通过 GDAL/OGR 库,能够实现对地理空间数据管理系统的栅格文件数据和矢量的支持。GDAL 对于数据的解析需要使用到抽象数据模型,而抽象数据模型又包括了坐标系统、dataset、colortable 等。GDAL 包括了GDALMajorObject类和GDALDriver 类,前者是带有元数据的对象,后者则是对文件进行格式分类管理的。OGR 可分为Geometry、Spatial Reference、Feature 以及Feature Definition 等共七部分,其中Geometry 可实现几何操作、格式转换、空间投影等,Spatial Reference 能够实现投影和基准面的定义,Feature 则容纳了geometry 和geometry 的双重属性[8-9]。

1.4 RSGISLib

RSGISLib 库能够对图像进行详细的分类、过滤、统计,是遥感工具光栅处理和分析的函数库。

1.5 PyProj

PyProj 库能够进行各种地理参考系统投影和坐标的变换,也能够利用特定的基准对地面、距离进行测量和计算。PyProj 作为一个开源项目,也能够被其他语言进行调用,其包括了Proj 和Geod 两大类,其中Geod 主要被应用于两个不同位置点之间的距离、相对的方位等,而且也能在两点间插入不同要求的点,其主要包括了fwd()、inv()、npts()三个函数,第一个函数是正转换函数,输入前方位角和后方位角,能够得出经纬度;第二个函数是反转换函数,输入经纬度,然后就能得出前方位角、后方位角和距离;第三个函数中输入起始点及终点的坐标、等分点数目,就能得出等分点之间的球面距离。其中Proj 的主要功能是实现经纬度和地图投影坐标之间的转换,在转换的过程中,需要使用到“transform()”函数,才能实现制图的有效转换。transform()函数就相当于Proj中的子程序,其用法为:x2,y2,z2=transform(p1,p2,x,y,z=None,radians=False),再输入x,y,z 的时候,可以分别是数组或序列的某一种形式[10]。

2 基于Python的开源GIS应用开发

本文以Arcpy 作为开源GIS 应用开发基本的函数库,对具体的操作进行了简要的讲解,具体如下。

在进行ArcGIS 地理处理前,需要将Arcpy 站包点导入,并对Arcpy 当前工作空间进行设置,具体代码如下:

Import arcpy

from arcpy import env

env.workspace=“c:/data/data.gdb”

这就是对工作环境的基本设置,完成后我们需要使用到Analysis Tools 中的Buffer,双击打开工具后将相关的参数填入,然后即可关闭并执行Buffer 工具,可以使用右侧的工具帮助或代码自动补全功能进行操作,具体代码如下:

Import arcpy

arcpy.Buffer_analysis("Streams","Stream_Buff","X Meters")

然后便会出现X 米的多边形图层,这时我们可以使用pan 和zoom 工具进行平移或缩放,以便于看清输出要素。此时,一个非常简单的地理图像信息就构建完成了。但使用Arcpy 进行GIS 应用开发是一个较为复杂的过程,由于篇幅限制本文不再做更加详细的讲解了,需要者可从其他渠道学习更为全面、更为深入的操作技能。

3 结语

Python 作为一种编程语言,有着可伸缩度高、可跨平台、可嵌入以及稳定成熟和免费开源等优势,因而其应用范围也在不断扩大。数年前人们早已将Python 应用于GIS 的开发上,使开源GIS 的应用开发变得更加简便。在Python 的基础上进行开源GIS 的应用开发,能够较好地对复杂的地理信息系统进行处理,从而大幅提高GIS 的处理效率。而随着信息技术的迅猛发展,Python 的第三方库也在不断扩大,为GIS 的开发提供了更加多样化的选择。以上就是本文对于基于Python 的开源GIS 应用开发进行了详细的讨论,在对几个常用的第三方函数库进行简单介绍的基础上进行了开源GIS 应用开发的举例,以期对相关学习者、使用者提供一些参考。

猜你喜欢
函数库编辑器工具箱
用于优化雷达信号处理的VSIPL函数库
Scratch求最值和平均值
基于BB60C的IQ数据采集与存储系统设计
车辆段收发车运行图编辑器的设计与实现
基于MATLAB优化工具箱优化西洋参总皂苷提取工艺
Matlab曲线拟合工具箱在地基沉降预测模型中的应用
构建基于24XX系列存储器通用函数库的研究
基于VLIW目标机的ELF二进制编辑器设计与实现
搜狗分号工具箱 输入更便捷
爸爸的工具箱