5.4. Lesson: 行为

既然您已经在上一课中看到了默认操作,现在就可以定义您自己的操作了。

操作是指当您单击某个功能时发生的事情。它可以为您的地图添加许多额外的功能,例如,允许您检索有关某个对象的其他信息。分配操作可以为您的地图添加一个全新的维度!

The goal for this lesson: 学习如何添加自定义操作。

在本课中,您将使用 school_property 您先前创建的层。样例数据包括您数字化的三个特性中每一个的照片。我们要做的是将每个属性与其图像相关联。然后,我们将创建一个操作,该操作将在单击某个属性时打开该属性的图像。

5.4.1. 基本信息 Follow Along: Add a Field for Images

这个 school_property Layer还无法将图像与属性相关联。首先,我们将为此创建一个字段。

  1. 打开 Layer Properties 对话框中。

  2. 按下 Fields 标签。

  3. 切换编辑模式:

    ../../../_images/toggle_editing_mode.png
  4. 添加新列:

    ../../../_images/add_new_column.png
  5. 输入下列值:

    ../../../_images/column_settings.png
  6. 创建该字段后,移动到 Attributes Form 选项卡,然后选择 image 菲尔德。

  7. Widget TypeAttachment

    ../../../_images/select_file_name.png
  8. 单击 OKLayer Properties 对话框中。

  9. 使用 Identify 工具以单击中的三个功能之一 school_property 一层。

    由于您仍处于编辑模式,因此该对话框应处于活动状态,如下所示:

    ../../../_images/school_property_no_image.png
  10. 点击浏览按钮( ... 紧挨着 image 字段)。

  11. 选择您的图像的路径。图片在里面 exercise_data/school_property_photos/ 并且与它们应该关联的特征的名称相同。

  12. 单击 OK

  13. 使用此方法将所有图像与正确的特征相关联。

  14. 保存您的编辑并退出编辑模式。

5.4.2. 基本信息 Follow Along: Creating an Action

  1. 打开 Actions 选项卡,用于 school_property 层,然后单击 符号系统添加 Add a new action 纽扣。

    ../../../_images/layer_actions.png
  2. Add New Action 对话框中,输入单词 Show Image 进入 Description 字段:

    ../../../_images/show_image_action.png

    下一步要做的操作因您的操作系统而异,因此请选择适当的课程进行操作:

    • 窗口

      按下 Type 下拉菜单并选择 Open

    • Ubuntu Linux

      在……下面 Action ,写下 eog 对于 Gnome Image Viewer ,或写下 display 使用 ImageMagick 。记住在命令后面加一个空格!

    • MacOS

      1. 按下 Type 下拉菜单并选择 Mac

      2. 在……下面 Action ,写下 open 。记住在命令后面加一个空格!

    现在,您可以继续编写命令。

    您想要打开图像,QGIS就知道图像在哪里。它所需要做的就是告诉 Action 图像在哪里。

  3. 选择 image 榜单中:

    ../../../_images/select_image.png
  4. 单击 Insert field 纽扣。QGIS将添加该短语 [% "image" %]Action Text 菲尔德。

  5. 单击 OK 按钮以关闭 Add New Action 对话框

  6. 单击 OK 要关闭 Layer Properties 对话框

现在是测试新行动的时候了:

  1. 按下 school_property 中的层 Layers 面板,使其高亮显示。

  2. 找到 操作运行 Run feature action 按钮(在 Attributes Toolbar )。

  3. 单击此按钮右侧的向下箭头。到目前为止,只为该层定义了一个操作,这就是您刚刚创建的操作。

    ../../../_images/run_feature_action_select.png
  4. 单击按钮本身以激活该工具。

  5. 使用此工具,单击三个学校属性中的任何一个。

    应该会打开该属性的图像。

5.4.3. 适度 Follow Along: Searching the Internet

假设我们正在查看地图,并想更多地了解农场所在的区域。假设您对有问题的区域一无所知,并且想要查找有关该区域的一般信息。考虑到你现在正在使用一台电脑,你的第一个冲动可能是用谷歌搜索这个地区的名称。因此,让我们告诉QGIS自动为我们做这件事!

  1. 打开的属性表 landuse 一层。

    我们将使用 name 字段为我们的每个土地使用领域搜索谷歌。

  2. 关闭属性表。

  3. 返回到 Actions 在……里面 Layer Properties

  4. 按下 Create Default Actions 按钮以添加多个预定义的操作。

  5. 删除所有操作,但 Open URL 使用短名称执行的操作 Search Web 使用 符号系统移除 Remove the selected action 下面的按钮。

  6. 双击剩余的操作进行编辑

  7. 更改 DescriptionGoogle Search ,并删除 Short Name 菲尔德。

  8. 确保 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 `是您要搜索的内容。因为我们还不知道要搜索哪个短语,所以我们将只输入第一部分(没有搜索短语)。

  9. Action 字段,写入 https://www.google.com/search?q= 。记住在您的初始命令之后添加一个空格,然后再将其写入!

    现在,您希望QGIS告诉浏览器告诉Google搜索 name 任何你可以点击的功能。

  10. 选择 name 菲尔德。

  11. 单击 Insert 按钮:

    ../../../_images/google_search_action.png

    这意味着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自然保护区”。

  12. 如果您还没有这样做,请按照上面的说明进行设置。

  13. 单击 OK 按钮以关闭 Add New Action 对话框

  14. 单击 OK 要关闭 Layer Properties 对话框

现在来测试一下这一新动作。

  1. landuse 中处于活动状态的层 Layers 面板中,单击 操作运行 Run feature action 按钮,并选择唯一的操作 (Google Search )为该层定义的。

  2. 点击你可以在地图上看到的任何土地利用区域。您的浏览器现在将打开,并将开始搜索记录为该地区的地点 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

要创建层操作,请执行以下操作:

  1. 打开 Layer Properties 对话框中,然后转到 Actions 标签。

  2. 使用操作的以下属性设置新操作:

    • 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()
      
    ../../../_images/python_action_example.png

    这里有几件事正在发生:

    • [%name%] 在调用操作时将替换为实际属性值(如前所述)。

    • 代码简单地创建了一个新的 QWebView 实例,设置其URL,然后调用 show() 以使其作为用户桌面上的窗口可见。

    您还可以使用此方法来显示图像,而无需用户在其系统上具有特定的图像查看器。

  3. 尝试使用上面描述的方法,通过您刚刚创建的Wikipedia操作加载Wikipedia页面。

5.4.5. In Conclusion

操作允许您为地图提供额外的功能,这对在QGIS中查看相同地图的最终用户很有用。由于您可以在任何操作系统上使用Shell命令,也可以在Python上使用,因此您可以集成的功能是有限的!

5.4.6. What's Next?

既然您已经创建了所有类型的矢量数据,您将学习如何分析数据来解决问题。这是下一个模块的主题。