Важно
Перевод - это работа сообщества : ссылка:Вы можете присоединиться. Эта страница в настоящее время переводится |прогресс перевода|.
5.4. Урок: Действия
Теперь, когда вы видели действие по умолчанию в предыдущем занятии, пришло время определить собственные действия.
Действие - это то, что происходит когда вы нажимаете на функцию. Оно может добавить много дополнительных функциональных возможностей на карту, позволяя получить дополнительную информацию об объекте, для примера. Назначение действий может добавить на карту совершенно новое измерение!
Цель этого занятия: Научиться добавлять пользовательские действия.
In this lesson you will use the school_property layer you
created previously.
The sample data include photos of each of the three properties you
digitized.
What we are going to do is to associate each property with its image.
Then we will create an action that will open the image for a property
when clicking on the property.
5.4.1. ★☆☆ Follow Along: Добавление поля для изображений
В слое school_property пока не удается связать изображение со свойством. Сначала создадим поле для этой цели.
Откройте диалоговое окно Layer Properties.
Кликните Fields.
Режим редактирования:
Добавьте новую колонку:
Ниже введите значения:
После того как вы создали поле перейдите к Attributes Form и выберите поле image`.
Задать тип виджета Widget Type для вложения Attachment:
Кликните OK в диалоговом окне Layer Properties.
Use the
Identify Features tool to click on one of the three
features in the school_propertylayer.Поскольку вы все еще находитесь в режиме редактирования, диалоговое окно должно быть активным и выглядеть следующим образом:
Кликните на кнопку просмотра ( … рядом с полем image).
Выберите путь к вашему изображению. Изображения в
exercise_data/school_property_photos/и имеют то же имя, что и функции, с которыми они должны быть связаны.Кликните на кнопку OK.
Свяжите все изображения с правильными функциями с помощью этого метода.
Сохраните изменения и выйдите из режима редактирования.
5.4.2. ★☆☆ Follow Along: Создание действия
Open the Actions tab for the
school_propertylayer, and click on the
Add a new action button.
В диалоговом окне Add New Action введите слова
Show Imageв поле Description:
Что делать дальше, зависит от операционной системы, поэтому выберите подходящий курс:
Windows
Кликните Type и выберите Open.
Ubuntu Linux
В поле Action, напишите
eogдля Средства просмотра изображений Gnome 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.
Теперь пришло время протестировать новое действие:
Click on the
school_propertylayer in the Layers panel so that it is highlighted.Кликните стрелку вниз справа от этой кнопки. Для этого слоя на данный момент определено только одно действие, которое только что создано.
Кликните кнопку, чтобы активировать инструмент.
С помощью этого инструмент кликните любое из трех свойств школы.
Должно открыться изображение для этого свойства.
5.4.3. ★★☆ Follow Along: Поиск в Интернете
Допустим, мы смотрим на карту и хотим узнать больше о районе, в котором находится ферма. Предположим, вы ничего не знаете о данной местности и хотите найти общую информацию о ней. Ваш первый импульс, учитывая, что вы используете компьютер прямо сейчас, вероятно, будет найти в Google название местности. Давайте попросим QGIS сделать это автоматически для нас!
Open the attribute table for the
landuselayer.Мы будем использовать поле
nameдля каждого района землепользования чтобы найти в Google.Закройте таблицу атрибутов.
Вернитесь к Actions в Layer Properties.
Кликните на кнопку Create Default Actions, чтобы добавить ряд предварительно определенных действий.
Удалите все действия кроме Open URL с коротким именем Search Web с помощью кнопки
Remove the selected action, которая расположена ниже.Кликните два раза на оставшееся действие, чтобы редактировать его.
Поменяйте Description на
Google Search, и удалите содержимое поля Short Name.Убедитесь, что Полотно Canvas находится среди Action scopes с флажками.
Что делать дальше, зависит от операционной системы, поэтому выберите подходящий курс:
Windows
В Type выберите Open. Это позволит Windows открыть адрес Интернета в браузере по умолчанию, например Internet Explorer.
Ubuntu Linux
В Action напишите
xdg-open. Это позволит Ubuntu открыть интернет-адрес в браузере по умолчанию, например Chrome или Firefoxhis.macOS
В разделе Action напишите
open. Это позволит macOS открыть интернет-адрес в браузере по умолчанию, например Safari.
Теперь можно продолжить запись команды.
Независимо от того, какую команду вы использовали выше, вы должны сообщить ей, какой адрес Интернета открыть следующим. Вы хотите, чтобы она посетила Google и искала фразу автоматически.
Обычно при использовании Google вы вводите свою поисковую фразу в строку поиска Google. Но в этом случае вы хотите, чтобы ваш компьютер сделал это для вас. То, как вы зададите Google поиск чего-то (если вы не хотите использовать его строку поиска напрямую) является путем предоставления адреса вашему интернет-браузеру
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, который в свою очередь будет искать «Marloth Nature Reserve».Если вы еще не сделали этого, настройте все, как описано выше.
Кликните на кнопку OK, чтобы закрыть диалоговое окно Add New Action.
Кликните на кнопку OK чтобы закрыть диалоговое окно Layer Properties.
Теперь, чтобы проверить новое действие.
With the
landuselayer active in the Layers panel, click on the down arrow to the right of the
Run feature action button, and select the
only action (Google Search) defined for this layer.Кликните на любом участке землепользования, который можно увидеть на карте. Ваш браузер откроется и начнет поиск в Google места, записанного как значение
nameна этой местности.
Примечание
Если действие не работает, убедитесь, что все введено правильно; опечатки часто встречаются при таких работах!
5.4.4. ★★★ Follow Along: Открытие веб-страницы непосредственно в QGIS
Выше, вы видели, как открыть веб-страницу во внешнем браузере. Есть некоторые недостатки в таком подходе, так как он добавляет неизвестную зависимость - будет ли у конечного пользователя программное обеспечение, необходимое для выполнения действия в своей системе? Как вы видели, они не обязательно даже имеют один и тот же вид базовой команды для одного и того же вида действий, если вы не знаете, какую OS они будут использовать. В некоторых версиях OS вышеуказанные команды для открытия браузера могут вообще не работать. Это может быть непреодолимой проблемой.
Однако QGIS находится в топе невероятно мощной и универсальной библиотеки Qt. Кроме того, действия QGIS могут быть произвольными, маркированными (т.е. с использованием информации переменной на основе содержимого атрибута поля) командами Python!
Теперь вы увидите, как использовать действие python для отображения веб-страницы. Здесь лежит та же самая общая идея, что и открытие сайта во внешнем браузере, но она не требует браузера в системе пользователя, поскольку он использует класс Qt QWebView (который является HTML-виджетом на основе webkit) для отображения содержимого во всплывающем окне.
Давайте используем Википедию на этот раз. Таким образом, запрашиваемый URL будет выглядеть следующим образом:
https://wikipedia.org/wiki/SEARCH_PHRASE
Чтобы создать действие слоя:
Откройте диалоговое окно Layer Properties и перейдите к вкладке Actions.
Настройте новое действие, используя для него следующие свойства действия:
Type:
PythonDescription:
WikipediaScope:
Feature,CanvasТекст действия:
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()· на нем, чтобы сделать его видимым в виде окна на рабочем столе пользователя.
Этот подход можно также использовать для того чтобы показать изображение без необходимости наличия у пользователей определенного средства просмотра изображений в их системе.
Попробуйте использовать описанные выше методы для загрузки страницы Википедии с помощью только что созданного действия Википедии.
5.4.5. В заключение
Действия позволяют придать вашей карте дополнительную функциональность, полезную для конечного пользователя, который просматривает ту же карту в QGIS. Благодаря тому, что вызываемые процессы могут быть командами оболочки для любой операционной системы, а также Python, количество функций, которые вы можете включить, безгранично!
5.4.6. Что дальше?
Теперь, когда вы освоили все виды создания векторных данных, вы научитесь анализировать данные для решения проблем. А это тема следующего модуля.