全部產品
Search
文件中心

Lindorm:處理函數

更新時間:Oct 19, 2024

本文介紹時空函數中的處理函數。

引擎與版本

處理函數僅適用於寬表引擎。無版本要求。

函數列表

Lindorm GanosBase支援的處理函數如下表所示。

函數

說明

ST_Buffer

返回以指定點為中心點,以指定距離為半徑的所有點組成的Geometry對象。

ST_BufferSphere

返回以指定點為中心點,以指定距離為半徑的所有點在球面上組成的Geometry對象。

ST_Collect

將兩個或者兩個以上的Geometry對象組合為Multi*(包括MultiPoint、MultiLineString、MultiPolygon)或者GeometryCollection對象並返回。

ST_Difference

返回Geometry對象A與Geometry對象B不相交的部分。

ST_Intersection

返回Geometry對象A與Geometry對象B的交集對應的Geometry對象。

ST_MinimumBoundingCircle

返回包含指定Geometry對象的最小Circle Polygon對象。

ST_MinimumBoundingRadius

返回完全包含指定Geometry對象的最小圓形的半徑。

ST_MakeValid

將不合法的Geometry對象轉換為合法對象並返回。

ST_Union

返回兩個或者兩個以上Geometry對象並集後的Geometry對象。

ST_Buffer

返回以指定點為中心點,以指定距離為半徑的所有點組成的Geometry對象,距離的單位為degree。

文法

ST_Buffer(geometry g, double radius)

參數說明

參數

描述

g

指定的Geometry對象。

radius

指定的距離,即buffer半徑,單位為degree。

說明
  • Geometry對象支援Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon和GeometryCollection類型。

  • 如果指定的radius為正,返迴向外擴充後的Geometry對象。如果指定的radius為負,返迴向內收縮後的Geometry對象,返回結果可能為EMPTY。

  • 僅支援採用預設的buffer style,弧段分段數(quadrantSegments)預設值為8,端蓋樣式(endCapStyle)預設值為round。

樣本

  • 樣本1

    SELECT ST_AsText(ST_Buffer(ST_GeomFromText('POINT(120.18 30.25)'), 0.05)) AS buffer;

    返回結果:

    +--------------------------------+
    |             buffer             |
    +--------------------------------+
    | POLYGON ((120.23 30.25,        |
    | 120.22903926402017             |
    | 30.240245483899194,            |
    | 120.22619397662557             |
    | 30.230865828381745,            |
    | 120.22157348061513             |
    | 30.22222148834902,             |
    | 120.21535533905933             |
    | 30.21464466094067,             |
    | 120.20777851165099             |
    | 30.208426519384872,            |
    | 120.19913417161825             |
    | 30.203806023374437,            |
    | 120.18975451610082             |
    | 30.200960735979837, 120.18     |
    | 30.2, 120.1702454838992        |
    | 30.200960735979837,            |
    | 120.16086582838176             |
    | 30.203806023374437,            |
    | 120.15222148834903             |
    | 30.208426519384872,            |
    | 120.14464466094068             |
    | 30.21464466094067,             |
    | 120.13842651938488             |
    | 30.22222148834902,             |
    | 120.13380602337445             |
    | 30.230865828381745,            |
    | 120.13096073597984             |
    | 30.240245483899194,            |
    | 120.13000000000001             |
    | 30.25, 120.13096073597984      |
    | 30.259754516100806,            |
    | 120.13380602337445             |
    | 30.269134171618255,            |
    | 120.13842651938488             |
    | 30.27777851165098,             |
    | 120.14464466094068             |
    | 30.28535533905933,             |
    | 120.15222148834903             |
    | 30.291573480615128,            |
    | 120.16086582838176             |
    | 30.296193976625563,            |
    | 120.1702454838992              |
    | 30.299039264020163, 120.18     |
    | 30.3, 120.18975451610082       |
    | 30.299039264020163,            |
    | 120.19913417161825             |
    | 30.296193976625563,            |
    | 120.20777851165099             |
    | 30.291573480615128,            |
    | 120.21535533905933             |
    | 30.28535533905933,             |
    | 120.22157348061513             |
    | 30.27777851165098,             |
    | 120.22619397662557             |
    | 30.269134171618255,            |
    | 120.22903926402017             |
    | 30.259754516100806, 120.23     |
    | 30.25))                        |
    +--------------------------------+
  • 樣本2

    SELECT ST_AsText(ST_Buffer(ST_GeomFromText('LINESTRING (120.18 30.25, 120.16 30.23)'), 0.01)) AS buffer;

    返回結果:

    +--------------------------------+
    |             buffer             |
    +--------------------------------+
    | POLYGON ((120.16707106781186   |
    | 30.222928932188132,            |
    | 120.1655557023302              |
    | 30.221685303876974,            |
    | 120.16382683432364             |
    | 30.220761204674886,            |
    | 120.16195090322016             |
    | 30.220192147195966, 120.16     |
    | 30.22, 120.15804909677983      |
    | 30.22019214719597,             |
    | 120.15617316567635             |
    | 30.22076120467489,             |
    | 120.1544442976698              |
    | 30.221685303876978,            |
    | 120.15292893218813             |
    | 30.222928932188136,            |
    | 120.15168530387697             |
    | 30.224444297669805,            |
    | 120.15076120467488             |
    | 30.226173165676354,            |
    | 120.15019214719597             |
    | 30.22804909677984,             |
    | 120.14999999999999             |
    | 30.230000000000004,            |
    | 120.15019214719597             |
    | 30.231950903220163,            |
    | 120.15076120467488             |
    | 30.233826834323654,            |
    | 120.15168530387697             |
    | 30.2355557023302,              |
    | 120.15292893218813             |
    | 30.23707106781187,             |
    | 120.17292893218814             |
    | 30.257071067811868,            |
    | 120.17444429766981             |
    | 30.258314696123026,            |
    | 120.17617316567636             |
    | 30.259238795325114,            |
    | 120.17804909677984             |
    | 30.259807852804034, 120.18     |
    | 30.26, 120.18195090322017      |
    | 30.25980785280403,             |
    | 120.18382683432365             |
    | 30.25923879532511,             |
    | 120.1855557023302              |
    | 30.258314696123023,            |
    | 120.18707106781187             |
    | 30.257071067811864,            |
    | 120.18831469612303             |
    | 30.255555702330195,            |
    | 120.18923879532512             |
    | 30.253826834323647,            |
    | 120.18980785280404             |
    | 30.25195090322016,             |
    | 120.19000000000001             |
    | 30.249999999999996,            |
    | 120.18980785280404             |
    | 30.248049096779837,            |
    | 120.18923879532512             |
    | 30.246173165676346,            |
    | 120.18831469612303             |
    | 30.2444442976698,              |
    | 120.18707106781187             |
    | 30.242928932188132,            |
    | 120.16707106781186             |
    | 30.222928932188132))           |
    +--------------------------------+

ST_BufferSphere

返回以指定點為中心點,以指定距離為半徑的所有點在球面上組成的Geometry對象,距離的單位為米。

文法

ST_BufferSphere(geometry g, double radius)

參數說明

參數

描述

g

指定的Geometry對象。

radius

指定的距離,即buffer半徑,單位為米。

說明
  • Geometry對象支援Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon和GeometryCollection類型。

  • 如果指定的radius為正,返迴向外擴充後的Geometry對象。如果指定的radius為負,返迴向內收縮後的Geometry對象,返回結果可能為EMPTY。

  • 僅支援採用預設的buffer style,弧段分段數(quadrantSegments)預設值為8,端蓋樣式(endCapStyle)預設值為round。

樣本

  • 樣本1

    SELECT ST_AsText(ST_BufferSphere(ST_GeomFromText('POINT(120.18 30.25)'), 500)) AS buffer;

    返回結果:

    +--------------------------------+
    |             buffer             |
    +--------------------------------+
    | POLYGON ((120.1851909310331    |
    | 30.25011173053024,             |
    | 120.18511627294788             |
    | 30.249230378090658,            |
    | 120.18484500297895             |
    | 30.248378605521545,            |
    | 120.18438755060062             |
    | 30.247589145091563,            |
    | 120.1837614989031              |
    | 30.246892333708224,            |
    | 120.18299090835872             |
    | 30.24631494733322,             |
    | 120.18210539193977             |
    | 30.245879172318283,            |
    | 120.18113897716789             |
    | 30.24560175314354,             |
    | 120.18012879881775             |
    | 30.245493349257533,            |
    | 120.17911367245745             |
    | 30.245558125686234,            |
    | 120.17813260355221             |
    | 30.245793593106626,            |
    | 120.17722328930826             |
    | 30.246190703510113,            |
    | 120.17642067070908             |
    | 30.24673419777976,             |
    | 120.17575559027851             |
    | 30.247403191844143,            |
    | 120.17525360707266             |
    | 30.248171978919647,            |
    | 120.1749340144007              |
    | 30.249011017060198,            |
    | 120.17480909803247             |
    | 30.249888064116504,            |
    | 120.17488366345407             |
    | 30.250769416537622,            |
    | 120.17515485043153             |
    | 30.251621204446096,            |
    | 120.17561224212514             |
    | 30.252410693237966,            |
    | 120.17623826468355             |
    | 30.253107541687907,            |
    | 120.17700886207045             |
    | 30.253684968191145,            |
    | 120.17789442027193             |
    | 30.254120780286797,            |
    | 120.1788609054053              |
    | 30.25439822784955,             |
    | 120.17987117198402             |
    | 30.25450664710903,             |
    | 120.18088639100795             |
    | 30.254441870698788,            |
    | 120.18186754290468             |
    | 30.254206387939035,            |
    | 120.1827769178333              |
    | 30.25380924917365,             |
    | 120.1835795655716              |
    | 30.253265717837415,            |
    | 120.1842446391596              |
    | 30.252596683644782,            |
    | 120.18474658058295             |
    | 30.251827859488568,            |
    | 120.18506610289342             |
    | 30.250988792960012,            |
    | 120.1851909310331              |
    | 30.25011173053024))            |
    +--------------------------------+
  • 樣本2

    SELECT ST_AsText(ST_BufferSphere(ST_GeomFromText('LINESTRING (120.18 30.25, 120.16 30.23)'), 20)) AS buffer;

    返回結果:

    +--------------------------------+
    |             buffer             |
    +--------------------------------+
    | POLYGON ((120.1601568095326    |
    | 30.229881789491696,            |
    | 120.16012723865646             |
    | 30.22985749603038,             |
    | 120.16009277809007             |
    | 30.229838678911875,            |
    | 120.16005475213065             |
    | 30.229826061263992,            |
    | 120.16001462208855             |
    | 30.22982012797305,             |
    | 120.15997393013107             |
    | 30.229821107050387,            |
    | 120.15993424001891             |
    | 30.22982896087028,             |
    | 120.15989707701289             |
    | 30.229843387615915,            |
    | 120.15986386926043             |
    | 30.229863832877875,            |
    | 120.15983589291346             |
    | 30.229889510959428,            |
    | 120.15981422308717             |
    | 30.229919435069952,            |
    | 120.15979969254388             |
    | 30.22995245524614,             |
    | 120.15979285969011             |
    | 30.22998730254394,             |
    | 120.15979398711634             |
    | 30.23002263780298,             |
    | 120.15980303150468             |
    | 30.230057103109367,            |
    | 120.15981964529222             |
    | 30.230089373979652,            |
    | 120.15984319002649             |
    | 30.230118210260056,            |
    | 120.17984317814214             |
    | 30.250118233425205,            |
    | 120.17987275990819             |
    | 30.250142523059253,            |
    | 120.17990723145967             |
    | 30.250161335607235,            |
    | 120.17994526807108             |
    | 30.250173948109982,            |
    | 120.17998540801094             |
    | 30.250179875873307,            |
    | 120.18002610871608             |
    | 30.25017889109486,             |
    | 120.18006580607275             |
    | 30.25017103161881,             |
    | 120.18010297452594             |
    | 30.250156599481485,            |
    | 120.18013618570674             |
    | 30.25013614930418,             |
    | 120.18016416332479             |
    | 30.25011046697896,             |
    | 120.18018583221566             |
    | 30.250080539466826,            |
    | 120.18020035965924             |
    | 30.250047516868772,            |
    | 120.18020718737982             |
    | 30.25001266822753,             |
    | 120.18020605299972             |
    | 30.249977332758547,            |
    | 120.18019700012098             |
    | 30.2499428683844,              |
    | 120.18018037664854             |
    | 30.249910599550603,            |
    | 120.1801568214192              |
    | 30.249881766327974,            |
    | 120.1601568095326              |
    | 30.229881789491696))           |
    +--------------------------------+

ST_Collect

將兩個或者兩個以上的Geometry對象組合為Multi*(包括MultiPoint、MultiLineString、MultiPolygon)或者GeometryCollection對象並返回。

文法

ST_Collect(geometry geomA, geometry geomB)
ST_Collect(geometry geomA, geometry geomB, ...,geometry geomN)

參數說明

參數

描述

geomA

指定的第一個Geometry對象。

geomB

指定的第二個Geometry對象。

geomN

指定的第N個Geometry對象。

說明
  • 函數ST_Collect返回結果為Multi*或者GeometryCollection類型,在Lindorm GanosBase SQL中僅支援讀取,不支援寫入。

  • 函數ST_Collect和函數ST_Union可以相互替換來使用,但是有以下區別:

    • 函數ST_Collect的返回結果為Multi*或者GeometryCollection類型,而函數ST_Union的返回結果可能是單個Geometry對象。

    • 函數ST_Union在節點相交處分割LineString,而函數ST_Collect返回的是MultiLineString類型。

    • 一般情況下,ST_CollectST_UnionFunction Compute速度快。因為ST_Collect不會分解輸入的Geometry對象的邊界或者檢查MultiPolygon對象是否有重疊部分,只是把輸入的多個Geometry對象組合成一個Multi*類型,或者把Multi*類型組合成一個GeometryCollection集合類型。

樣本

  • 樣本1:返回MultiPoint對象。

    SELECT ST_AsText(ST_Collect(ST_MakePoint(0,0),ST_MakePoint(0,1))) AS g;

    返回結果:

    +---------------------------+
    |             g             |
    +---------------------------+
    | MULTIPOINT ((0 0), (0 1)) |
    +---------------------------+
  • 樣本2:返回GeometryCollection對象。

    SELECT ST_AsText(ST_Collect(ST_MakePoint(0,0),ST_GeomFromText('LINESTRING(0 2,0 3)'))) AS g;

    返回結果:

    +--------------------------------+
    |               g                |
    +--------------------------------+
    | GEOMETRYCOLLECTION (POINT (0   |
    | 0), LINESTRING (0 2, 0 3))     |
    +--------------------------------+

ST_Difference

返回Geometry對象A與Geometry對象B不相交的部分。

文法

ST_Difference(geometry geomA, geometry geomB)

參數說明

參數

描述

geomA

指定的第一個Geometry對象。

geomB

指定的第二個Geometry對象。

說明
  • Geometry對象支援Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon和GeometryCollection類型。

  • 如果Geometry對象A完全被Geometry對象B包含或者Geometry對象A為EMPTY,那麼返回一個空幾何類型。

  • 如果指定的Polygon類型自身存在相交邊,那麼可能無法返回結果。

  • 該函數的傳回值與輸入對象的順序有關。

樣本

SELECT ST_AsText(ST_Difference(ST_GeomFromText('LINESTRING(50 100, 50 200)'),ST_GeomFromText('LINESTRING(50 50, 50 150)'))) AS diff;

返回結果:

+-----------------------------+
|            diff             |
+-----------------------------+
| LINESTRING (50 150, 50 200) |
+-----------------------------+

ST_Intersection

返回Geometry對象A與Geometry對象B的交集對應的Geometry對象。

文法

ST_Intersection(geometry geomA, geometry geomB)

參數說明

參數

描述

geomA

指定的第一個Geometry對象。

geomB

指定的第二個Geometry對象。

說明
  • Geometry對象支援Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon和GeometryCollection類型。

  • 兩個Geometry對象中任意一個為EMPTY,那麼傳回值也是EMPTY。

  • 如果指定的Polygon類型自身存在相交邊,那麼可能無法返回結果。

樣本

SELECT ST_AsText(ST_Intersection(ST_GeomFromText('POINT(0 0)'), ST_GeomFromText('LINESTRING ( 0 0, 0 2 )'))) AS inter;

返回結果:

+-------------+
|    inter    |
+-------------+
| POINT (0 0) |
+-------------+

ST_MinimumBoundingCircle

返回包含指定Geometry對象的最小Circle Polygon對象。

文法

ST_MinimumBoundingCircle(geometry g)

參數說明

參數

描述

g

指定的Geometry對象。

說明

ST_MinimumBoundingCircle函數通常用於處理Multi*(包括MultiPoint、MultiLineString、MultiPolygon)或者GeometryCollection對象。雖然該函數不是一個彙總函式,但是您可以使用ST_Collect函數擷取多個Geometry對象集合的最小包圍圈,即ST_MinimumBoundingCircle(ST_Collect(geometry geomA, geometry geomB, geometry geomC, ...))

樣本

SELECT ST_AsText(ST_MinimumBoundingCircle(ST_GeomFromText('POLYGON((0 0,1 0,1 1,0 1,0 0))'))) AS g;

返回結果:

+--------------------------------+
|               g                |
+--------------------------------+
| POLYGON ((1.2071067811865475   |
| 0.5, 1.1935199226610738        |
| 0.3620503103585285,            |
| 1.1532814824381883             |
| 0.2294019499269015,            |
| 1.0879378012096794             |
| 0.1071525208064489, 1          |
| 0, 0.8928474791935512          |
| -0.0879378012096794,           |
| 0.7705980500730986             |
| -0.1532814824381883,           |
| 0.6379496896414716             |
| -0.1935199226610738,           |
| 0.5 -0.2071067811865476,       |
| 0.3620503103585285             |
| -0.1935199226610738,           |
| 0.2294019499269015             |
| -0.1532814824381883,           |
| 0.107152520806449              |
| -0.0879378012096794,           |
| 0 -0.0000000000000001,         |
| -0.0879378012096794            |
| 0.1071525208064489,            |
| -0.1532814824381883            |
| 0.2294019499269014,            |
| -0.1935199226610738            |
| 0.3620503103585282,            |
| -0.2071067811865476            |
| 0.4999999999999999,            |
| -0.1935199226610738            |
| 0.6379496896414716,            |
| -0.1532814824381884            |
| 0.7705980500730985,            |
| -0.0879378012096795            |
| 0.892847479193551,             |
| -0.0000000000000001            |
| 1, 0.1071525208064489          |
| 1.0879378012096794,            |
| 0.2294019499269011             |
| 1.1532814824381883,            |
| 0.3620503103585282             |
| 1.1935199226610735,            |
| 0.4999999999999999             |
| 1.2071067811865475,            |
| 0.6379496896414716             |
| 1.1935199226610738,            |
| 0.7705980500730987             |
| 1.1532814824381883,            |
| 0.8928474791935508             |
| 1.0879378012096796,            |
| 0.9999999999999999             |
| 1, 1.0879378012096794          |
| 0.892847479193551,             |
| 1.1532814824381883             |
| 0.7705980500730989,            |
| 1.1935199226610735             |
| 0.6379496896414718,            |
| 1.2071067811865475 0.5))       |
+--------------------------------+

ST_MinimumBoundingRadius

返回完全包含指定Geometry對象的最小圓形的半徑。

文法

ST_MinimumBoundingRadius(geometry g)

參數說明

參數

描述

g

指定的Geometry對象。

說明
  • 返回時預設支援DOUBLE資料類型,最多可輸出小數點後16位。

  • 該函數可以與ST_Collect函數組合使用,來擷取一組Geometry對象的最小包圍圈。

樣本

SELECT ST_MinimumBoundingRadius(ST_GeomFromText('POLYGON((0 1,-1 0,0 -1,1 0,0 1))')) AS radius;

返回結果:

+----------+
|  radius  |
+----------+
|   1.0    |
+----------+

ST_MakeValid

將不合法的Geometry對象轉換為合法對象並返回。

文法

geometry ST_MakeValid(geometry g)

參數說明

參數

描述

g

目標Geometry對象。

說明
  • ST_MakeValid函數可以將自相交的Polygon對象切分成由多個Polygon對象組成的MultiPolygon對象。

  • 對於有Polygon對象重疊的MultiPolygon對象,ST_MakeValid函數可以對重疊的Polygon對象計算並集,並將重疊的Polygon對象合并成一個。

樣本

  • 樣本1:將有自相交情況的Polygon對象轉化成無自相交的MultiPolygon對象。

    SELECT ST_AsText(geom) as original, ST_AsText(ST_MakeValid(geom)) AS validated FROM mapdata WHERE id=10000001;

    返回結果:

    +--------------------------------+--------------------------------+
    |            original            |           validated            |
    +--------------------------------+--------------------------------+
    | POLYGON ((0 0, 10 10, 0 10, 10 | MULTIPOLYGON (((0 0, 5 5, 10   |
    | 0, 0 0))                       | 0, 0 0)), ((5 5, 0 10, 10 10,  |
    |                                | 5 5)))                         |
    +--------------------------------+--------------------------------+
  • 樣本2:將有重疊的MultiPolygon對象轉化成計算並集後的Polygon對象。

    SELECT ST_AsText(geom) as original, ST_AsText(ST_MakeValid(geom)) AS validated FROM mapdata WHERE adcode=10000002;

    返回結果:

    +--------------------------------+--------------------------------+
    |            original            |           validated            |
    +--------------------------------+--------------------------------+
    | MULTIPOLYGON (((0 0, 5 6, 10   | POLYGON ((4.166666666666667    |
    | 0, 0 0)), ((5 4, 0 10, 10 10,  | 5, 0 10, 10 10,                |
    | 5 4)))                         | 5.833333333333333 5, 10 0, 0   |
    |                                | 0, 4.166666666666667 5))       |
    +--------------------------------+--------------------------------+

ST_Union

返回兩個或者兩個以上Geometry對象並集後的Geometry對象。

文法

ST_Union(geometry g1, geometry g2, ..., geometry gn)
說明

函數輸出類型可以是Multi*(包括MultiPoint、MultiLineString、MultiPolygon)、非Multi*或者GeometryCollection。

參數說明

參數

描述

g1

指定的第一個Geometry對象。

g2

指定的第二個Geometry對象。

gn

指定的第n個Geometry對象。

說明
  • Geometry對象支援Point、LineString、Polygon類型。

  • 該函數的輸入方式分為以下兩種形式:

    • 輸入參數為兩個Geometry對象時,輸出類型可能是Multi*、非Multi*或者GeometryCollection。如果任意一個Geometry對象為NULL,則傳回值也是NULL。如果其中一個Geometry對象為EMPTY,則傳回值為另一個Geometry對象。

    • 輸入參數為兩個以上的Geometry對象時,輸出類型可能是Multi*或者非Multi*。

  • 函數ST_Collect和函數ST_Union可以相互替換來使用。一般情況下,ST_CollectST_UnionFunction Compute速度快。因為ST_Collect不會分解輸入的Geometry對象的邊界或者檢查MultiPolygon對象是否有重疊部分。

  • 如果指定的Polygon類型自身存在相交邊,那麼可能無法返回結果。

樣本

SELECT ST_AsText(ST_Union(ST_MakePoint(1.0, 1.0), ST_MakePoint(2.0, 2.0))) AS u;

返回結果:

+---------------------------+
|             u             |
+---------------------------+
| MULTIPOINT ((1 1), (2 2)) |
+---------------------------+