python embed版本_【PyQGIS】Python编程入门(QGIS3)

QGIS具有强大的编程接口,可让您扩展软件的核心功能以及编写脚本以自动执行任务。QGIS支持流行的Python脚本语言。即使您是初学者,学习一点Python和QGIS编程接口也可以使您的工作效率更高。本教程假定您没有先验的编程知识,并且旨在介绍QGIS(PyQGIS)中的python脚本。

任务概述

我们将加载一个代表所有主要机场的矢量点图层,并使用python脚本创建一个文本文件,其中包含该图层中每个机场的机场名称,机场代码,纬度和经度。

获取数据

我们将使用自然地球的机场数据集。

下载Airports shapefile。

程序

  1. ne_10m_airports.zip在QGIS浏览器中找到文件,然后将其展开。选择ne_10m_airports.shp文件并将其拖到画布上。

    ee38775ac1da79e1d771d55116870022.png

  2. 您将看到ne_10m_airportsQGIS中加载的图层。

    8384571976fdc1ca7b942fceb9ff2962.png

  3. 选择“ 标识”工具,然后单击任意点以检查可用属性。您将看到机场名称及其3位数字代码分别包含在属性name和中iata_code。您可以关闭“识别”窗口。

    4dc3107d4ffb79e821fa0b0c321de9b9.png

  4. QGIS提供了一个内置控制台,您可以在其中键入python命令并获取结果。该控制台是学习脚本和进行快速数据处理的好方法。转到插件‣Python控制台,打开Python控制台。

    228a4279b940c68362855b861598bee4.png

  5. 您将在QGIS画布的底部看到一个新的面板打开。您会>>>在底部看到类似的提示,您可以在其中键入命令。为了与QGIS环境进行交互,我们必须使用iface变量。要访问QGIS中当前活动的图层,可以输入以下内容,然后按Enter。该命令获取对当前加载的图层的引用,并将其存储在layer变量中。

layer = iface.activeLayer()

fe72b4cdc6710292b59da459f225bc37.png

  1. dir()在python中有一个方便的函数,可为您显示任何对象的所有可用方法。当您不确定对象可以使用哪些功能时,这很有用。运行以下命令以查看我们可以对该layer变量执行哪些操作。

dir(layer)

5258423b951c0c53215d658d8450c4ce.png

  1. 您会看到一长串可用功能。现在,我们将使用一个名为的函数getFeatures(),该函数将为您提供对图层所有要素的引用。在我们的案例中,每个要素都是代表机场的点。您可以键入以下命令来迭代当前层中的每个要素。

注意

缩进(或每个语句前的空格数)在Python中非常重要。如果在此步骤中遇到错误,请确保在输入第二行之前添加了2个空格。

由于print(f)语句位于for循环内,因此您需要Enter在该语句后按两次-一次退出循环-再次执行该命令。

for f in layer.getFeatures():

print(f)

745a10db00e2ea7434278d8451063087.gif

  1. 正如您将在输出中看到的那样,每一行都包含对图层中要素的引用。对要素的引用存储在f变量中。我们可以使用f变量来访问每个功能的属性。键入以下内容以打印nameiata_code为每个机场功能。

for f in layer.getFeatures():print(f['name'], f['iata_code'])

14d9abe2e925b9173bd9e686707524c6.gif

  1. 因此,现在您知道如何以编程方式访问层中每个要素的属性。让我们看看如何访问要素的坐标。可以通过调用geometry()函数来访问矢量要素的坐标。此函数返回可存储在变量中的几何对象geom。您可以asPoint()在几何对象上运行函数以获取该点的x和y坐标。如果要素是直线或多边形,则可以使用asPolyline()asPolygon()函数。在提示符下键入以下代码,然后按Enter查看每个要素的x和y坐标。

for f in layer.getFeatures():
geom = f.geometry()print(geom.asPoint())

b839468c55c387b91ae9ffe76b90445f.gif

  1. 如果我们只想获取x要素的坐标怎么办?您可以x()在点对象上调用该函数并获取其x坐标。

for f in layer.getFeatures():
geom = f.geometry()

print(geom.asPoint().x())

a8b7f60ea4292479f1dea98b34621e0d.gif

  1. 现在,我们可以将所有零件拼接在一起以生成所需的输出。输入以下代码以打印每个机场要素的名称,iata_code,纬度和经度。在这里,我们使用的.format()方法可以在打印多个变量时提供更多控制。该.2f符号是坐标限制为2位小数。

for f in layer.getFeatures():
geom = f.geometry()print('{},{},{:.2f},{:.2f}'.format(f['name'], f['iata_code'], geom.asPoint().y(), geom.asPoint().x()))

8bed93387689c5083692f8888db31f62.gif

  1. 您可以在控制台上看到输出。存储输出的更有用的方法是在文件中。您可以键入以下代码来创建文件并将输出写入那里。将文件路径替换为您自己系统上的路径。请注意,我们\n在行格式末尾添加。这是在我们为每个功能添加数据后添加换行符。

注意

下面有2级代码块。请确保在代码起始行3中添加4个空格。

with open('/Users/ujaval/Desktop/airports.txt', 'w') as file:for f in layer.getFeatures():
geom = f.geometry()
line = '{},{},{:.2f},{:.2f}\n'.format(f['name'], f['iata_code'], geom.asPoint().y(), geom.asPoint().x())file.write(line)

c314eddde36cd1791292f7399a481635.gif

  1. 您可以转到指定的输出文件位置,然后打开文本文件。您将看到我们使用python脚本提取的来自机场shapefile的数据。

    e961bab950f09c5d82471916a6a84bdf.png

2693b16c943dcd72861b8218ea162727.png

END

版权声明:本译文仅限技术交流,版权归原作者

28db5cf55d1043ef84c21fdd0aa2d7fd.gif

点击下方“阅读原文”查看更多

2f7b300ee384419c67b5e9b8d2c5c7b1.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值