5.4. Lesson: 行为
既然您已经在上一课中看到了默认操作,现在就可以定义您自己的操作了。
操作是指当您单击某个功能时发生的事情。它可以为您的地图添加许多额外的功能,例如,允许您检索有关某个对象的其他信息。分配操作可以为您的地图添加一个全新的维度!
The goal for this lesson: 学习如何添加自定义操作。
在本课中,您将使用 school_property 您先前创建的层。样例数据包括您数字化的三个特性中每一个的照片。我们要做的是将每个属性与其图像相关联。然后,我们将创建一个操作,该操作将在单击某个属性时打开该属性的图像。
5.4.1.
Follow Along: Add a Field for Images
这个 school_property
Layer还无法将图像与属性相关联。首先,我们将为此创建一个字段。
打开 Layer Properties 对话框中。
按下 Fields 标签。
切换编辑模式:
添加新列:
输入下列值:
创建该字段后,移动到 Attributes Form 选项卡,然后选择
image
菲尔德。集 Widget Type 至 Attachment :
单击 OK 在 Layer Properties 对话框中。
使用 Identify 工具以单击中的三个功能之一 school_property 一层。
由于您仍处于编辑模式,因此该对话框应处于活动状态,如下所示:
点击浏览按钮( ... 紧挨着 image 字段)。
选择您的图像的路径。图片在里面
exercise_data/school_property_photos/
并且与它们应该关联的特征的名称相同。单击 OK 。
使用此方法将所有图像与正确的特征相关联。
保存您的编辑并退出编辑模式。
5.4.2.
Follow Along: Creating an Action
打开 Actions 选项卡,用于 school_property 层,然后单击
Add a new action 纽扣。
在 Add New Action 对话框中,输入单词
Show Image
进入 Description 字段:下一步要做的操作因您的操作系统而异,因此请选择适当的课程进行操作:
窗口
按下 Type 下拉菜单并选择 Open 。
Ubuntu Linux
在……下面 Action ,写下
eog
对于 Gnome Image Viewer ,或写下display
使用 ImageMagick 。记住在命令后面加一个空格!MacOS
按下 Type 下拉菜单并选择 Mac 。
在……下面 Action ,写下
open
。记住在命令后面加一个空格!
现在,您可以继续编写命令。
您想要打开图像,QGIS就知道图像在哪里。它所需要做的就是告诉 Action 图像在哪里。
选择 image 榜单中:
单击 Insert field 纽扣。QGIS将添加该短语
[% "image" %]
在 Action Text 菲尔德。单击 OK 按钮以关闭 Add New Action 对话框
单击 OK 要关闭 Layer Properties 对话框
现在是测试新行动的时候了:
5.4.3.
Follow Along: Searching the Internet
假设我们正在查看地图,并想更多地了解农场所在的区域。假设您对有问题的区域一无所知,并且想要查找有关该区域的一般信息。考虑到你现在正在使用一台电脑,你的第一个冲动可能是用谷歌搜索这个地区的名称。因此,让我们告诉QGIS自动为我们做这件事!
打开的属性表 landuse 一层。
我们将使用
name
字段为我们的每个土地使用领域搜索谷歌。关闭属性表。
返回到 Actions 在……里面 Layer Properties 。
按下 Create Default Actions 按钮以添加多个预定义的操作。
删除所有操作,但 Open URL 使用短名称执行的操作 Search Web 使用
Remove the selected action 下面的按钮。
双击剩余的操作进行编辑
更改 Description 至
Google Search
,并删除 Short Name 菲尔德。确保 Canvas 在被检查的名单中 Action scopes 。
下一步要做的操作因您的操作系统而异,因此请选择适当的课程进行操作:
窗口
在……下面 Type ,选择 Open 。这将告诉Windows在您的默认浏览器(如Internet Explorer)中打开一个Internet地址。
Ubuntu Linux
在……下面 Action ,写下
xdg-open
。这会告诉Ubuntu在你的默认浏览器中打开一个互联网地址,比如Chrome或Firefox。MacOS
在……下面 Action ,写下
open
。这将告诉MacOS在您的默认浏览器(如Safari)中打开一个互联网地址。
现在,您可以继续编写命令
无论您使用上面的哪个命令,您都需要告诉它下一步打开哪个互联网地址。你想让它访问谷歌,然后自动搜索一个短语。
通常,当你使用谷歌时,你需要在谷歌搜索栏中输入你的搜索短语。但在这种情况下,您希望您的计算机为您完成此操作。告诉谷歌搜索某个东西的方法(如果你不想直接使用它的搜索栏)就是给你的互联网浏览器提供地址
https://www.google.com/search?q=SEARCH_PHRASE
,在哪里SEARCH_PHRASE
`是您要搜索的内容。因为我们还不知道要搜索哪个短语,所以我们将只输入第一部分(没有搜索短语)。在 Action 字段,写入
https://www.google.com/search?q=
。记住在您的初始命令之后添加一个空格,然后再将其写入!现在,您希望QGIS告诉浏览器告诉Google搜索
name
任何你可以点击的功能。选择 name 菲尔德。
单击 Insert 按钮:
这意味着QGIS将打开浏览器并将其发送到地址
https://www.google.com/search?q=[% "name" %]
。[% "name" %]
通知QGIS使用name
字段作为要搜索的短语。因此,例如,如果您单击的土地使用区域名为
Marloth Nature Reserve
,QGIS将把浏览器发送到https://www.google.com/search?q=Marloth%20Nature%20Reserve
,这将导致您的浏览器访问Google,而Google将反过来搜索“Marloth自然保护区”。如果您还没有这样做,请按照上面的说明进行设置。
单击 OK 按钮以关闭 Add New Action 对话框
单击 OK 要关闭 Layer Properties 对话框
现在来测试一下这一新动作。
与 landuse 中处于活动状态的层 Layers 面板中,单击
Run feature action 按钮,并选择唯一的操作 (
Google Search
)为该层定义的。点击你可以在地图上看到的任何土地利用区域。您的浏览器现在将打开,并将开始搜索记录为该地区的地点
name
价值。
备注
如果您的操作不起作用,请检查输入的所有内容是否正确;这种工作中经常会出现打字错误!
5.4.4.
Follow Along: Open a Webpage Directly in QGIS
在上面,您已经看到了如何在外部浏览器中打开网页。这种方法有一些缺点,因为它增加了一个不可知的依赖关系--最终用户是否拥有在其系统上执行操作所需的软件?正如你已经看到的,如果你不知道他们将使用哪种操作系统,他们甚至不一定有相同类型的基本命令来执行相同的操作。在某些操作系统版本中,上述打开浏览器的命令可能根本不起作用。这可能是一个无法克服的问题。
然而,QGIS位于功能强大且功能强大的Qt库之上。此外,QGIS操作可以是任意的、标记化的(即根据字段属性的内容使用变量信息)的Python命令!
现在,您将看到如何使用python操作来显示网页。这与在外部浏览器中打开站点的一般想法相同,但它不需要用户系统上的浏览器,因为它使用Qt QWebView类(这是一个基于Webkit的html窗口小部件)在弹出窗口中显示内容。
这一次让我们使用维基百科。因此,您请求的URL将如下所示:
https://wikipedia.org/wiki/SEARCH_PHRASE
要创建层操作,请执行以下操作:
打开 Layer Properties 对话框中,然后转到 Actions 标签。
使用操作的以下属性设置新操作:
Type:
Python
Description:
Wikipedia
Scope:
Feature
,Canvas
Action Text **
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()
这里有几件事正在发生:
[%name%]
在调用操作时将替换为实际属性值(如前所述)。代码简单地创建了一个新的
QWebView
实例,设置其URL,然后调用show()
以使其作为用户桌面上的窗口可见。
您还可以使用此方法来显示图像,而无需用户在其系统上具有特定的图像查看器。
尝试使用上面描述的方法,通过您刚刚创建的Wikipedia操作加载Wikipedia页面。
5.4.5. In Conclusion
操作允许您为地图提供额外的功能,这对在QGIS中查看相同地图的最终用户很有用。由于您可以在任何操作系统上使用Shell命令,也可以在Python上使用,因此您可以集成的功能是有限的!
5.4.6. What's Next?
既然您已经创建了所有类型的矢量数据,您将学习如何分析数据来解决问题。这是下一个模块的主题。