[FOSSGIS-Talk] Räumlicher Join von Grundstücken und Gebäuden in PostGIS
Felix Kunde
felix-kunde at gmx.de
So Mai 22 10:54:00 CEST 2016
Hallo Reinhard,
ok, also winzige Überlappungen von Gebäuden mit mehreren Grundstücken
können nicht ausgeschlossen werden.
Mir fiel auf die Schnelle nur ein, die Gebäudegeometrie auf die
Mittelachse einzuschränken (siehe
http://postgis.net/docs/manual-2.2/ST_ApproximateMedialAxis.html) und
dann eine topologische Abfrage zu stellen:
CREATE OR REPLACE VIEW public.gebaeude_mit_nummer AS
SELECT gebaeude.gid,
gebaeude.geom,
grundstuecke.nummer
FROM gebaeude,
grundstuecke
WHERE ST_Contains(
grundstuecke.geom,
ST_ApproximateMedialAxis(gebaeude.geom)
);
Kann dir jetzt aber nicht sagen, ob die Funktion gut bei großen Daten
skaliert.
Viele Grüße
Felix
Gesendet: Sonntag, 22. Mai 2016 um 08:22 Uhr
Von: "R. Reiterer" <r.reiterer at posteo.at>
An: "Fossgis talk liste" <fossgis-talk-liste at fossgis.de>
Betreff: Re: [FOSSGIS-Talk] Räumlicher Join von Grundstücken und
Gebäuden in PostGIS
-- 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)
>> [1]http://www.fossgis.de/konferenz/2016/
>>
>> AGIT 2016 vom 6.-8. Juli 2016
>> [2]http://agit.at/[[3]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)
>> [4]http://2016.foss4g.org[[5]http://2016.foss4g.org]
>>
>>
>> FOSSGIS e.V, der Verein zur Förderung von Freier Software aus dem
>> GIS-Bereich und Freier Geodaten!
>> [6]http://www.fossgis.de/[[7]http://www.fossgis.de/]
>> [8]https://twitter.com/fossgis_eV
>>
>> ____________________________________________________________________
>> FOSSGIS-Talk-Liste mailing list
>> FOSSGIS-Talk-Liste at fossgis.de
>>
[9]https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste[[10]htt
ps://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)
> [11]http://www.fossgis.de/konferenz/2016/
>
> AGIT 2016 vom 6.-8. Juli 2016
> [12]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)
> [13]http://2016.foss4g.org
>
>
> FOSSGIS e.V, der Verein zur Förderung von Freier Software aus dem
> GIS-Bereich und Freier Geodaten!
> [14]http://www.fossgis.de/ [15]https://twitter.com/fossgis_eV
>
> ____________________________________________________________________
> FOSSGIS-Talk-Liste mailing list
> FOSSGIS-Talk-Liste at fossgis.de
> [16]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)
[17]http://www.fossgis.de/konferenz/2016/
AGIT 2016 vom 6.-8. Juli 2016
[18]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)
[19]http://2016.foss4g.org
FOSSGIS e.V, der Verein zur Förderung von Freier Software aus dem
GIS-Bereich und Freier Geodaten!
[20]http://www.fossgis.de/ [21]https://twitter.com/fossgis_eV
____________________________________________________________________
FOSSGIS-Talk-Liste mailing list
FOSSGIS-Talk-Liste at fossgis.de
[22]https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste
References
1. http://www.fossgis.de/konferenz/2016/
2. http://agit.at/
3. http://agit.at/
4. http://2016.foss4g.org/
5. http://2016.foss4g.org/
6. http://www.fossgis.de/
7. http://www.fossgis.de/
8. https://twitter.com/fossgis_eV
9. https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste
10. https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste
11. http://www.fossgis.de/konferenz/2016/
12. http://agit.at/
13. http://2016.foss4g.org/
14. http://www.fossgis.de/
15. https://twitter.com/fossgis_eV
16. https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste
17. http://www.fossgis.de/konferenz/2016/
18. http://agit.at/
19. http://2016.foss4g.org/
20. http://www.fossgis.de/
21. https://twitter.com/fossgis_eV
22. https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste