Automatische Erfassung von Punktgeometrien auf Grundlage von Adressen aus Excel-Tabellen

Aus kvwmap
Version vom 17. Januar 2013, 16:48 Uhr von Mschulz (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

--Mschulz 15:48, 17. Jan 2013 (CET)

Um Mitarbeitern aus den Fachämtern den Einstieg in kvwmap zu erleichtern, habe ich die Ersterfassung von Punktgeometrien aus Adressdaten versucht zu automatisieren. Das funktioniert allerdings nur bei exakter Schreibweise der Straßen und Gemarkungen bzw. Orte müssen Gemarkungen sein; hat bei mir eine Trefferquote um die 70%.
Für die Ersterfassung von ca. 150 Adress-Punkten ist das aber auch schon eine Erleichterung.

Folgende Schritte müssen ausgeführt werden (hier am Beispiel KUNST OFFEN):

VIEW erstellen
  • Zunächst legt man einen View an, der sich alle Straßen und Hausnummern mit Gemeinden, Gemarkungen und der entsprechenden Punktgeometrie (Beschriftung der Hausnummer) aus den entsprechenden Tabellen holt:
 CREATE OR REPLACE VIEW adressen_lk AS 
 SELECT DISTINCT s.gemeinde, g.gemeindename, gem.gemkgname, s.strasse, s.strassenname, btrim(p.label::text) AS label, 
                 (s.strassenname::text || ' '::text) || btrim(p.label::text) AS adresse, p.the_geom
 FROM alb_f_adressen a, alb_v_strassen s, alb_flurstuecke f, alb_v_gemarkungen gem, alb_v_gemeinden g, alkobj_t_pkt p, alknhaus h
 WHERE f.flurstkennz::text = a.flurstkennz::text AND gem.gemkgschl = f.gemkgschl AND a.gemeinde = s.gemeinde 
 AND a.strasse::text = s.strasse::text AND s.gemeinde = g.gemeinde AND p.objnr::text = h.objnr::text 
 AND h.gemeinde = g.gemeinde AND h.strasse::text = s.strasse::text AND h.gemeinde = s.gemeinde AND h.gemeinde = gem.gemeinde 
 AND p.label::text !~~ '(%'::text AND p.label::text !~~ 'D%'::text
 ORDER BY g.gemeindename, gem.gemkgname, s.strassenname, btrim(p.label::text), s.gemeinde, s.strasse, 
        (s.strassenname::text || ' '::text) || btrim(p.label::text), p.the_geom;
CSV erstellen
  • Excel-Tabelle in CSV-Format bringen z.B. Kunst-Offen mit Bezeichnung, Adresse(Straße & Hausnummer), Ort
  • plus zusätzliches Feld erstellen mit fortlaufender Nummer (ID)
DB-Tabelle
  • entsprechende Datenbank-Tabelle erstellen
CREATE TABLE kunstoffen
(
  bezeichnung character varying(50),
  adresse character varying(200),
  ort character varying(50),
  id character varying(6)
)
COPY
  • CSV in die Datenbanktabelle einspielen
COPY kunstoffen FROM '/PFAD/ZUR/CSV/kunstoffen.csv' DELIMITER AS ';';
Geometrietabelle
  • zusätzliche (zweite) DB-Tabelle mit Geometriefeld anlegen
CREATE TABLE kunstoffen_geom
(
 bezeichnung character varying(50),
 adresse character varying(200),
 ort character varying(50),
 id character varying(6),
 the_geom geometry,
 CONSTRAINT enforce_dims_the_geom CHECK (ndims(the_geom) = 2),
 CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'POINT'::text OR the_geom IS NULL),
 CONSTRAINT enforce_srid_the_geom CHECK (srid(the_geom) = 2398)
)
Punkte auf Hausnummern automatisch setzen
  • Punkte automatisch setzen über View adressen_lk (siehe oben) und Adressfeld in der erstellten DB-Tabelle
  • -> Ergebnis sind automatisch gesetzte Punktgeometrien auf Basis der Hausnummernbeschriftung der ALK
INSERT INTO kunstoffen_geom
SELECT a.*, b.the_geom 
FROM kunstoffen as a, adressen_lk as b
WHERE trim(a.ort)=trim(b.gemkgname) 
AND (lower(a.adresse)=lower(b.adresse) 
OR replace(lower(a.adresse), 'straße', 'str.')=lower(b.adresse))
ORDER BY ort
  • bezogen auf mein Beispiel (KUNSTOFFEN):
    • die mögliche Abkürzung straße -> str. wurde mit einbezogen, zusätzliche sind natürlich denkbar
    • die Attribute Straße und Hausnummer sind in der Spalte Adresse vereint - bei getrennter Straße und Hausnummer muss adresse durch trim(strasse)||' '||trim(hausnummer) ersetzt werden
Doppelte Datensätze löschen
  • Nun noch die Datensätze aus der originalen Tabelle über die ID löschen.
DELETE FROM kunstoffen
WHERE id IN (SELECT id FROM kunstoffen_geom)


Die übrig gelbliebenen Datebsätze müssen nun natürlich wieder über den GLE erfasst werden.