[FOSSGIS-Talk] Punkte in einer Attributtabelle ordnen

"Jäger, Frank (KRZ)" F.Jaeger at KRZ.DE
Mi Dez 19 11:05:10 CET 2012


Moin,
das Problem ist mir letzte Woche gerade wieder über den Weg gelaufen:  Hausnummern aus ALKIS (Liegenschaftskataster) sortiert darstellen.

Hier ein PHP-Programm, was die Nummern sortiert aus der PostGIS-DB holt.
Allerdings sind in dem vorliegenden Format der Spalte die Anteile von "Nummer" und "Zusatzbuchstabe" durch ein Blank getrennt, welches zum Splitten in die zwei Teile verwendet wird. Vielleicht kann man sich trotzdem Anregungen dort holen.

http://trac.wheregroup.com/PostNAS/browser/trunk/data/mapbender/http/nav/alkisnav_adr.php
in "function suchHausZurStr()", Zeile 259, SQL-Code:

    ORDER BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2);";

Mfg
F. Jäger


-----Ursprüngliche Nachricht-----
Von: fossgis-talk-liste-bounces at fossgis.de [mailto:fossgis-talk-liste-bounces at fossgis.de] Im Auftrag von Thomas Baschetti
Gesendet: Dienstag, 18. Dezember 2012 22:20
An: fossgis-talk-liste at fossgis.de
Betreff: Re: [FOSSGIS-Talk] Punkte in einer Attributtabelle ordnen


Am 18.12.2012 19:49, schrieb klaussss at web.de:
> Hallo,
> in einer Attributtabelle eines Layers stehen ca 100 Punkte. Die 
> Tabelle hat 2 Spalten. In der einen Spalte stehen arabische Zahlen. 
> Aber der Typ des Attributs ist trotzdem als "Text" vordefiniert 
> worden. In der anderen Spalte stehen 'richtige' Texte. Nun sollen alle 
> Zeilen so geordnet werden, dass die Zahlen aufsteigen.
> * (wie) geht das?
kommt aufs Programm bzw. die Datenquelle des Layers an. Wenn die Daten aus einer Datenbank (postgresql/postgis) kommen, könntest Du den Datentyp casten und danach sortieren, also z.B.
select cast(hausnummer as int) as hsnr from layer order by hsn

Geht aber nur, wenn alle Werte direkt umgewandelt werden können. Also nicht bei

> * geht das auch wenn Zahlen z.B. 127, 128, 128a, 129 heissen?
da müsstest Du komplexer casten, z.B.
select hausnummer, cast(regexp_replace(hausnummer,'[a-z]','') as int) as hsnr, regexp_replace(hausnummer,'[1-9]*','') as zusatz from ax_lagebezeichnungmithausnummer order by hsnr,zusatz

Falls das aber wirklich Hausnummer sind wird das nicht reichen, die können nämlich auch komplexer sein, z.B. "6-8" oder 100a-f und alles dazwischen. Und manchmal gibt es dann noch Stockwerk und Zimmernummer dazu, falls es Adressdaten sind ;-)


Mit freundlichen Grüßen

Thomas Baschetti

-- 

Thomas Baschetti - Systemanalyse Geographische Informationssysteme Hakenstraße 8D
49074 Osnabrück

Tel: 0541 25 91 90 | mobil 01577 189 25 91
E-Mail: info at thomas-baschetti.de
www.thomas-baschetti.de
https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste