Forum QGIS
Wyciąganie części tekstu z kolumny atrybutów w kalkulatorze pól - Wersja do druku

+- Forum QGIS (http://forum.quantum-gis.pl)
+-- Dział: Desktop GIS (http://forum.quantum-gis.pl/forum-4.html)
+--- Dział: QGIS (http://forum.quantum-gis.pl/forum-5.html)
+--- Wątek: Wyciąganie części tekstu z kolumny atrybutów w kalkulatorze pól (/thread-1504.html)



Wyciąganie części tekstu z kolumny atrybutów w kalkulatorze pól - tomalos - 23-04-2017

Jest sobie warstwa wektorowa z budynkami baśniowej krainy, każdy budynek to oddzielny punkt ale niektóre z nich są pojedynczymi a inne należą do osad. Powiedzmy, że tabela wygląda tak:

Kod:
ID      TYP          LICZBA BUD.  RODZAJ                                                                                WYSOKOSC BUD.
1329_0  pojedynczy   1            karczma                                                                               6
1330_1  osada1       4            1330_1:budynek mieszkalny; 1330_2:kuźnia; 1330_3:budynek mieszkalny; 1330_4:stajnia   1330_1:3; 1330_2:4; 1330_3:3; 1330_4:4
1330_2  osada1       4            1330_1:budynek mieszkalny; 1330_2:kuźnia; 1330_3:budynek mieszkalny; 1330_4:stajnia   1330_1:3; 1330_2:4; 1330_3:3; 1330_4:4
1330_3  osada1       4            1330_1:budynek mieszkalny; 1330_2:kuźnia; 1330_3:budynek mieszkalny; 1330_4:stajnia   1330_1:3; 1330_2:4; 1330_3:3; 1330_4:4
1330_4  osada1       4            1330_1:budynek mieszkalny; 1330_2:kuźnia; 1330_3:budynek mieszkalny; 1330_4:stajnia   1330_1:3; 1330_2:4; 1330_3:3; 1330_4:4
1332_0  pojedynczy   1            młyn-wodny                                                                            7
1343_1  osada2       2            1343_1:inna pracownia; 1343_2:budynek mieszkalny                                      1343_1:5; 1343_2:4
1343_2  osada2       2            1343_1:inna pracownia; 1343_2:budynek mieszkalny                                      1343_1:5; 1343_2:4
1355_0  pojedynczy   1            młyn-wiatrak                                                                          17
1356_0  pojedynczy   1            szałas wiedźmy                                                                        2

A potrzebuję takiej:

Kod:
ID        TYP         LICZBA BUD.  RODZAJ                WYSOKOSC BUD.
1329_0    pojedynczy  1            karczma               6
1330_1    osada       4            budynek mieszkalny    3
1330_2    osada       4            kuźnia                4
1330_3    osada       4            budynek mieszkalny    3
1330_4    osada       4            stajnia               4
1332_0    pojedynczy  1            młyn-wodny            7
1343_1    osada       2            inna pracownia        5
1343_2    osada       2            budynek mieszkalny    4
1355_0    pojedynczy  1            młyn-wiatrak          17
1356_0    pojedynczy  1            szałas wiedźmy        2

Domyślam się, że da się to zrobić dla kolumn RODZAJ i WYSOKOSC BUD. za pomocą funkcji regexp_substr i kolumny ID. Problem polega na tym, że na wyrażeniach regularnych się nie znam niestety. Ktoś podpowie?


RE: Wyciąganie części tekstu z kolumny atrybutów w kalkulatorze pól - tlomiej - 09-09-2017

Pomocna może być własna funkcja. (Wyrażeniami też pewnie można by to sprytnie zrobić)

Kod:
from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def fairytale_buildings(k, p, feature, parent):
    try:
        d = {z:y for z,y in [x.split(':') for x in p.split('; ')]}
        if k in d: return d[k]
        else: return p
    except: return p

Przykładowe użycie:
fairytale_buildings( "ID_1" , "WYSOKOSC B" )


RE: Wyciąganie części tekstu z kolumny atrybutów w kalkulatorze pól - tomalos - 20-09-2017

Ta metoda działa przepięknie! A robiłem to w Calcu formułą na kilka linijek Wink