Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Zdalne wywołanie skryptu łaczenia warstw
12-01-2017, 15:10,
#1
Zdalne wywołanie skryptu łaczenia warstw
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?


Podobne wątki
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Zlecę napisanie skryptu dla QGIS do automatycznej edycji wielu plików SHP Matteusz 3 16 140 30-06-2017, 22:24
Ostatni post: bociusek
  Łączenia jeden do wielu tomalos 6 30 027 13-02-2012, 20:16
Ostatni post: tomalos

Skocz do: