ST_Buffer — Beräknar en geometri som täcker alla punkter inom ett givet avstånd från en geometri.
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);
Beräknar en POLYGON eller MULTIPOLYGON som representerar alla punkter vars avstånd från en geometri/geografi är mindre än eller lika med ett givet avstånd. Ett negativt avstånd krymper geometrin i stället för att expandera den. Ett negativt avstånd kan krympa en polygon helt och hållet, i vilket fall POLYGON EMPTY returneras. För punkter och linjer returnerar negativa avstånd alltid tomma resultat.
För geometri anges avståndet i enheterna för geometrins spatiala referenssystem. För geografi anges avståndet i meter.
Den valfria tredje parametern styr buffertens noggrannhet och stil. Noggrannheten för cirkelbågar i bufferten anges som antalet linjesegment som används för att approximera en kvartscirkel (standard är 8). Buffertstilen kan specificeras genom att tillhandahålla en lista med blankseparerade nyckel=värde-par enligt följande:
'quad_segs=#' : antal linjesegment som används för att approximera en kvartscirkel (standard är 8).
'endcap=round|flat|square' : endcap-stil (standard är "round"). "butt" accepteras som synonym för "flat".
'join=round|mitre|bevel' : fogningsstil (standard är "round"). "Miter" accepteras som synonym till "mitre".
'mitre_limit=#.#' : gräns för mitraförhållande (påverkar endast miterad fogning). 'miter_limit' accepteras som en synonym till 'mitre_limit'.
'side=both|left|right' : defaults to 'both'. 'left' or 'right' performs a single-sided buffer on the geometry, with the buffered side relative to the direction of the line. This is only applicable to LINESTRING geometry and does not affect POINT or POLYGON geometries. By default end caps are square when 'left' or 'right' are specified.
|
|
|
|
|
|
|
Buffer kan hantera ogiltiga indata och utdata är alltid en giltig polygonal geometri. Buffring med avstånd 0 används ibland som ett sätt att reparera ogiltiga polygoner. ST_MakeValid är mer lämplig för denna process eftersom den kan hantera multipolygoner. |
|
|
|
Buffring används ibland för att utföra en sökning inom avstånd. För detta användningsfall är det mer effektivt att använda ST_DWithin. |
|
|
|
Denna funktion ignorerar Z-dimensionen. Den ger alltid ett 2D-resultat även när den används på en 3D-geometri. |
Förbättrad: 2.5.0 - ST_Buffer geometri stöd förbättrades för att möjliggöra sidobuffring specifikation side=both|left|right.
Tillgänglighet: 1.5 - ST_Buffer har förbättrats för att stödja olika ändkapslar och join-typer. Dessa är användbara för att t.ex. konvertera väglinjer till polygonvägar med platta eller fyrkantiga kanter istället för rundade kanter. Tunt omslag för geografi har lagts till.
Utförs av GEOS-modulen.
Denna metod implementerar OGC:s implementeringsspecifikation för enkla funktioner för SQL 1.1. s2.1.1.3
Denna metod implementerar SQL/MM-specifikationen. SQL-MM IEC 13249-3: 5.1.30
quad_segs=8 (standard)
SELECT ST_Buffer(
ST_GeomFromText('POINT(100 90)'),
50, 'quad_segs=8');
|
quad_segs=2 (lame)
SELECT ST_Buffer(
ST_GeomFromText('POINT(100 90)'),
50, 'quad_segs=2');
|
|
endcap=rund join=rund (standard)
SELECT ST_Buffer(
ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'
), 10, 'endcap=round join=round');
|
ändkapsel=fyrkantsformad
SELECT ST_Buffer(
ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'
), 10, 'endcap=square join=round');
|
ändkapsel=platt
SELECT ST_Buffer(
ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'
), 10, 'endcap=flat join=round');
|
skarv=fasad
SELECT ST_Buffer(
ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'
), 10, 'join=bevel');
|
join=mitre mitre_limit=5.0 (standard mitre-gräns)
SELECT ST_Buffer(
ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'
), 10, 'join=mitre mitre_limit=5.0');
|
skarv=mitra mitre_limit=1
SELECT ST_Buffer(
ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'
), 10, 'join=mitre mitre_limit=1.0');
|
sida=vänster
SELECT ST_Buffer(
ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'
), 10, 'side=left');
|
sida=höger
SELECT ST_Buffer(
ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'
), 10, 'side=right');
|
sida=vänster led=mitre
SELECT ST_Buffer(
ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'
), 10, 'side=left join=mitre');
|
högerlindning, polygongräns sida=vänster
SELECT ST_Buffer(
ST_ForceRHR(ST_Boundary(ST_GeomFromText('POLYGON ((50 50, 50 150, 150 150, 150 50, 50 50))'))),
), 20, 'side=left');
|
högerlindning, polygongräns sida=höger
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, less smooth circle using only 2 points per quarter circle is an octagon.
The following example creates a 100 meter octagon in NAD83 longitude/latitude by transforming to the Massachusetts state plane meter projection and then buffering.
SELECT ST_AsText(ST_Buffer( ST_Transform(ST_SetSRID(ST_Point(-71.063526, 42.35785),4269), 26986), 100,2)) As octagon;
POLYGON((236057.5905746494 900908.7599186979,236028.30125276805 900838.0492405792,235957.5905746494 900808.7599186979,235886.87989653074 900838.0492405792,235857.5905746494 900908.7599186979,235886.87989653074 900979.4705968165,235957.5905746494 901008.7599186979,236028.30125276805 900979.4705968165,236057.5905746494 900908.7599186979))
ST_Collect, ST_DWithin, ST_SetSRID, ST_Transform, ST_Union, ST_MakeValid