Beregning af længde af linjer, og gruppering ud fra en attribut

Funktioner og processering relateret til vectordata
Post Reply
Jeanne MHJ
Posts: 24
Joined: Tue 23. May 2017 09:02
Location: Allerød Kommune

Beregning af længde af linjer, og gruppering ud fra en attribut

Post by Jeanne MHJ »

Hej

Jeg skal forsøge at beregne længden på nogle ruter. Det skal være den samlede længde for de forskellige ruter. Jeg ved hvordan jeg gør det med en simpel SQL i MapInfo, hvor jeg kan summere på objekternes længde og gruppere på en attribut (rutenavnet), men jeg kan ikke finde ud af at gøre det i QGIS.

Spatial Query kræver at man har et lag med polygoner som udgør afgræsningen for ruterne, og Feltberegneren beregner for hver enkelt linjestykke, det giver en del ekstra arbejde bagefter hvis jeg skal sidde og lægge tallene sammen for 360 objekter.

Der må være et eller andet smart værktøj jeg overser.

mvh Jeanne

miewinstrup
Posts: 39
Joined: Wed 2. Mar 2016 09:34
Location: København

Re: Beregning af længde af linjer, og gruppering ud fra en attribut

Post by miewinstrup »

Hej Jeanne,
Her er et eksempel hvor summen af ruterne summeres i feltet 'sum' for hver elev (f_id):
Sum_af_værdier_MieSeptima.png
Håber det kan bruges.
Mvh. Mie
You do not have the required permissions to view the files attached to this post.
Mie Winstrup
Septima

Jeanne MHJ
Posts: 24
Joined: Tue 23. May 2017 09:02
Location: Allerød Kommune

Re: Beregning af længde af linjer, og gruppering ud fra en attribut

Post by Jeanne MHJ »

Hej Mie

Ja, det er mulighed, bare ikke den meget simple med et tryk og videre. Jeg har ikke længden på hvert enkelt linjestykke som attribut, så jeg skal først regne længde ud, og derefter summere det. Men hvis det er den eneste måde at gøre det på, så er det jo sådan det er.

mvh Jeanne :)

User avatar
Danny Morck
Site Admin
Posts: 97
Joined: Mon 29. Feb 2016 22:35
Location: Herlev
Contact:

Re: Beregning af længde af linjer, og gruppering ud fra en attribut

Post by Danny Morck »

Jeanne MHJ wrote:Hej Mie

Ja, det er mulighed, bare ikke den meget simple med et tryk og videre. Jeg har ikke længden på hvert enkelt linjestykke som attribut, så jeg skal først regne længde ud, og derefter summere det. Men hvis det er den eneste måde at gøre det på, så er det jo sådan det er.

mvh Jeanne :)
Men hvert liniestykke regner du vel bare ud igen vha "§length" funktionen?...og smider det ind i tabellen og så har du det.
Bestyrelsesmedlem
QGIS Brugergruppe Danmark
GIS, IoT & Data, Ballerup Kommune

Jeanne MHJ
Posts: 24
Joined: Tue 23. May 2017 09:02
Location: Allerød Kommune

Re: Beregning af længde af linjer, og gruppering ud fra en attribut

Post by Jeanne MHJ »

Ja, lige præcis.

Det er bare to step, i stedet for MapInfos et step. Der mangler en god SQL query til QGIS

mvh Jeanne :)

daniel.arnason
Posts: 28
Joined: Tue 8. Mar 2016 10:35
Location: Egedal kommune

Re: Beregning af længde af linjer, og gruppering ud fra en attribut

Post by daniel.arnason »

Hvis dine data ligger i en database, så er der en sql-forespørgsel-opbygger, som ligner fuldstændig den fra MapInfo.......Det kræver selvfølgelig, at de data du arbejder på ligger i en database.

Man kan også bruge Python consollen i QGIS til den slags. Det er muligvis lidt avanceret, men det er rigtig sjovt at lege med :)

Ellers kan du bruge plugin'et Group Stats. Det er rigtig godt til den slags analyser.
Daníel Örn
Egedal kommune

daniel.arnason
Posts: 28
Joined: Tue 8. Mar 2016 10:35
Location: Egedal kommune

Re: Beregning af længde af linjer, og gruppering ud fra en attribut

Post by daniel.arnason »

Jeg kunne ikke lade være med at tjekke, om jeg ikke kunne finde ud af det i python consollen :)

Man kan køre det her i python consollen. Man skal bare huske at ændre kolonnenavnet og kolonnens index. Det virkede i hvert fald her hos mig :)

Code: Select all

# Line_lyr er det lag, som er valgt i lagvinduet
line_lyr = iface.activeLayer()

# Erstat 'vejstistatus' med navnet paa den kolonne, som skal grupperes
idx = line_lyr.fieldNameIndex('vejstistatus')
unique_values = line_lyr.uniqueValues(idx)

#laver en dictionary med unikke vaerdier fra den valgte kolonne og saetter vaerdien til 0
length_dict = {k: 0 for k in unique_values }

#finder alle objekter i det aktive lag
features = line_lyr.getFeatures()

# koerer igennem alle objekter og finder geometriens laengde og laegger den til det rigtige sted i length_dict
for f in features:
    type = f.attributes()[1] # Her skal man vaelge det rigtige index for kolonnen. Det starter med 0, saa kolonne nr to har index 1
    for k, v in length_dict.items():
        if k == type:
            length_dict[k] = v + f.geometry().length()

# Printer resultaterne ud i python consollen i qgis, saa man kan se reulstaterne
for k, v in length_dict.items():
    print k, ': ', v
Daníel Örn
Egedal kommune

Jeanne MHJ
Posts: 24
Joined: Tue 23. May 2017 09:02
Location: Allerød Kommune

Re: Beregning af længde af linjer, og gruppering ud fra en attribut

Post by Jeanne MHJ »

Tak Daniel! :)

Post Reply