本文介紹時空函數中的處理函數。
引擎與版本
處理函數僅適用於寬表引擎。無版本要求。
函數列表
Lindorm GanosBase支援的處理函數如下表所示。
函數 | 說明 |
返回以指定點為中心點,以指定距離為半徑的所有點組成的Geometry對象。 | |
返回以指定點為中心點,以指定距離為半徑的所有點在球面上組成的Geometry對象。 | |
將兩個或者兩個以上的Geometry對象組合為Multi*(包括MultiPoint、MultiLineString、MultiPolygon)或者GeometryCollection對象並返回。 | |
返回Geometry對象A與Geometry對象B不相交的部分。 | |
返回Geometry對象A與Geometry對象B的交集對應的Geometry對象。 | |
返回包含指定Geometry對象的最小Circle Polygon對象。 | |
返回完全包含指定Geometry對象的最小圓形的半徑。 | |
將不合法的Geometry對象轉換為合法對象並返回。 | |
返回兩個或者兩個以上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_Collect
比ST_Union
Function 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_Collect
比ST_Union
Function 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)) |
+---------------------------+