5.4. 课: 动作
现在,您已经在上一课中看到了默认动作,现在是定义自己动作的时候了。
动作是指单击要素时发生的事情。可以为地图添加许多额外的功能,例如,允许您检索有关对象的其他信息。设定动作可以为地图提升一个全新的维度!
本课目标: 学习如何添加自定义动作。
在本课程中,您将使用之前创建的 school_property 图层。示例数据包括您数字化的三个属性的每张照片。我们要做的是将每个属性与其图像进行关联。然后,创建动作,在单击某个属性时打开该属性的图像。
5.4.1. 跟我做: 为图像添加字段
school_property
图层还无法将图像与属性相关联。首先,我们将为此创建字段。
打开 图层属性 对话框。
单击 字段 选项卡。
切换编辑模式:
新增一列:
输入以下值:
创建字段后,移动到 属性表单 选项卡并选择
image
字段。将 控件类型 设置为 附件 :
在 图层属性 对话框中单击 确定 。
使用 识别 工具单击 school_property 图层中的三个要素中的一个。
由于您仍处于编辑模式,该对话框应处于激活状态,如下所示:
单击浏览按钮 ( image 字段旁边的 ... )。
选择图像的路径。这些图像位于
exercise_data/school_property_photos/
,并与它们应该关联的要素命名相同。单击 确定 。
使用此方法将所有图像与正确的要素相关联。
保存编辑并退出编辑模式。
5.4.2. 跟我做: 创建动作
在 添加新动作 对话框中的 描述 字段输入
Show Image
字符:下一步要执行的动作因操作系统而异,因此请选择适当的课程:
Windows
单击 类型 下拉列表并选择 打开 。
Ubuntu Linux
在 动作 中,为 Gnome Image Viewer 编写
eog
,或编写display
以使用 ImageMagick 。请记住在命令后面加一个空格!MacOS
单击 类型 下拉列表,并选择 Mac 。
在 动作 中,写入
open
。记住在命令后面加一个空格!
现在可以继续编写命令了。
您要打开图像,QGIS需要知道图像的位置。它所要做的就是告诉 动作 图像在哪儿。
从动作文本列表中选择 image :
单击 插入 按钮。QGIS将在 动作文本 字段中添加短语
[% "image" %]
。单击 确定 按钮关闭 添加新动作 对话框
单击 确定 ,关闭 图层属性 对话框
现在是测试新动作的时候了:
5.4.3. 跟我做: 搜索互联网
假设我们正在查看地图,并希望了解更多有关农场所在区域的信息。假设您对所讨论的区域一无所知,并希望找到有关它的一般信息。考虑到您现在正在使用电脑,首先想到的可能是用谷歌搜索该地区的名称。所以,让我们告诉QGIS为我们自动执行此操作!
打开 landuse 图层的属性表。
我们将使用每个土地利用区域的
name
字段进行谷歌搜索。关闭属性表。
返回 图层属性 中的 动作 。
单击 创建默认动作 按钮添加一些预定义的动作。
双击所剩动作进行编辑
将 描述 更改为
Google Search
,并移除 短名称 字段的内容。确保 作用域 中的 画布 被勾选。
下一步要执行的动作因操作系统而异,因此请选择适当的课程:
Windows
在 类型 中,选择 打开 。这将告诉Windows使用默认浏览器打开互联网地址,如 Internet Explorer。
Ubuntu Linux
在 动作 中,写入
xdg-open
。这将告诉Ubuntu在您的默认浏览器中打开互联网地址,如 Chrome 或 Firefox。MacOS
在 动作 中,写入
open
。这将告诉MacOS在您的默认浏览器中打开互联网地址,如 Safari。
现在可以继续编写命令了
无论您在上面使用哪个命令,都需要告诉它下一步要打开哪个互联网地址。您希望它访问谷歌,并自动搜索短语。
通常,当您使用谷歌浏览器时,会在谷歌搜索栏输入待搜索的短语。但在这种情况下,您希望计算机为您执行此操作。您告诉谷歌搜索某个东西 (如果不想直接使用它的搜索栏) 的方式是给您的互联网浏览器提供地址
https://www.google.com/search?q=SEARCH_PHRASE
,其中SEARCH_PHRASE`
是您要搜索的内容。因为我们还不知道要搜索哪个短语,所以只需输入第一部分 (不包括搜索短语)。在 动作 字段里,写入
https://www.google.com/search?q=
。请记住在写入此命令之前,在初始命令后添加一个空格!现在,您希望QGIS告诉浏览器,让谷歌搜索您可以单击的任意要素
name
的值。选择 name 字段。
单击 插入 按钮:
这意味着QGIS将打开浏览器并将其发送到地址
https://www.google.com/search?q=[% "name" %]
,其中[% "name" %]
告诉QGIS使用name
字段的内容作为要搜索的短语。例如,如果您单击的土地利用区域被命名为
Marloth Nature Reserve
,QGIS将把此短语发送到浏览器https://www.google.com/search?q=Marloth%20Nature%20Reserve
,这将导致您的浏览器访问谷歌,而谷歌将反过来搜索 "Marloth Nature Reserve" 。如果您还没有这样做,请按照上述说明进行设置。
单击 确定 按钮关闭 添加新动作 对话框
单击 确定 ,关闭 图层属性 对话框
现在来测试新动作。
在 图层 面板激活 landuse 图层后,单击 执行要素动作 按钮右侧的向下箭头,然后选择为该图层定义的唯一动作 (
Google Search
) 。单击地图上您能看到的任意土地利用区域。您的浏览器现在将打开,并将启动谷歌搜索记录为该区域
name
值的位置。
备注
如果您的动作没有反应,请检查输入的所有内容是否正确,打字错误在这类工作中很常见!
5.4.4. 跟我做: 直接在QGIS中打开网页
以上,您已经了解了如何在外部浏览器打开网页。这种方法存在一些缺点,因为它增加了一种不可知的依赖关系 - 最终用户是否拥有在其系统上执行动作所需的软件?正如您所见,如果您不知道将使用哪个操作系统,甚至不一定有相同类型的基本命令来执行相同的动作。对于某些操作系统版本,上述用于打开浏览器的命令可能根本不起作用。这可能是一个无法克服的问题。
然而,QGIS基于功能强大且用途广泛的Qt库。此外,QGIS动作可以是任意、标记化的 (即使用基于字段属性内容的变量信息) Python命令!
现在,您将看到如何使用python动作来显示网页。这与在外部浏览器打开网站的总体思路相同,但它不需要用户系统上的浏览器,因为是使用 Qt QWebView 类 (这是一个基于webkit的html控件) 在弹出窗口中显示内容。
这次让我们访问维基百科。因此,您请求的URL如下所示:
https://wikipedia.org/wiki/SEARCH_PHRASE
要创建图层动作,请执行以下操作:
打开 图层属性 对话框,转到 动作 选项卡。
使用动作的以下属性设置新动作:
类型:
Python
描述:
Wikipedia
动作文本 (全部在一行):
from qgis.PyQt.QtCore import QUrl; from qgis.PyQt.QtWebKitWidgets import QWebView; myWV = QWebView(None); myWV.load(QUrl('https://wikipedia.org/wiki/[%name%]')); myWV.show()
在此强调几点:
所有python代码都在一行,并用分号分隔命令 (而不是换行符,这是分隔python命令的常用方式)。
[%name%]
将在调用动作时替换为实际属性值 (如前所述)。这段代码只是创建一段新的
QWebView
实例,设置URL,然后对其调用show()
,使其在用户桌面上显示为窗口。
请注意,这是一个有点做作的例子。Python使用具有语义明显的缩进,因此用分号分隔并不是编写代码的最佳方式。实际上,您更有可能从Python模块导入逻辑,然后调用具有字段属性作为参数的函数。
您还可以使用这种方法显示图像,而无需用户在其系统上使用指定的图像查看器。
尝试使用上述方法,用刚刚创建的维基百科动作加载维基百科页面。
5.4.5. 综上所述
动作允许您为地图提供额外的功能,这对于在QGIS中查看同一地图的最终用户非常有用。由于可以对任何操作系统以及Python使用shell命令,因此可以使用的功能是无限的!
5.4.6. 下节引言
现在,已经完成了各种矢量数据的创建,您将学习如何分析数据以解决问题。这是下一单元的主题。