Hallo Sirius und BlackJack, hier ein bisschen etwas zu den Hintergründen:
In der freien GIS Software QGIS gibt es seit einiger Zeit sogenannte virtuelle Layer. Dieser basieren auf SpatiaLite/SQLite und erlauben es, Abfragen bzw. geographische Analysen dynamisch zu erstellen. Mit nachfolgendem SQL Statement wir etwa für jedes Polygon des Layers "gebaeude" ein Punkt generiert. Werden Gebäude entfernt, ergänzt oder editiert, ändern sich auch die Punkte.
Code: Alles auswählen
SELECT
rowid AS 'gid' /*:int*/,
ST_PointOnSurface(geometry) AS geom /*:point:31256:*/
FROM 'gebaeude';
Viele GIS Anwender (v.a. Anfänger) wollen aber oft nur einfache Analysen erstellen und sind mit SQL überfordert. Um diesen Nutzern QGIS näher zu bringen, möchte ich mithilfe der 'Processing Toolbox' Skripte erstellen, welche virtuelle Layer über eine graphische Oberfläche erzeugen. Mein erstes Testskript (ST_PointOnSurface) ist praktisch fertigt, lediglich fehlt die Möglichkeit Attribute aus dem Eingabelayer (z.B. "gebaeude") in die Ausgabepunkte zu übernehmen (siehe "Attributes to keep").
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# ----- define interface -----
##Virtual Layers (QGIS 2.x)=group
##Point on surface (ST_PointOnSurface)=name
##Input_layer=vector
##Output_layer=string vl_
##Unique_identifier_column=string gid
##Geometry_column=string geom
##Coordinate_reference_system=crs
##Attributes_to_keep_(comma_separated_list)=string
from qgis.core import QgsVectorLayer, QgsMapLayerRegistry
inptlyr = processing.getObject(Input_layer)
otptlyr = Output_layer
uic = Unique_identifier_column
gmc = Geometry_column
crs = Coordinate_reference_system
crs = crs[5:]
att = Attributes_to_keep_(comma_separated_list)
query = """SELECT
rowid AS '""" + uic + """' /*:int*/,
ST_PointOnSurface(geometry) AS '""" + gmc + """' /*:point:""" + crs + """*/
FROM '""" + inptlyr.name() + """';
"""
vlayer = QgsVectorLayer( "?query={}".format(query), otptlyr, "virtual" )
QgsMapLayerRegistry.instance().addMapLayer(vlayer)
SQL-Injection sind in diesem Fall kein Thema. Es steht ja jedem Anwender frei die SQL Eingabe ('Create a virtual layer') zu öffnen und darin herumzufuhrwerken.
Hier noch ein Link zu Python Skripten in der "Processing Toolbox":
http://docs.qgis.org/2.14/de/docs/user_ ... ripts.html