Доступ к интерфейсу через консоль
- SMOuk96
- Интересующийся
- Сообщения: 29
- Зарегистрирован: 30 июн 2017, 17:07
- Репутация: 2
- Откуда: Красноярск
Доступ к интерфейсу через консоль
Необходимо включить команду "Вектор -> Геообработка -> Dissolve" через консоль
и следом еще другую "Вектор -> обработка геометрии -> Разбить составные объекты "
ищу методы через iface, но не знаю какой нужен
Помогите, чем можете, не могу ничего сам найти
Все это надо для плагина, который объединяет пересекающиеся полигоны
QGIS 18.9
язык Python
что еще указать?
и следом еще другую "Вектор -> обработка геометрии -> Разбить составные объекты "
ищу методы через iface, но не знаю какой нужен
Помогите, чем можете, не могу ничего сам найти
Все это надо для плагина, который объединяет пересекающиеся полигоны
QGIS 18.9
язык Python
что еще указать?
Последний раз редактировалось SMOuk96 11 июл 2017, 09:02, всего редактировалось 1 раз.
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Доступ к интерфейсу через консоль
для начала стоит указать софт...
- SMOuk96
- Интересующийся
- Сообщения: 29
- Зарегистрирован: 30 июн 2017, 17:07
- Репутация: 2
- Откуда: Красноярск
Re: Доступ к интерфейсу через консоль
qgis 18.9 вы это имели ввиду?
- Эдуард Казаков
- Гуру
- Сообщения: 546
- Зарегистрирован: 23 апр 2014, 17:11
- Репутация: 532
- Откуда: Planet Earth
- Контактная информация:
Re: Доступ к интерфейсу через консоль
Добрый день!
import processing
processing.runalg('qgis:dissolve',<input vector>,<DISSOLVE_ALL (True/False)>,<field name>,<output vector>)
processing.runalg('qgis:multiparttosingleparts',<input vector>,<output vector>)
import processing
processing.runalg('qgis:dissolve',<input vector>,<DISSOLVE_ALL (True/False)>,<field name>,<output vector>)
processing.runalg('qgis:multiparttosingleparts',<input vector>,<output vector>)
- SMOuk96
- Интересующийся
- Сообщения: 29
- Зарегистрирован: 30 июн 2017, 17:07
- Репутация: 2
- Откуда: Красноярск
Re: Доступ к интерфейсу через консоль
Вот такая ошибка: "'QgsVectorLayer' object has no attribute '__getitem__' See log for more details"Эдуард Казаков писал(а):Добрый день!
import processing
processing.runalg('qgis:dissolve',<input vector>,<DISSOLVE_ALL (True/False)>,<field name>,<output vector>)
processing.runalg('qgis:multiparttosingleparts',<input vector>,<output vector>)
- Эдуард Казаков
- Гуру
- Сообщения: 546
- Зарегистрирован: 23 апр 2014, 17:11
- Репутация: 532
- Откуда: Planet Earth
- Контактная информация:
Re: Доступ к интерфейсу через консоль
Покажите, что запускаете
-
- Новоприбывший
- Сообщения: 3
- Зарегистрирован: 11 июл 2017, 22:26
- Репутация: 1
Re: Доступ к интерфейсу через консоль
Добрый вечер!Эдуард Казаков писал(а):Покажите, что запускаете
Столкнулся с аналогичной проблемой что и уважаемый автор, сперва запускал через OSGeo4W Shell с таким алгоритмом
set PYTHONPATH=C:\OSGeo4W\apps\qgis\python
set PATH=C:\OSGeo4W\apps\qgis\bin;%PATH%
python
Код: Выделить всё
import sys
from qgis.core import *
from PyQt4.QtGui import *
app = QApplication([])
QgsApplication.initQgis()
sys.path.append('C:/OSGeo4W/apps/qgis/python/plugins')
sys.path.append('C:/OSGeo4W/apps/qgis/python')
from processing.core.Processing import Processing
Processing.initialize()
from processing.tools import *
ilay = QgsVectorLayer("C:\\SAT\\Release\\plan\\temp\\other_zorder.shp", "oth", "ogr")
maxlayer = QgsVectorLayer("C:\\SAT\\Release\\plan\\temp\\mx_zorder.shp", "max" "ogr")
resultlayer = QgsVectorLayer("C:\\SAT\\Release\\plan\\temp\\result.shp", "out" "ogr")
general.runalg("qgis:difference",ilay,maxlayer,0,resultlayer)
Unable to execute algorithm
Wrong parameter value: C:\SAT\Release\plan\temp\other_zorder.shp
Загружаю QGIS открываю консоль...
Код: Выделить всё
from qgis.core import *
from processing.core.Processing import Processing
Processing.initialize()
from processing.tools import *
ilay = QgsVectorLayer("C:\\SAT\\Release\\plan\\temp\\other_zorder.shp", "oth", "ogr")
maxlayer = QgsVectorLayer("C:\\SAT\\Release\\plan\\temp\\mx_zorder.shp", "max" "ogr")
resultlayer = QgsVectorLayer("C:\\SAT\\Release\\plan\\temp\\result.shp", "out" "ogr")
general.runalg("qgis:Difference",ilay,maxlayer,0,resultlayer)
Error: Algorithm not found
general.runalg("qgis:difference",ilay,maxlayer,0,resultlayer)
{'OUTPUT': <qgis._core.QgsVectorLayer object at 0x0000000014266620>}
'QgsVectorLayer' object has no attribute '__getitem__' See log for more details
- Эдуард Казаков
- Гуру
- Сообщения: 546
- Зарегистрирован: 23 апр 2014, 17:11
- Репутация: 532
- Откуда: Planet Earth
- Контактная информация:
Re: Доступ к интерфейсу через консоль
Здравствуйте, yasen, проблема решается очень просто.
Вы не должны создавать экземпляр класса QgsVectorLayer для записи результата. Нужно просто указать путь. В строке вызова алгоритма:
general.runalg("qgis:difference",ilay,maxlayer,0,"C:\\SAT\\Release\\plan\\temp\\result.shp")
SMOuk96, вероятно, у вас похожая проблема.
Вы не должны создавать экземпляр класса QgsVectorLayer для записи результата. Нужно просто указать путь. В строке вызова алгоритма:
general.runalg("qgis:difference",ilay,maxlayer,0,"C:\\SAT\\Release\\plan\\temp\\result.shp")
SMOuk96, вероятно, у вас похожая проблема.
- SMOuk96
- Интересующийся
- Сообщения: 29
- Зарегистрирован: 30 июн 2017, 17:07
- Репутация: 2
- Откуда: Красноярск
Re: Доступ к интерфейсу через консоль
Команды работают)Эдуард Казаков писал(а):SMOuk96, вероятно, у вас похожая проблема.
processing.runalg('qgis:dissolve',lyr,True,id,"C:/Users/MATTHEW/.qgis2/Project_polig/test.shp")
processing.runalg('qgis:multiparttosingleparts','C:/Users/MATTHEW/.qgis2/Project_polig/test.shp','C:/Users/MATTHEW/.qgis2/Project_polig/result.shp')
И результат кстати не отображается в shape файле, думал в чем беда, оказалось в shx он почему-то
Думаю, что надо как-то перерисовать эти слои, но как не знаю(
Последний раз редактировалось SMOuk96 12 июл 2017, 07:23, всего редактировалось 1 раз.
- SMOuk96
- Интересующийся
- Сообщения: 29
- Зарегистрирован: 30 июн 2017, 17:07
- Репутация: 2
- Откуда: Красноярск
Re: Доступ к интерфейсу через консоль
Попробовал
result.triggerRepaint()
Но нет, в shp файле так ничего и не появилось
result.triggerRepaint()
Но нет, в shp файле так ничего и не появилось
- SMOuk96
- Интересующийся
- Сообщения: 29
- Зарегистрирован: 30 июн 2017, 17:07
- Репутация: 2
- Откуда: Красноярск
Re: Доступ к интерфейсу через консоль
Пока ждал ответа, сам сделал) Теперь у меня последняя задача) Я создал векторный слой с результатом и вопрос как показать его пользователю?
- Эдуард Казаков
- Гуру
- Сообщения: 546
- Зарегистрирован: 23 апр 2014, 17:11
- Репутация: 532
- Откуда: Planet Earth
- Контактная информация:
Re: Доступ к интерфейсу через консоль
QgsMapLayerRegistry.instance().addMapLayer(<layer>)
-
- Новоприбывший
- Сообщения: 3
- Зарегистрирован: 11 июл 2017, 22:26
- Репутация: 1
Re: Доступ к интерфейсу через консоль
Эдуард Казаков, здравствуйте и спасибо!
Ваш ответ помог мне запустить эту команду в консоли Python QGIS'a, но как мне быть с тем что OSGeo4W Shell упорно не хочет воспринимать то что я ему "скрамливаю", помогите пожалуйста! Вот кот, ой код )
Вывод сообщения выделил жирным. Ну хотя бы код ошибки указали, я бы на яндексил, а то просто:
Unable to execute algorithm
Wrong parameter value: C:\SAT\Release\plan\temp\other_zorder.shp
Путь к файлу валидный, но видно что он отказывается из-за пути и(или) файла, хотя с ними(путь\файл) всё ОК!, Unable to execute algorithm, раньше я думал что он не понимает что от него хотят, НО если убрать все переменные....
Положил прямо корень диска C:/ и ... Ничего не произошло...
Что ему нужно???
Ваш ответ помог мне запустить эту команду в консоли Python QGIS'a, но как мне быть с тем что OSGeo4W Shell упорно не хочет воспринимать то что я ему "скрамливаю", помогите пожалуйста! Вот кот, ой код )
Код: Выделить всё
C:\>set PYTHONPATH=C:\OSGeo4W\apps\qgis\python
C:\>set PATH=C:\OSGeo4W\apps\qgis\bin;%PATH%
C:\>python
Python 2.7.5 (default, May 15 2013, 22:44:16) [MSC v.1500 64 bit (AMD64)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> from qgis.core import *
>>> from PyQt4.QtGui import *
>>> app = QApplication([])
>>> QgsApplication.initQgis()
>>> sys.path.append('C:/OSGeo4W/apps/qgis/python/plugins')
>>> sys.path.append('C:/OSGeo4W/apps/qgis/python')
>>> from processing.core.Processing import Processing
>>> Processing.initialize()
>>> from processing.tools import *
>>>
>>>
>>> ilay = QgsVectorLayer("C:\\SAT\\Release\\plan\\temp\\other_zorder.shp", "oth", "ogr")
>>> maxlayer = QgsVectorLayer("C:\\SAT\\Release\\plan\\temp\\mx_zorder.shp", "max" "ogr")
>>> general.runalg("qgis:difference",ilay,maxlayer,0,"C:\\SAT\\Release\\plan\\temp\\result.shp")
Unable to execute algorithm
Wrong parameter value: C:\SAT\Release\plan\temp\other_zorder.shp
>>> general.runalg("qgis:difference","C:\\SAT\\Release\\plan\\temp\\other_zorder.shp","C:\\SAT\\Release\\plan\\temp\\mx_zorder.shp",0,"C:\\SAT\\Release\\plan\\temp\\result.shp")
Unable to execute algorithm
Wrong parameter value: C:\SAT\Release\plan\temp\other_zorder.shp
>>>
>>> general.runalg("qgis:difference","C:\\SAT\\Release\\plan\\temp\\mx_zorder.shp","C:\\SAT\\Release\\plan\\temp\\other_zorder.shp",0,"C:\\SAT\\Release\\plan\\temp\\result.shp")
Unable to execute algorithm
Wrong parameter value: C:\SAT\Release\plan\temp\mx_zorder.shp
>>>
Unable to execute algorithm
Wrong parameter value: C:\SAT\Release\plan\temp\other_zorder.shp
Путь к файлу валидный, но видно что он отказывается из-за пути и(или) файла, хотя с ними(путь\файл) всё ОК!, Unable to execute algorithm, раньше я думал что он не понимает что от него хотят, НО если убрать все переменные....
Код: Выделить всё
>>> general.runalg("qgis:difference")
Error: Wrong number of parameters
ALGORITHM: Difference
INPUT <ParameterVector>
OVERLAY <ParameterVector>
IGNORE_INVALID <ParameterBoolean>
OUTPUT <OutputVector>
Код: Выделить всё
>>> general.runalg("qgis:difference","C:/other_zorder.shp","C:/mx_zorder.shp",0,
"C:/result.shp")
Unable to execute algorithm
Wrong parameter value: C:/other_zorder.shp
Что ему нужно???
- Эдуард Казаков
- Гуру
- Сообщения: 546
- Зарегистрирован: 23 апр 2014, 17:11
- Репутация: 532
- Откуда: Planet Earth
- Контактная информация:
Re: Доступ к интерфейсу через консоль
Хм. Нужно либо поиграться со слэшами в путях, либо попробовать, к примеру, перед каждой кавычкой в путях до файлов поставить экранирующий слэш \.
-
- Новоприбывший
- Сообщения: 3
- Зарегистрирован: 11 июл 2017, 22:26
- Репутация: 1
Re: Доступ к интерфейсу через консоль
Спасибо за совет. Не помогло. Сейчас переустановлю все компоненты. Попробую заново. Главное что алгоритм выполнения правильный.
Спасибо еще раз!
upd: переустановка не помогла.
upd2:Ура, наконец решил головоломку, правда работает не так быстро как хотелось бы.... Но уже работает!!!
Решение в виде скрипта:
[ Сообщение с мобильного устройства ]
Спасибо еще раз!
upd: переустановка не помогла.
upd2:Ура, наконец решил головоломку, правда работает не так быстро как хотелось бы.... Но уже работает!!!
Решение в виде скрипта:
Код: Выделить всё
import os, sys, glob
# Prepare the environment
from qgis.core import * # qgis.core must be imported before PyQt4.QtGui!!!
from PyQt4.QtGui import *
app = QApplication([])
QgsApplication.setPrefixPath(r"C:\OSGeo4W64\apps\qgis", True) # The True value is important
QgsApplication.initQgis()
from os.path import expanduser
# Folder path of the Results for shapefiles
ilay = QgsVectorLayer(r"C:\other_zorder.shp", "1", "ogr")
maxlayer = QgsVectorLayer(r"C:\mx_zorder.shp", "2", "ogr")
#resultlayer = QgsVectorLayer(r"C:\result.shp", "3", "ogr")
# Prepare processing framework
sys.path.append(r'C:\OSGeo4W64\apps\qgis\python\plugins')
from processing.core.Processing import Processing
Processing.initialize()
from processing.tools import *
def run():
outputs_1=general.runalg("qgis:difference",ilay,maxlayer,0,r"C:\result.shp")
# Set directory, search for all polygon .shp files and run the Create Grid and Clip algorithms then output results into Results folder
run()
Кто сейчас на конференции
Сейчас этот форум просматривают: Semrush [Bot] и 14 гостей