Name

ST_Buffer — Berechnet eine Geometrie, die alle Punkte innerhalb eines bestimmten Abstands zu einer Geometrie umfasst.

Synopsis

geometry ST_Buffer(geometry g1, float radius_of_buffer, text buffer_style_parameters = '');

geometry ST_Buffer(geometry g1, float radius_of_buffer, integer num_seg_quarter_circle);

geography ST_Buffer(geography g1, float radius_of_buffer, text buffer_style_parameters);

geography ST_Buffer(geography g1, float radius_of_buffer, integer num_seg_quarter_circle);

Beschreibung

Berechnet ein POLYGON oder MULTIPOLYGON, das alle Punkte darstellt, deren Abstand zu einer Geometrie/Geografie kleiner oder gleich einem bestimmten Abstand ist. Ein negativer Abstand verkleinert die Geometrie, anstatt sie zu vergrößern. Ein negativer Abstand kann ein Polygon vollständig schrumpfen lassen; in diesem Fall wird POLYGON EMPTY zurückgegeben. Für Punkte und Linien geben negative Abstände immer leere Ergebnisse zurück.

Bei Geometrie wird die Entfernung in den Einheiten des räumlichen Bezugssystems der Geometrie angegeben. Für die Geografie wird die Entfernung in Metern angegeben.

Der optionale dritte Parameter steuert die Genauigkeit und den Stil des Puffers. Die Genauigkeit der Kreisbögen im Puffer wird als die Anzahl der Liniensegmente angegeben, die zur Annäherung an einen Viertelkreis verwendet werden (Standardwert ist 8). Der Pufferstil kann durch Angabe einer Liste von durch Leerzeichen getrennten Schlüssel=Wert-Paaren wie folgt spezifiziert werden:

  • quad_segs=#' : Anzahl der Liniensegmente, die zur Annäherung an einen Viertelkreis verwendet werden (Standard ist 8).

  • endcap=round|flat|square' : Stil der Endkappe (Standardwert ist "round"); "butt" wird als Synonym für "flat" akzeptiert.

  • join=round|mitre|bevel' : Art der Verbindung (Standardeinstellung ist "round"). 'miter' wird als Synonym für 'mitre' akzeptiert.

  • 'mitre_limit=#.#' : Begrenzung des Gehrungsverhältnisses (wirkt sich nur auf Gehrungsverbindungen aus). 'miter_limit' wird als Synonym für 'mitre_limit' akzeptiert.

  • side=both|left|right' : 'left' oder 'right' führt eine einseitige Pufferung der Geometrie durch, wobei sich die gepufferte Seite auf die Richtung der Linie bezieht. Dies gilt nur für LINESTRING-Geometrien und wirkt sich nicht auf POINT- oder POLYGON-Geometrien aus. Standardmäßig sind die Endkappen quadratisch.

[Note]

Für die Geografie ist dies eine dünne Hülle um die Geometrieimplementierung. Es wird ein planares räumliches Bezugssystem bestimmt, das am besten zum Begrenzungsrahmen des geografischen Objekts passt (versucht werden UTM, Lambert Azimuthal Equal Area (LAEA) Nord-/Südpol und schließlich Mercator). Der Puffer wird im planaren Raum berechnet und dann in WGS84 zurücktransformiert. Dies führt möglicherweise nicht zu dem gewünschten Verhalten, wenn das Eingabeobjekt viel größer als eine UTM-Zone ist oder die Datumsgrenze überschreitet.

[Note]

Die Ausgabe von Buffer ist immer eine gültige polygonale Geometrie. Buffer kann mit ungültigen Eingaben umgehen, daher wird manchmal die Pufferung um den Abstand 0 verwendet, um ungültige Polygone zu reparieren. ST_MakeValid kann auch für diesen Zweck verwendet werden.

[Note]

Die Pufferung wird manchmal verwendet, um eine Suche innerhalb der Entfernung durchzuführen. Für diesen Anwendungsfall ist es effizienter, ST_DWithin zu verwenden.

[Note]

Diese Funktion ignoriert die Z-Dimension. Sie liefert immer ein 2D-Ergebnis, auch wenn sie auf eine 3D-Geometrie angewendet wird.

Erweiterung: 2.5.0 - ST_Buffer ermöglicht jetzt auch eine seitliche Pufferzonenberechnung über side=both|left|right.

Verfügbarkeit: 1.5 - ST_Buffer wurde um die Unterstützung von Abschlusstücken/endcaps und Join-Typen erweitert. Diese können zum Beispiel dazu verwendet werden, um Linienzüge von Straßen in Straßenpolygone mit flachen oder rechtwinkeligen Abschlüssen anstatt mit runden Enden umzuwandeln. Ein schlanker Adapter für den geographischen Datentyp wurde hinzugefügt.

Wird vom GEOS Modul ausgeführt

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.3

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM IEC 13249-3: 5.1.30

Beispiele

quad_segs=8 (Standardwert)

SELECT ST_Buffer(
 ST_GeomFromText('POINT(100 90)'),
 50, 'quad_segs=8');
                

quad_segs=2 (lahme Ente)

SELECT ST_Buffer(
 ST_GeomFromText('POINT(100 90)'),
 50, 'quad_segs=2');
                

endcap=round join=round (Standardwert)

SELECT ST_Buffer(
 ST_GeomFromText(
  'LINESTRING(50 50,150 150,150 50)'
 ), 10, 'endcap=round join=round');
                

endcap=square

SELECT ST_Buffer(
 ST_GeomFromText(
  'LINESTRING(50 50,150 150,150 50)'
 ), 10, 'endcap=square join=round');
                

endcap=flat

SELECT ST_Buffer(
 ST_GeomFromText(
  'LINESTRING(50 50,150 150,150 50)'
 ), 10, 'endcap=flat join=round');
                

join=bevel

SELECT ST_Buffer(
 ST_GeomFromText(
  'LINESTRING(50 50,150 150,150 50)'
 ), 10, 'join=bevel');
                

join=mitre mitre_limit=5.0 (default mitre limit)

SELECT ST_Buffer(
 ST_GeomFromText(
  'LINESTRING(50 50,150 150,150 50)'
 ), 10, 'join=mitre mitre_limit=5.0');
                

join=mitre mitre_limit=1

SELECT ST_Buffer(
 ST_GeomFromText(
  'LINESTRING(50 50,150 150,150 50)'
 ), 10, 'join=mitre mitre_limit=1.0');
                

side=left

SELECT ST_Buffer(
 ST_GeomFromText(
  'LINESTRING(50 50,150 150,150 50)'
 ), 10, 'side=left');
                

side=right

SELECT ST_Buffer(
 ST_GeomFromText(
  'LINESTRING(50 50,150 150,150 50)'
 ), 10, 'side=right');
                

side=left join=mitre

SELECT ST_Buffer(
 ST_GeomFromText(
  'LINESTRING(50 50,150 150,150 50)'
 ), 10, 'side=left join=mitre');
                

right-hand-winding, polygon boundary side=left

SELECT ST_Buffer(
ST_ForceRHR(
ST_Boundary(
 ST_GeomFromText(
'POLYGON ((50 50, 50 150, 150 150, 150 50, 50 50))'))),
 ), 20, 'side=left');
                

right-hand-winding, polygon boundary side=right

SELECT ST_Buffer(
ST_ForceRHR(
ST_Boundary(
 ST_GeomFromText(
'POLYGON ((50 50, 50 150, 150 150, 150 50, 50 50))'))
), 20,'side=right')
                

--A buffered point approximates a circle
-- A buffered point forcing approximation of (see diagram)
-- 2 points per quarter circle is poly with 8 sides (see diagram)
SELECT ST_NPoints(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50)) As promisingcircle_pcount,
ST_NPoints(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50, 2)) As lamecircle_pcount;

promisingcircle_pcount | lamecircle_pcount
------------------------+-------------------
             33 |                9

--A lighter but lamer circle
-- only 2 points per quarter circle is an octagon
--Below is a 100 meter octagon
-- Note coordinates are in NAD 83 long lat which we transform
to Mass state plane meter and then buffer to get measurements in meters;
SELECT ST_AsText(ST_Buffer(
ST_Transform(
ST_SetSRID(ST_Point(-71.063526, 42.35785),4269), 26986)
,100,2)) As octagon;
----------------------
POLYGON((236057.59057465 900908.759918696,236028.301252769 900838.049240578,235
957.59057465 900808.759918696,235886.879896532 900838.049240578,235857.59057465
900908.759918696,235886.879896532 900979.470596815,235957.59057465 901008.759918
696,236028.301252769 900979.470596815,236057.59057465 900908.759918696))