[FOSSGIS-Talk] Räumlicher Join von Grundstücken und Gebäuden in PostGIS

R. Reiterer r.reiterer at posteo.at
So Mai 22 08:22:01 CEST 2016


-- Beispieldaten 'Räumlicher Join von Grundstücken und Gebäuden in 
PostGIS':

CREATE TABLE public.grundstuecke
(gid serial NOT NULL,
geom geometry(Polygon, 31256),
nummer varchar(12),
CONSTRAINT grundstuecke_pkey PRIMARY KEY (gid)
);

CREATE TABLE public.gebaeude
(gid serial NOT NULL,
geom geometry(Polygon, 31256),
CONSTRAINT gebaeude_pkey PRIMARY KEY (gid)
);

INSERT INTO public.grundstuecke(gid, geom, nummer) VALUES
(1, ST_GeomFromText('Polygon ((-6508.65473045294038457 
274373.8524561341619119, -6594.73447251523521118 
274381.97558137698797509, -6608.56900586268056941 
274528.33038152626249939, -6581.62807250186688179 
274653.56931498734047636, -6493.38998014411117765 
274634.58786488714395091, -6532.84313911877234204 
274537.79611486929934472, -6508.65473045294038457 
274373.8524561341619119))', 31256), '1020/1'),
(2, ST_GeomFromText('Polygon ((-6439.42522136095067253 
274367.31944430840667337, -6508.65473045294038457 
274373.8524561341619119, -6532.84313911877234204 
274537.79611486929934472, -6493.38998014411117765 
274634.58786488714395091, -6420.07921508541949152 
274618.81752589193638414, -6449.19572207274086395 
274515.12352700304472819, -6439.42522136095067253 
274367.31944430840667337))', 31256), '1020/2');

INSERT INTO public.gebaeude(gid, geom) VALUES
(1, ST_GeomFromText('Polygon ((-6503.68534673 274609.32989886, 
-6532.84313912 274537.79611487, -6519.83843264 274449.65310426, 
-6565.04383857 274442.9834542, -6576.53113916 274534.1554482, 
-6551.04647247 274612.79384828, -6503.68534673 274609.32989886))', 
31256));

CREATE OR REPLACE VIEW public.gebaeude_mit_nummer AS
SELECT
gebaeude.*,
grundstuecke.nummer
FROM public.gebaeude, public.grundstuecke
WHERE ST_Within(gebaeude.geom, grundstuecke.geom);

/*
Am 21.05.2016 19:22 schrieb R. Reiterer:
> Ahoi Felix und danke für deine Mail. Sowohl ST_Contains und ST_Covers
> funktionieren leider nur, wenn die Knotenstruktur der Polygone
> (Grundstücke/Gebäude) an den Kanten übereinstimmt. Viele Gebäude
> wurden jedoch händisch über das Orthofoto ergänzt. Die Knoten liegen
> also meist irgendwo an der Grundstücksgrenze.
> 
> Schöne Grüße,
> 
> Reinhard
> 
> Am 21.05.2016 15:35 schrieb Felix Kunde:
>> Ahoi Reinhard,
>> 
>> Müsste es nicht gut mit ST_Contains(grundstuecke.geom, gebaeude.geom)
>> funktionieren? Contains erlaubt auch Randbeührungen. Sollten evtl. mal
>> alle Gebäudepunkte auf der Grundstückskante liegen wäre ST_Covers zu
>> wählen. Wenn keine Randberührungen erlaubt sind nehme
>> ST_ContainsProperly.
>> 
>> ST_DWithin ist eher für Umkreissuchen. Sobald eine Geometrie den
>> Suchradius berührt, wird sie von ST_DWithin erfasst. Soll das erst
>> geschehen, wenn die Geometrie vollständig im Suchradius liegt, nimmt
>> man ST_DFullyWithin.
>> 
>> Viele Grüße
>> Felix 
>>  
>> 
>> Gesendet: Samstag, 21. Mai 2016 um 12:08 Uhr
>> Von: "R. Reiterer" <r.reiterer at posteo.at>
>> An: "Fossgis talk liste" <fossgis-talk-liste at fossgis.de>
>> Betreff: [FOSSGIS-Talk] Räumlicher Join von Grundstücken und Gebäuden 
>> in PostGIS
>> Hallo an alle,
>> 
>> ich habe ein vermutlich einfaches Problem, leider klappt es aber nicht
>> so recht mit der Lösung :/ Konkret benötige ich einen räumlichen Join
>> von Grundstücken und den darauf befindlichen Gebäuden. Bei den
>> Geometrien handelt es sich jeweils um Polygone (MGI / Austria GK 
>> East).
>> „WHERE ST_Intersects(gebaeude.geom, grundstuecke.geom) AND NOT
>> ST_Touches(gebaeude.geom, grundstuecke.geom)“ funktioniert allerdings
>> nicht.
>> 
>> Das Problem liegt wohl an der möglichen Knotenstruktur von Gebäuden an
>> Grundstücksgrenzen. Die Abfrage liefert falsche Ergebnisse, sobald 
>> sich
>> ein Gebäudeknoten an einer Grundstückskante anstelle eines
>> Grundstücksknoten befindet.
>> 
>> Ich habe auch ST_DWithin(gebaeude.geom, grundstuecke.geom, 1) und
>> ST_DFullyWithin(gebaeude.geom, grundstuecke.geom, 1) getestet, erhalte
>> aber in beiden Fällen fehlerhafte Ergebnisse. Auch ist mir der
>> Unterschied zwischen ST_DWihtin und ST_DFullyWithin nicht bewusst,
>> „Within“ steht m.W. ohnehin für vollständig enthalten.
>> 
>> Richtig gefährlich wird übrigens „WHERE
>> ST_Within(ST_PointOnSurface(gebaeude.geom), grundstuecke.geom)“, 
>> sowohl
>> QGIS (DB-Verwaltung) als auch pgAdmin gehen dabei in die Knie und
>> stürzen ab.
>> 
>> Weiß jemand guten Rat?
>> 
>> Vielen Dank, Reinhard
>> --
>> ....................................................................
>> FOSSGIS 2016, Die Konferenz für Open Source GIS mit OpenData und
>> OpenStreetMap in Zusammenarbeit mit der AGIT 2016!
>> 4.-6. Juli 2016 in Salzburg (3. Juli OpenStreetMap Workshoptag)
>> http://www.fossgis.de/konferenz/2016/
>> 
>> AGIT 2016 vom 6.-8. Juli 2016
>> http://agit.at/[http://agit.at/]
>> 
>> FOSS4G 2016 Bonn - annual global event of the Open Source Geospatial
>> Foundation (OSGeo) - 24.-26. August 2016 in Bonn (zusätzlich noch
>> FOSS4G Hacking Event und Workshops)
>> http://2016.foss4g.org[http://2016.foss4g.org]
>> 
>> 
>> FOSSGIS e.V, der Verein zur Förderung von Freier Software aus dem
>> GIS-Bereich und Freier Geodaten!
>> http://www.fossgis.de/[http://www.fossgis.de/] 
>> https://twitter.com/fossgis_eV
>> 
>> ____________________________________________________________________
>> FOSSGIS-Talk-Liste mailing list
>> FOSSGIS-Talk-Liste at fossgis.de
>> https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste[https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste]
> --
> ....................................................................
> FOSSGIS 2016, Die Konferenz für Open Source GIS mit OpenData und
> OpenStreetMap in Zusammenarbeit mit der AGIT 2016!
> 4.-6. Juli 2016 in Salzburg (3. Juli OpenStreetMap Workshoptag)
> http://www.fossgis.de/konferenz/2016/
> 
> AGIT 2016 vom 6.-8. Juli 2016
> http://agit.at/
> 
> FOSS4G 2016 Bonn - annual global event of the Open Source Geospatial
> Foundation (OSGeo) - 24.-26. August 2016 in Bonn (zusätzlich noch
> FOSS4G Hacking Event und Workshops)
> http://2016.foss4g.org
> 
> 
> FOSSGIS e.V, der Verein zur Förderung von Freier Software aus dem
> GIS-Bereich und Freier Geodaten!
> http://www.fossgis.de/             https://twitter.com/fossgis_eV
> 
> ____________________________________________________________________
> FOSSGIS-Talk-Liste mailing list
> FOSSGIS-Talk-Liste at fossgis.de
> https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste
*/