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 Type 至 Attachment :

    ../../../_images/select_file_name.png
  8. 单击 OK 在 Layer 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. 更改 Description 至 Google 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?

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