处理函数

本文介绍时空函数中的处理函数。

引擎与版本

处理函数仅适用于宽表引擎。无版本要求。

函数列表

Lindorm Ganos支持的处理函数如下表所示。

函数

说明

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 Ganos SQL中仅支持读取,不支持写入。

  • 函数ST_Collect和函数ST_Union可以相互替换来使用,但是有以下区别:

    • 函数ST_Collect的返回结果为Multi*或者GeometryCollection类型,而函数ST_Union的返回结果可能是单个Geometry对象。

    • 函数ST_Union在节点相交处分割LineString,而函数ST_Collect返回的是MultiLineString类型。

    • 一般情况下,ST_CollectST_Union函数计算速度快。因为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_Union函数计算速度快。因为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)) |
+---------------------------+