全部產品
Search
文件中心

ApsaraDB RDS:ST_Buffer

更新時間:Feb 28, 2024

對於Geometry類型對象,返回以給定點為中心點,距離小於或等於指定距離的所有點組成的Geometry對象。對於Geography類型對象,則在幾何空間參考系中計算。

文法

geometry  ST_Buffer(geometry  g1 , float radiusOfBuffer);
geometry  ST_Buffer(geometry g1 , float radiusOfBuffer , integer numSegQuarterCircle);
geometry  ST_Buffer(geometry g1 , float radiusOfBuffer , text bufferStyleParameters);
geography ST_Buffer(geography g1 , float radiusOfBufferInMeters);
geography ST_Buffer(geography g1 , float radiusOfBuffer , integer numSegQuarterCircle);
geography ST_Buffer(geography g1 , float radiusOfBuffer , text bufferStyleParameters);

參數

參數名稱描述
g1目標Geometry對象或Geography對象。
radiusOfBufferBuffer半徑。只適用於Geometry對象。
numSegQuarterCircle指定分隔四分之一圓的弧段的數量,預設為7次分隔。
bufferStyleParameters空格分隔的索引值對參數。
radiusOfBufferInMetersBuffer半徑,半徑為米。只適用於Geography對象。

描述

  • 對於Polygon對象來說,如果使用負值的半徑,這意味著收縮而不是擴充它。
  • 半徑單位以空間參考系規定的單位為準。
  • 對Geography類型對象的來說,該函數實際上是對Geometry類型實現的簡單封裝。它首先會選擇一個適用於Geography對象的bounding box的最佳SRID值,(偏向於使用UTM參考系,Lambert Azimuthal Equal Area(LAEA),南北極,最差的情況是使用墨卡托投影),然後在平面空間參考系中做緩衝,最後再重新轉換到WGS 84地理參考系中。
  • 該函數不考慮第三維度(Z座標),即便輸入對象是一個3DGeometry對象,返回的也是2D的buffer。
  • 使用者經常錯誤性地使用該函數來做半徑搜尋。建立一個緩衝區來做半徑搜尋是很慢且無效的。應該使用函數ST_DWithin來處理。
  • bufferStyleParameters參數如下:
參數名稱描述類型預設值說明
quad_segs用來近似四分之一圓的弧段數。integer8數值越大,弧段越圓滑。
endcap端蓋樣式。stringround可選值為:
  • round
  • flat
  • square
join串連方式。stringround可選值為:
  • round
  • mitre
  • bevel
mitre_limit切割率限制。float5.0隻影響mitre的串連方式。
sideBuffer位置。string--可選值為:bothleftrightleft和right在Geometry對象上執行單面緩衝,其緩衝面相對於直線方向。Buffer位置只對LineString對象有意義,不影響Point對象和Polygon對象。

樣本

  • 不同弧段分段數對比:
    SELECT ST_Buffer('POINT(0 0)'::geometry,1),ST_Buffer('POINT(3 0)'::geometry,1,'quad_segs=2');
    1
  • 3種端蓋樣式對比:
    SELECT ST_Buffer('LINESTRING(0 0,0 3)'::geometry,1,'endcap=round'),
                ST_Buffer('LINESTRING(6 0,6 3)'::geometry,1,'endcap=flat'),
             ST_Buffer('LINESTRING(12 0,12 3)'::geometry,1,'endcap=square');
    2
  • 3種串連樣式對比:
    SELECT ST_Buffer('LINESTRING(0 0,3 0,3 3)'::geometry,1.2,'join=round'),
             ST_Buffer('LINESTRING(6 0,9 0,9 3)'::geometry,1.2,'join=mitre'),
             ST_Buffer('LINESTRING(12 0,15 0,15 3)'::geometry,1.2,'join=bevel');
    3
  • 不同的mitre_limit對比:
    SELECT ST_Buffer('LINESTRING(0 0,3 0,3 3)'::geometry,1.2,'join=mitre mitre_limit=1.0'),
             ST_Buffer('LINESTRING(6 0,9 0,9 3)'::geometry,1.2,'join=mitre mitre_limit=0.5'),
             ST_Buffer('LINESTRING(12 0,15 0,15 3)'::geometry,1.2,'join=mitre mitre_limit=0.1');
    4
  • 不同Buffer位置對比:
    SELECT ST_Buffer('LINESTRING(0 0,3 0,3 3,0 3)'::geometry,1,'side=both'),
           ST_Buffer('LINESTRING(6 0,9 0,9 3,6 3)'::geometry,1,'side=right'),
           ST_Buffer('LINESTRING(12 0,15 0,15 3,12 3)'::geometry,1,'side=left');
    5