Discussion:
[FOSSGIS-Talk] QGIS - kniffliges Beschriftungsproblem
d***@web.de
13 years ago
Permalink
Hallo zusammen,

ich habe in QGIS ein Polygon-Shape mit 10 Grundflächen von
Mehrfamilienhäusern einer Straße. Jedes Mehrfamilienhaus hat als
Attributwert eine eindeutige Hausnummer (1 bis 10). Und ich habe eine
geometrielose Tabelle (Excel) mit 50 Namen. Zu jedem Namen gibt es die
Hausnummer (1 bis 10), in der diese Person wohnt. In allen Häusern
wohnen unterschiedliche Mengen von Namen, mal 3, mal 5, mal 8 usw.

Ziel ist, die Polygone mit genau den Namen zu beschriften, die in den
jeweiligen Hausnummern wohnen. Das bedeutet, daß jedes Haus
unterschiedliche Anzahlen von Namen beinhaltet.

Wer hat eine Idee, wie ich
1. eine geometrielose Tabelle in QGIS einladen kann,
2. eine Verknüpfung zwischen dem Shape (mit 10 Objekten) und der
Namentabelle (mit 50 Objekten) herstellen kann,
3. die Shapes entsprechend beschriften kann.

Danke für Eure Hinweise im Voraus!

Grüße sendet Lars
b***@jena.de
13 years ago
Permalink
Hallo,

QGIS kann keine 1:n Joins (wie sollte das auch gehen? dann müssten ja
die Polygone verfielfacht werden). Du mußt Deine Exceltabelle also so
umstrukturieren, dass Du einen 1:1 Join machen kannst.
Ich würde es ungefähr folgendermassen probieren (nicht getestet): eine
Pivottabelle machen (ich kenne Excel nicht, vermute aber mal, dass das
darin geht, d.h. Spalte1 = hnr, spalte2 = Name1, spalte3 = Name2 usw.)
Einladen kannst Du nur csv-Tabellen, Du musst das Ergebnis also als csv
abspeichern. Ich glaube, dass Du auch eine x und eine y-Spalte anlegen
mußt, kannst Du irgendwas reinschreiben, denn QGIS lädt, soweit ich
weiss, keine geometrielosen Tabellen von csv. Dann alles als Shapedatei
abspeichern, ein neues Feld anlegen "Beschriftung" und mit dem
Feldrechner name1 || ' ' || name2 usw. darin eintragen.

viel Erfolg

Bernhard
...
________ Information from NOD32 ________
This message was checked by NOD32 Antivirus System for Linux Mail Server.
http://www.nod32.com
Marco Lechner - FOSSGIS e.V.
13 years ago
Permalink
QGIS kann (zumindest die aktuelle nightly build Version) dbf oder csv
auch ohne Geometrieinformationen als Tabelle laden. Dazu "Vektorlayer
hinzufügen" wählen, Dateiformat "Alle anzeigen" und die csv oder dbf
Datei auswählen. Der dem TOC hinzugefügte Table kann problemlos für
joins eingesetzt werden. Welche weiteren Formate uinterstützt werden
weiß ich leider nicht (xls und ods zumindest nicht)

Marco
...
d***@web.de
13 years ago
Permalink
Hallo Bernhard,

danke für die Tips.

Das Wort "Pivottabelle" habe ich das letzte Mal vor ca. 15 Jahren
gehört... Mit Excel kann man damit Auswertungen aufgrund verschiedener
Parameter machen. Jedoch ist es mir nicht gelungen, auf Basis der
eindeutigen Hausnummer, die Namen transponiert in die gleiche Zeile
hintereinander zu schreiben... Wie läuft denn sowas mit OpenOffice?

Ich habe zwischenzeitlich entdeckt, daß man in QGIS geometrielose
Tabellen (csv) einladen kann: Add Vector Layer - Dateityp "csv". Für ein
Join würde das also gehen (wenn ich denn diese Pivot-Sache hinkriegen
würde...).

Jedoch, glaube ich, daß man keine VERKNÜPFUNG (1:1) sondern eine
BEZIEHUNG (1:n) zwischen beiden Tabellen herstellen muß. Ich kenne sowas
noch aus alten ESRI ArcInfo Zeiten. Wahrscheinlich müßte in QGIS dafür
ein Plugin geschrieben werden, sofern es nicht schon eins gibt, das ich
nicht finde...

BEZIEHUNG heißt, daß die Attributtabelle meines Häuser-Shape-Layers so
bleibt, wie sie ist. Die geometrielose Tabelle wird in das Projekt
hinzugeladen. Wenn man nun eine Beziehung aufgrund einer eindeutigen
Spalte (hier: Hausnummer) zwischen beiden herstellt, dann kann man z.B.
die Haus-Nr. 1 des Shape-Files markieren und in der Namen-Tabelle werden
alle Zeilen mit der gleichen Hausnummer ebenfalls markiert. Und
umgekehrt kann man einen Namen in der Tabelle markieren und QGIS
markiert das entsprechende Shape-Objekt.

Wenn man es schafft, solche Beziehungen in QGIS herzustellen, dann
dürfte es (meiner laienhaften Meinung nach) nicht mehr so schwer sein,
die Beschriftung der Shape-Objekte anhand einer auszuwählenden Spalte
(z.B. Name oder Vorname) der geometrielosen Tabelle ausführen zu lassen,
so daß alle zur Hausnummer 1 in Spalte "Name" gehörenden Namen
ausgegeben werden.

Was sagen die Experten dazu?

Grüße sendet Lars
...
Lars Lingner
13 years ago
Permalink
On 29.03.2012 22:01, ***@web.de wrote:
[...]
Post by d***@web.de
Wenn man es schafft, solche Beziehungen in QGIS herzustellen, dann
dürfte es (meiner laienhaften Meinung nach) nicht mehr so schwer
sein, die Beschriftung der Shape-Objekte anhand einer
auszuwählenden Spalte (z.B. Name oder Vorname) der geometrielosen
Tabelle ausführen zu lassen, so daß alle zur Hausnummer 1 in Spalte
"Name" gehörenden Namen ausgegeben werden.
Ich würde das Shapefile und die CSV-Datei in jeweils eine Tabelle in
eine Datenbank laden.
In der Shape-Tabelle eine Spalte einfügen, mir aus der CSV-Tabelle
alle Namen pro Hausnummer holen und in die jeweilige Zeile in der
neuen Spalte einfügen.

Oder steht eine DB nichts zur Debatte?

Oder wenn Du schon die CSV-Datei in Excel oder Openoffice hast, kannst
Du da nicht die Gruppierung nach Hausnummern machen und dann die
Spalte in die dbf-Datei direkt einfügen?

Die Spalte, egal wie erstellt, kann dann in QGis zur Beschriftung
ausgewählt werden.

Viele Grüße

Lars
b***@jena.de
13 years ago
Permalink
Hallo Lars,

ich arbeite eigentlich ausschliesslich mit PostgreSQL/PostGIS, des kann
ich Dir zu OO keinen Tip geben, sondern nur sagen, wie das in PostgreSQL
gehen würde. Ich schliesse mich Lars Lingner an: Besteht die Möglichkeit
eine DB zu nutzen?
Das mit dem Laden als Vektorlayer wusste ich nicht (weil kein
dateibasiertes Arbeiten :)
QGIS 1.7 kann nur _ein_ Feld zur Beschriftung heranziehen, die
dev-Version erlaubt komplexe Ausdrücke zur Beschriftung (also auch
mehrere Felder).
Ich denke das von Dir beschriebene Verhalten der 1:n Beziehung
(Auswahlverhalten) ist nicht besonders schwer zu realisieren, von da ist
es aber ein weiter Weg zur Beschriftung, denn die Beschriftung kann nur
auf Felder der Tabelle des Layers erfolgen, nicht auf Felder in anderen
Tabellen. Durch die 1:1 - Verknüpfung werden Felder einer anderen
Tabelle quasi zum Bestandteil der entsprechenden Layer, darum geht das hier.
...
________ Information from NOD32 ________
This message was checked by NOD32 Antivirus System for Linux Mail Server.
http://www.nod32.com
Andreas Neumann
13 years ago
Permalink
Hallo,

Mit PostgreSQL wäre das kein Problem.

Man macht entweder:
a) einen Join und dann ein GROUP BY oder
b) einen Subquery der alles in einen String zusammenfasst.

Zum aggregieren kann man die aggregate Funktionen array_agg() oder
string_agg() nehmen:
http://www.postgresql.org/docs/current/static/functions-aggregate.html

Ich mache das in Uster z.b. um alle Eigentümer und Adressen einer
Parzelle zu aggregieren. Das funktioniert gut.

Grüsse,
Andreas
...
--
--
Andreas Neumann
Böschacherstrasse 10A
8624 Grüt (Gossau ZH)
Switzerland
d***@web.de
13 years ago
Permalink
Hallo zusammen,

ich danke Euch allen, daß Ihr Euch meines Problems annehmt!

Zur Tabellen-BEZIEHUNG (Relation): es scheint ab Version 1.8 etwas neues zu
geben, wenn ich den allerletzen Absatz dieses Dokuments richtig verstehe:
http://gis.uster.ch/dokumentation/publikationen/qgis-2011-was-gibt-es-neues-geomatik-schweiz-artikel/view
(@ Andreas: stammt das Dokument evtl. von Dir?)

Zu PostgreSQL: ich würde liebend gerne damit arbeiten, wenn ich nur
wüßte, wie! Ich wüßte gern, wie ich sowas anlege, verwalte, auswerte.
Muß ich dazu einen (Internet-)Server betreiben, oder kann ich sowas
auch "auf Festplatte" ablegen (wie z.B. MS-Access)? Wie kriege ich
das PostGIS "da drauf"? Kann ich vorhande Shapes einfach umwandeln?
Was ist mit Raster-Daten? Und, und, und...

Gibt es eine leicht verständliche Schritt-für-Schritt
Anleitung (auf deutsch)?

Grüße sendet Lars



-----Ursprüngliche Nachricht-----
Gesendet: Freitag, 30 März 2012 um 08:57:16 Uhr
Von: "Andreas Neumann" <***@carto.net>
An: fossgis-talk-***@fossgis.de
Betreff: Re: [FOSSGIS-Talk] QGIS - kniffliges Beschriftungsproblem
Hallo,

Mit PostgreSQL wäre das kein Problem.

Man macht entweder:
a) einen Join und dann ein GROUP BY oder
b) einen Subquery der alles in einen String zusammenfasst.

Zum aggregieren kann man die aggregate Funktionen array_agg() oder
string_agg() nehmen:
http://www.postgresql.org/docs/current/static/functions-aggregate.html

Ich mache das in Uster z.b. um alle Eigentümer und Adressen einer
Parzelle zu aggregieren. Das funktioniert gut.

Grüsse,
Andreas
...
--
--
Andreas Neumann
Böschacherstrasse 10A
8624 Grüt (Gossau ZH)
Switzerland
_______________________________________________
FOSSGIS-Talk-Liste mailing list
FOSSGIS-Talk-***@fossgis.de
https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste
___________________________________________________________
Ihr WEB.DE Postfach immer dabei: die kostenlose WEB.DE Mail App für iPhone und Android.
https://produkte.web.de/freemail_mobile_startseite/
b***@jena.de
13 years ago
Permalink
...
PostgreSQL ist ein Datenbank-Server. Den kannst Du auf Deinem
Arbeitsplatzrechner installieren, für Windows hier:
http://www.postgresql.org/download/windows/
Vor ca. einem Jahr war das so, dass Du dann in einem weiteren Schritt
Erweiterungen installieren konntest, u.a. auch PostGIS.

Du mußt Dich allerdings zumindest mit den Speicherparametern in
postgresql.conf beschäftigen, die sind i.Allg. nicht ausreichend für
einen Echtbetrieb.

shp importieren kannst Du mit der Erweiterung SPIT von QGIS aus.

Raster würde ich im Dateisystem belassen.
Post by d***@web.de
Gibt es eine leicht verständliche Schritt-für-Schritt
Anleitung (auf deutsch)?
Habe ich gerade nichts bei der Hand, Deine bevorzugte Suchmaschine
findet da bestimmt etwas.

Bernhard
...
________ Information from NOD32 ________
This message was checked by NOD32 Antivirus System for Linux Mail Server.
http://www.nod32.com
Andreas Neumann
13 years ago
Permalink
Hallo,

Ich gehe hier nicht in die Details über Postgis. Es gibt sicherlich
genügend Material auf dem Web das Postgis einführt. Für PostgreSQL
selber gibt es exzellente Dokumentation unter http://www.postgresql.org/
und für Postgis unter http://www.postgis.org/

Das Buch "Postgis in Action" von Regina Obe ist für Postgis-Einsteiger
unbedingt zu empfehlen. Man kann es auch als e-Book kaufen. Die Doku ist
auf englisch - aber es gibt ja heutzutage exzellente Übersetzungstools
wie translate.google.com

Postgis kann man selbstverständlich lokal (auch unter Windows)
installieren. Für Windows gibt es derzeit nur eine 32bit-Version, diese
läuft aber auch unter 64bit Windows. Die Administration kann man über
pgadmin3 machen (graphisches Tool) und über das DB-Manager Plugin in
QGIS. Über DB-Manager kann man auch per drag and drop z.b. Shapefiles
einspielen in eine Datenbank.

Zum Dokument
http://gis.uster.ch/dokumentation/publikationen/qgis-2011-was-gibt-es-neues-geomatik-schweiz-artikel/view
-

Dabei geht es primär um Werterelationen, wie z.b. Code 0 im Attribut
"Material" der "Schacht"-Tabelle verweist auf die Tabelle
"Schacht_Material". Dort gibt es auch den Zahlencode und dann den
ausgeschriebenen Wert. Das funktioniert bereits in QGIS 1.9x (oder
vielleicht auch schon in QGIS 1.7) - aber das ist auch eine
1:1-Beziehung. Festgelegt wird diese Relation in den Layereigenschaften,
--> Felder tab --> Widgettyp "Werterelation" (Combobox).

Es ist Arbeit im Gange für 1:n-Beziehungen, das wäre aber kein
richtiger Join, sondern das Einbetten eines Formulars in ein anderes mit
automatischer Filterung, also z.b. 1 Abwasserkanal hat mehrere
Videountersuchungen.

Hoffe das hilft,
Andreas
...
--
--
Andreas Neumann
Böschacherstrasse 10A
8624 Grüt (Gossau ZH)
Switzerland
Jürgen E. Fischer
13 years ago
Permalink
Moin Lars,
Post by d***@web.de
Zu PostgreSQL: ich würde liebend gerne damit arbeiten, wenn ich nur
wüßte, wie! Ich wüßte gern, wie ich sowas anlege, verwalte, auswerte.
Du kannst auch SpatiaLite nehmen - das funktioniert von der QGIS & SQL-Seite
sehr ähnlich, braucht aber keine zusätzliche Software (ist in QGIS drin) und
auch keinen Server(-prozeß).

Ich benutze allerdings auch lieber PostGIS - SpatiaLite ist also auch wieder
nur ein weiteres Stichwort mit dem Du die Suchmaschine füttern kannst ;)


Jürgen
--
Jürgen E. Fischer norBIT GmbH Tel. +49-4931-918175-31
Dipl.-Inf. (FH) Rheinstraße 13 Fax. +49-4931-918175-50
Software Engineer D-26506 Norden http://www.norbit.de
IRC: jef on FreeNode committ(ed|ing) to Quantum GIS
--
norBIT Gesellschaft fuer Unternehmensberatung und Informationssysteme mbH
Rheinstrasse 13, 26506 Norden
GF: Jelto Buurman, HR: Amtsgericht Emden, HRB 5502
Loading...