Witam,
korzystam z wersji QGis 2.14 Essen.
Chciałbym dodać w swojej aplikacji możliwość połączenia za sobą dwóch warstw wykorzystując opcje "wektor > narzędzia zarządzania danymi > złącz atrybuty według lokalizacji". Miałoby działać to w ten sposób w bazie PostGIS mam warstwę punktów oraz polygonów. Stworzyłem skrypt w QGis który łączy te warstwy a następnie nowo stworzoną warstwę zapisuje do bazy:
Kod:
from qgis.core import *
from qgis.gui import *
from qgis.utils import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import processing
from processing.core.Processing import Processing
uri = QgsDataSourceURI()
uri.setConnection("localhost", "5432", "dbName", "user", "pass")
uri.setDataSource("public", "shapes", "geom")
layer1 = QgsVectorLayer(uri.uri(), "tbName", "postgres")
uri.setDataSource("public", "point", "geom")
layer2 = QgsVectorLayer(uri.uri(), "tbName", "postgres")
processing.runalg("qgis:joinattributesbylocation",{
"TARGET": layer2,
"JOIN": layer1,
"PREDICATE":u'intersects',
"SUMMARY":0,
"KEEP":0,
"OUTPUT":"path"})
vl = QgsVectorLayer("path", "name", "ogr")
saveUri = "dbname='dbname' host=localhost port=5432 user='user' password='pass' key=gid type=POINT table=\"public\".\"test\" (geom) sql="
crs_id = 4326
crs = QgsCoordinateReferenceSystem(crs_id, QgsCoordinateReferenceSystem.EpsgCrsId)
error = QgsVectorLayerImport.importLayer(vl, saveUri, "postgres", crs, False, False)
Skrypt działa poprawnie kiedy jest wywoływany z poziomu QGis, niestety potrzebuję aby skrypt został wywołany przez moją aplikację z zewnątrz. Dodałem do powyższego skryptu następujący kod:
Kod:
importy są tutaj
qgs = QgsApplication([], True)
qgs.setPrefixPath("path", True)
qgs.initQgis()
<<reszta skryptu>>
QgsApplication.exitQgis()
Jeżeli kompiluje ten kod z poziomu osobnego skryptu python, kod nie działa. Poprawnie widziane są wszystkie elementy QGIS API, jednak w porcessing dostępne są jedynie algorytmy z przedrostkami grass: oraz modeler:. Dodatkowo nie mogę nawiązać połączenia z moją bazą PostGIS. Czy wiecie może co mogłoby być tego przyczyną? Czy ew istnieje możliwość uruchomienia skryptu który znajduję się w QGis zdalnie bez pisania skryptu na nowo?