PostGIS的Spatial Relationships and Measurements 空间关系与测量:5

33. ST_DFullyWithin

ST_DFullyWithin -如果所有的几何图形在指定的距离内,返回true

33.1. 概要

boolean ST_DFullyWithin(geometry g1, geometry g2, double precision distance);

33.2. 描述

如果几何图形完全在彼此的指定距离内,则返回true。 距离用几何图形的空间参考系统定义的单位指定。 为了使这个函数有意义,源几何图形必须具有相同的坐标投影,具有相同的SRID。

  • 这个函数调用将自动包含一个边界框比较,它将利用几何图形上可用的任何索引。

33.3. 样例

SELECT ST_DFullyWithin(geom_a, geom_b, 10) as DFullyWithin10, 
       ST_DWithin(geom_a, geom_b, 10) as DWithin10, 
       ST_DFullyWithin(geom_a, geom_b, 20) as DFullyWithin20 from
(select ST_GeomFromText('POINT(1 1)') as geom_a,ST_GeomFromText('LINESTRING(1 5, 2 7, 1 9, 14 12)') as geom_b) t1;
DFullyWithin10DWithin10DFullyWithin20
ftt

34. ST_DWithin

ST_DWithin -如果几何图形之间的距离在指定的范围内,返回true。 因为几何单位是在那些空间参考和地理单位是米和测量默认为use_spheroid=真(测量围绕球体),为了更快的检查,use_spheroid=假沿球体测量。

34.1. 概要

boolean ST_DWithin(geometry g1, geometry g2, double precision distance_of_srid);
boolean ST_DWithin(geography gg1, geography gg2, double precision distance_meters);
boolean ST_DWithin(geography gg1, geography gg2, double precision distance_meters, boolean use_spheroid);

34.2. 描述

如果几何图形之间的距离在指定的范围内,则返回true。
对于几何学:距离以几何学的空间参考系统定义的单位指定。 为了使这个函数有意义,源几何图形必须具有相同的坐标投影,具有相同的SRID。
因为地理单位是米,测量默认为use_spheroid=true,为了更快的检查,use_spheroid=false测量沿球。

  • 这个函数调用将自动包含一个边界框比较,它将利用几何图形上可用的任何索引。
  • 在1.3之前,ST_Expand通常与&&和ST_Distance一起使用以达到相同的效果,在1.3.4之前,这个函数基本上是该构造的简写。 从1.3.4开始,ST_DWithin使用了一个更短的距离函数,这应该使它在更大的缓冲区中比以前的版本更有效。

34.3. 样例

-- 找到离每个学校最近的医院  
-- 距离学校3000个单位以内。  
-- 我们做一个ST_DWithin搜索,利用索引来限制我们的搜索列表  
-- 不可索引的ST_Distance需要处理  
-- 如果空间参考的单位是米,那么单位就是米  
SELECT DISTINCT ON (s.gid) s.gid, s.school_name, s.geom, h.hospital_name FROM schools s
    LEFT JOIN hospitals h ON ST_DWithin(s.the_geom, h.geom, 3000)
    ORDER BY s.gid, ST_Distance(s.geom, h.geom);

-- 没有医院的学校  
-- 查找3000单位内所有没有医院的学校  
-- 远离学校。 单位为空间ref的单位(例如米,英尺,度)  
SELECT s.gid, s.school_name
    FROM schools s
    LEFT JOIN hospitals h ON ST_DWithin(s.geom, h.geom, 3000)
    WHERE h.gid IS NULL;

-- 寻找距离有限的接收机可以接收到的广播发射塔。  
-- 数据是球形墨卡托(SRID=3857)的几何形状,范围是近似的。  
-- 创建几何索引来检查用户与塔的接近限制  
CREATE INDEX ON broadcasting_towers using gist (geom);

-- 创建几何索引来检查塔与用户的接近限制  
CREATE INDEX ON broadcasting_towers using gist (ST_Expand(geom, sending_range));

-- 明斯克黑客空间的4公里接收器可以得到的查询塔  
-- 注意:两个条件,因为更短的最小(b。 Sending_range, 4000)将不使用索引。 
SELECT b.tower_id, b.geom
    FROM broadcasting_towers b
    WHERE ST_DWithin(b.geom, 'SRID=3857;POINT(3072163.4 7159374.1)', 4000)
            AND ST_DWithin(b.geom, 'SRID=3857;POINT(3072163.4 7159374.1)', b.sending_range);

35. ST_Equals

ST_Equals -如果给定的几何图形表示相同的几何图形,返回true。 方向被忽略。

35.1. 概要

boolean ST_Equals(geometry A, geometry B);

35.2. 描述

如果给定的几何图形在空间上相等,则返回TRUE。 用这个来得到比“=”更好的答案。 注意,空间相等是指ST_Within(A,B) = true和ST_Within(B,A) = true,也意味着点的顺序可以不同,但代表相同的几何结构。 要验证点的顺序是否一致,请使用ST_OrderingEquals(必须注意,ST_OrderingEquals比简单地验证点的顺序要严格一些)。

  • 如果任意一个几何形状无效,这个函数将返回false,除非它们是二进制相等的。
  • 不要将GEOMETRYCOLLECTION作为参数调用。

35.3. 样例

SELECT ST_Equals(ST_GeomFromText('LINESTRING(0 0, 10 10)'),
                 ST_GeomFromText('LINESTRING(0 0, 5 5, 10 10)'));
st_equals
t
SELECT ST_Equals(ST_Reverse(ST_GeomFromText('LINESTRING(0 0, 10 10)')),
                 ST_GeomFromText('LINESTRING(0 0, 5 5, 10 10)'));
st_equals
t

36. ST_GeometricMedian

ST_GeometricMedian -返回MultiPoint的几何中值。

36.1. 概要

geometry ST_GeometricMedian ( geometry g , float8 tolerance , int max_iter , boolean fail_if_not_converged );

36.2. 描述

使用Weiszfeld算法计算多点几何的近似几何中值。 几何中位数提供了对离群点比质心更不敏感的中心性度量。
该算法将迭代,直到连续迭代之间的距离变化小于提供的公差参数eter。 如果在max_iterations迭代之后没有满足这个条件,函数将产生一个错误并退出,除非fail_if_not_converged被设置为false。
如果没有提供公差值,将根据输入几何图形的范围计算默认公差值。 如果存在点的M值,则解释为它们的相对权重

  • 这个函数支持3d,不会删除z-index。
  • 这个函数支持M坐标。

36.3. 样例

  • 比较四点多点(黄点)的质心(绿松石点)和几何中值(红点)。
WITH test AS (
    SELECT 'MULTIPOINT((0 0), (1 1), (2 2), (200 200))'::geometry geom)
    SELECT ST_AsText(ST_Centroid(geom)) centroid,
           ST_AsText(ST_GeometricMedian(geom)) median
FROM test;

centroidmedian
POINT(50.75 50.75)POINT(1.9761550281255 1.9761550281255)

在这里插入图片描述

37. ST_HasArc

ST_HasArc -如果几何体或几何体集合包含圆形字符串则返回true

37.1. 概要

boolean ST_HasArc(geometry geomA);

37.2. 描述

如果几何体或几何体集合包含圆弧,则返回true

  • 这个函数支持3d,不会删除z-index
  • 这个函数支持M坐标。

37.3. 样例

SELECT ST_HasArc(ST_Collect('LINESTRING(1 2, 3 4, 5 6)', 'CIRCULARSTRING(1 1, 2 3, 4 5, 6 7, 5 6)'));
st_hasarc
t

38. ST_Intersects

ST_Intersects -如果几何/地理“在2D空间中相交”返回TRUE(共享空间的任何部分),如果它们没有相交(它们是不相交的)返回FALSE。 地理公差为0.00001米(所以任何靠近的点都被认为是相交的)

38.1. 概要

boolean ST_Intersects( geometry geomA , geometry geomB );
boolean ST_Intersects( geography geogA , geography geogB );

38.2. 描述

如果一个几何学或地理学共享空间的任何部分,那么它们就相交。 地理公差为0.00001米(所以任何靠近的点都被认为是相交的)
重叠,触摸,在所有暗示空间交叉。 如果上述任何一个返回true,则几何图形也在空间上相交。 Disjoint表示空间交叉为假。

  • 由GEOS模块执行(用于几何),地理是原生的
  • 这个函数调用将自动包含一个边界框比较,它将利用几何图形上可用的任何索引。
  • 对于地理,该函数的距离公差约为0.00001米,并使用球体而不是椭球体计算。
  • 注意:这是“允许的”版本,返回布尔值,而不是整数

38.3. 样例

SELECT ST_Intersects('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )'::geometry);
st_intersects
f
SELECT ST_Intersects('POINT(0 0)'::geometry, 'LINESTRING ( 0 0, 0 2 )'::geometry);
st_intersects
t
SELECT ST_Intersects(
            ST_GeographyFromText('SRID=4326;LINESTRING(-43.23456 72.4567,-43.23456 72.4568)'),
            ST_GeographyFromText('SRID=4326;POINT(-43.23456 72.4567772)'));
st_intersects
t

39. ST_Length

`ST_Length` -如果是LineStringMultiLineString,返回几何图形的2D长度。 几何是空间参考的单位,地理是米(默认球体)  

39.1. 概要

float ST_Length(geometry a_2dlinestring);
float ST_Length(geography geog, boolean use_spheroid=true)

39.2. 描述

对于几何图形:如果是LineString、MultiLineString、ST_Curve、st_multiccurve,则返回几何图形的2D笛卡尔长度。 对于面积几何图形返回0。 对于面积几何使用ST_Perimeter。 对于几何类型,长度度量单位由几何的空间参考系统指定。

对于地理类型,使用反测地线问题进行计算,其中长度单位为米。 如果PostGIS使用PROJ版本4.8.0或更高版本编译,则椭球体由SRID指定,否则为WGS84专有。 如果use_spheroid=false,那么计算将近似一个球体而不是一个球体。

目前对于几何,这是ST_Length2D的别名,但这可能会改变以支持更高的维度。

  • 在以前的版本中,将此应用到MULTI/POLYGON的地理类型会给你多边形/MULTIPOLYGON的周长。 在2.0.0中,这被修改为返回0以符合几何行为。 如果你想要一个多边形的周长,请使用ST_Perimeter
  • 对于地理测量,默认采用球面测量。 要使用更快更不精确的球体,请使用ST_Length(gg,false);

39.3. 样例

  • 返回线字符串的长度(以英尺为单位)。注意,这是以英尺为单位的,因为EPSG:2249是马萨诸塞州的飞机英尺
SELECT ST_Length(ST_GeomFromText('LINESTRING(743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416)',2249));
st_length
122.630744000095
  • 将WGS 84 LineString转换为马萨诸塞州平面米
SELECT ST_Length(ST_Transform(ST_GeomFromEWKT('SRID=4326;LINESTRING(-72.1260 42.45, -72.1240 42.45666, -72.123 42.1546)'),26986));
st_length
34309.4563576191
  • WGS 84地理线的返回长度,默认的计算是使用球体而不是椭球体
SELECT ST_Length(the_geog) As length_spheroid, ST_Length(the_geog,false) As length_sphere
    FROM (SELECT ST_GeographyFromText('SRID=4326;LINESTRING(-72.1260 42.45, -72.1240 42.45666, -72.123 42.1546)') As the_geog)As foo;
length_spheroidlength_sphere
34310.570362728834346.2060960742

40. ST_Length2D

ST_Length2D -如果是linestring或multi-linestring,返回几何图形的2维长度。 这是ST_Length的别名

40.1. 概要

float ST_Length2D(geometry a_2dlinestring);

40.2. 描述

如果是linestring或多linestring,则返回几何图形的二维长度。 这是ST_Length的别名

41. ST_3DLength

ST_3DLength -如果是linestring或multilinestring,返回几何图形的三维或二维长度。

41.1. 概要

float ST_3DLength(geometry a_3dlinestring);

41.2. 描述

如果是linestring或多linestring,则返回几何图形的3维或2维长度。 对于2-d行,它只返回2-d长度(与ST_Length和ST_Length2D相同)

41.3. 样例

SELECT ST_3DLength(ST_GeomFromText('LINESTRING(743238 2967416 1,743238 2967450 1,743265 2967450 3,743265.625 2967416 3,743238 2967416 3)',2249));
ST_3DLength
122.704716741457

42. ST_LengthSpheroid

ST_LengthSpheroid -计算一个椭球面上的几何图形的2D或3D长度/周长。 如果几何体的坐标是经度/纬度,并且需要长度而不需要重新投影,这是有用的。

42.1. 概要

float ST_LengthSpheroid(geometry a_geometry, spheroid a_spheroid);

42.2. 描述

计算一个椭球上的几何长度/周长。 这是有用的,如果几何坐标是在龙的纬度/纬度和长度是想要没有重新投影。 椭球是一个单独的数据库类型,可以构造为
如下:

SPHEROID[<NAME>,<SEMI-MAJOR AXIS>,<INVERSE FLATTENING>]
SPHEROID["GRS_1980",6378137,298.257222101]

42.3. 样例

SELECT ST_LengthSpheroid( the_geom, sph_m ) As tot_len,
    ST_LengthSpheroid(ST_GeometryN(the_geom,1), sph_m) As len_line1,
    ST_LengthSpheroid(ST_GeometryN(the_geom,2), sph_m) As len_line2
FROM (SELECT ST_GeomFromText('MULTILINESTRING((-118.584 38.374,-118.583 38.5),(-71.05957 42.3589 , -71.061 43))') As the_geom,
            CAST('SPHEROID["GRS_1980",6378137,298.257222101]' As spheroid) As sph_m) as foo;
tot_lenlen_line1len_line2
85204.520756295513986.872522930971217.6482333646
SELECT ST_LengthSpheroid( the_geom, sph_m ) As tot_len,
    ST_LengthSpheroid(ST_GeometryN(the_geom,1), sph_m) As len_line1,
    ST_LengthSpheroid(ST_GeometryN(the_geom,2), sph_m) As len_line2
FROM (SELECT ST_GeomFromEWKT('MULTILINESTRING((-118.584 38.374 20,-118.583 38.5 30) ,(-71.05957 42.3589 75, -71.061 43 90))') As the_geom,
            CAST('SPHEROID["GRS_1980",6378137,298.257222101]' As spheroid) As sph_m) as foo;
tot_lenlen_line1len_line2
85204.525910740213986.87609771171217.6498130292

43. ST_Length2D_Spheroid

ST_Length2D_Spheroid -计算一个椭球面上的几何图形的2D长度/周长。 如果几何体的坐标是经度/纬度,并且需要长度而不需要重新投影,这是有用的。

43.1. 概要

float ST_Length2D_Spheroid(geometry a_geometry, spheroid a_spheroid);

43.2. 描述

计算二维长度/周长的几何椭球。 如果几何体的坐标是经度/纬度,并且需要长度而不需要重新投影,这是有用的。 椭球是一个单独的数据库类型,可以构造如下:

SPHEROID[<NAME>,<SEMI-MAJOR AXIS>,<INVERSE FLATTENING>]
SPHEROID["GRS_1980",6378137,298.257222101]

43.3. 样例

SELECT ST_Length2D_Spheroid( the_geom, sph_m ) As tot_len,
        ST_Length2D_Spheroid(ST_GeometryN(the_geom,1), sph_m) As len_line1,
        ST_Length2D_Spheroid(ST_GeometryN(the_geom,2), sph_m) As len_line2
FROM (SELECT ST_GeomFromText('MULTILINESTRING((-118.584 38.374,-118.583 38.5),(-71.05957 42.3589 , -71.061 43))') As the_geom,
            CAST('SPHEROID["GRS_1980",6378137,298.257222101]' As spheroid) As sph_m) as foo;
tot_lenlen_line1len_line2
85204.520756295513986.872522930971217.6482333646
SELECT ST_Length2D_Spheroid( the_geom, sph_m ) As tot_len,
        ST_Length2D_Spheroid(ST_GeometryN(the_geom,1), sph_m) As len_line1,
        ST_Length2D_Spheroid(ST_GeometryN(the_geom,2), sph_m) As len_line2
FROM (SELECT ST_GeomFromEWKT('MULTILINESTRING((-118.584 38.374 20,-118.583 38.5 30) ,(-71.05957 42.3589 75, -71.061 43 90))') As the_geom,
            CAST('SPHEROID["GRS_1980",6378137,298.257222101]' As spheroid) As sph_m) as foo;
tot_lenlen_line1len_line2
85204.520756295513986.872522930971217.6482333646

44. ST_LongestLine

ST_LongestLine -返回两个几何图形的2维最长线点。 如果多于一行,函数只返回函数找到的最长的一行。 返回的行总是从g1开始到g2结束。 这个函数返回的行长度将始终与g1和g2的st_maxdistance返回的相同。

44.1. 概要

geometry ST_LongestLine(geometry g1, geometry g2);

44.2. 样例

  • 点与线之间最长的线
SELECT ST_AsText(ST_LongestLine('POINT(100 100)':: geometry,'LINESTRING (20 80, 98 190, 110 180, 50 75 )'::geometry)) As lline;
lline
LINESTRING(100 100,98 190)

在这里插入图片描述

  • 多边形与多边形之间的最长线
SELECT ST_AsText(ST_LongestLine(ST_GeomFromText('POLYGON ((175 150, 20 40,50 60, 125 100, 175 150))'),
        ST_Buffer(ST_GeomFromText ('POINT(110 170)'), 20))) As llinewkt;
lline
LINESTRING(20 40,121.111404660392 186.629392246051)

在这里插入图片描述

  • 从优雅城市的一部分到另一部分的最长直线距离注:最大距离=线路长度。
SELECT ST_AsText(ST_LongestLine(c.the_geom, c.the_geom)) As llinewkt,
        ST_MaxDistance(c.the_geom,c.the_geom) As max_dist,
        ST_Length(ST_LongestLine(c.the_geom, c.the_geom)) As lenll
FROM (SELECT ST_BuildArea(ST_Collect(the_geom)) As the_geom
        FROM (SELECT ST_Translate(ST_SnapToGrid(ST_Buffer(ST_Point(50 ,generate_series (50,190, 50)),40, 'quad_segs=2'),1), x, 0) As the_geom
                FROM generate_series(1,100,50) As x) AS foo) As c;
llinewktmax_distlenll
LINESTRING(23 22,129 178)188.605408193933188.605408193933

45. ST_OrderingEquals

ST_OrderingEquals -如果给定的几何图形表示相同的几何图形,并且点的方向顺序相同,则返回true。

45.1. 概要

boolean ST_OrderingEquals(geometry A, geometry B);

45.2. 描述

ST_OrderingEquals比较两个几何图形,如果两个几何图形相等且坐标顺序相同,则返回t (TRUE); 否则返回f (FALSE)。

  • 这个函数是按照ArcSDE SQL规范而不是SQL- mm实现的。 http://edndoc.esri.com/arcsde/9.1/sql_api/sqlapi3.htm#ST_OrderingEquals

45.3. 样例

SELECT ST_OrderingEquals(ST_GeomFromText('LINESTRING(0 0, 10 10)'),ST_GeomFromText('LINESTRING(0 0, 5 5, 10 10)'));
st_orderingequals
f
SELECT ST_OrderingEquals(ST_GeomFromText('LINESTRING(0 0, 10 10)'),ST_GeomFromText('LINESTRING(0 0, 0 0, 10 10)'));
st_orderingequals
t
SELECT ST_OrderingEquals(ST_Reverse(ST_GeomFromText('LINESTRING(0 0, 10 10)')),ST_GeomFromText('LINESTRING(0 0, 0 0, 10 10)'));
st_orderingequals
f

46. ST_Overlaps

ST_Overlaps -如果几何图形共享空间,具有相同的维度但彼此不完全包含,则返回TRUE。

46.1. 概要

boolean ST_Overlaps(geometry A, geometry B);

46.2. 描述

如果几何图形“在空间上重叠”返回TRUE。 我们的意思是它们相交,但一个并不完全包含另一个。 由GEOS模块执行

这个函数调用将自动包含一个边界框比较,它将利用几何图形上可用的任何索引。 要避免使用索引,请使用_ST_Overlaps函数。

注意:这是“允许的”版本,返回布尔值,而不是整数。

46.3. 样例

  • 直线上的点被直线所包含,其维数较低,因此不与直线重叠也不交叉
SELECT ST_Overlaps(a,b) As a_overlap_b,
        ST_Crosses(a,b) As a_crosses_b,
        ST_Intersects(a, b) As a_intersects_b, ST_Contains(b,a) As b_contains_a
    FROM (SELECT ST_GeomFromText('POINT(1 0.5)') As a, ST_GeomFromText('LINESTRING(1 0, 1 1, 3 5)') As b) As foo
a_overlap_ba_crosses_ba_intersects_bb_contains_a
fftt
-- 部分包含圆,但不完全定义为相交和交叉的线,  
-- 但因为维度不同,所以没有重叠  

SELECT ST_Overlaps(a,b) As a_overlap_b, ST_Crosses(a,b) As a_crosses_b,
        ST_Intersects(a, b) As a_intersects_b,
        ST_Contains(a,b) As a_contains_b
    FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 0.5)'), 3) As a, ST_GeomFromText('LINESTRING(1 0, 1 1, 3 5)') As b)As foo;
a_overlap_ba_crosses_ba_intersects_ba_contains_b
fttf
-- 一个与圆相交的二维弯曲热狗(又名缓冲线串),  
-- 但不完全包含在圆内,因为它们的维度相同,所以被定义为重叠,  
-- 但它不相交,因为2的交点具有相同的维度  
-- 为2的最大尺寸  

SELECT ST_Overlaps(a,b) As a_overlap_b, 
        ST_Crosses(a,b) As a_crosses_b, 
        ST_Intersects(a, b) As a_intersects_b,
        ST_Contains(b,a) As b_contains_a,
        ST_Dimension(a) As dim_a,
        ST_Dimension(b) as dim_b,
        ST_Dimension(ST_Intersection(a,b)) As dima_intersection_b
FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 0.5)'), 3) As a,ST_Buffer(ST_GeomFromText('LINESTRING(1 0, 1 1, 3 5)'),0.5) As b)As foo;
a_overlap_ba_crosses_ba_intersects_bb_contains_adim_adim_bdima_intersection_b
tftf222

47. ST_Perimeter

ST_Perimeter -返回ST_Surface或ST_MultiSurface几何或地理的边界长度测量值。 (Polygon, MultiPolygon)。 几何测量以空间参考为单位,地理测量以米为单位。

47.1. 概要

float ST_Perimeter(geometry g1);
float ST_Perimeter(geography geog, boolean use_spheroid=true);

47.2. 描述

如果它是一个ST_Surface, ST_MultiSurface (Polygon, MultiPolygon),返回几何/地理的2D周长。 对于非区域几何图形返回0。 对于线性几何图形,使用ST_Length。 对于几何类型,周长度量单位由几何的空间参考系统指定。
对于地理类型,使用反测地线问题进行计算,其中周长单位为米。 如果PostGIS使用PROJ版本4.8.0或更高版本编译,则椭球体由SRID指定,否则为WGS84专有。 如果use_spheroid=false,那么计算将近似一个球体而不是一个球体。

47.3. 样例

  • 返回周长英尺为多边形和多多边形。 注意这是英尺,因为EPSG:2249是马萨诸塞州的PlaneFeet
SELECT ST_Perimeter(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416))', 2249));
st_perimeter
122.630744000095
SELECT ST_Perimeter(ST_GeomFromText('MULTIPOLYGON(((763104.471273676 2949418.44119003,
763104.477769673 2949418.42538203,
763104.189609677 2949418.22343004,763104.471273676 2949418.44119003)),
((763104.471273676 2949418.44119003,763095.804579742 2949436.33850239,
763086.132105649 2949451.46730207,763078.452329651 2949462.11549407,
763075.354136904 2949466.17407812,763064.362142565 2949477.64291974,
763059.953961626 2949481.28983009,762994.637609571 2949532.04103014,
762990.568508415 2949535.06640477,762986.710889563 2949539.61421415,
763117.237897679 2949709.50493431,763235.236617789 2949617.95619822,
763287.718121842 2949562.20592617,763111.553321674 2949423.91664605,
763104.471273676 2949418.44119003)))', 2249));
st_perimeter
845.227713366825
  • 返回周长米和英尺为多边形和多多边形。 注意这是地理(WGS 84 long lat)
SELECT ST_Perimeter(geog) As per_meters, ST_Perimeter(geog)/0.3048 As per_ft
        FROM ST_GeogFromText('POLYGON((-71.1776848522251 42.3902896512902,-71.1776843766326 42.3903829478009,-71.1775844305465 42.3903826677917,-71.1775825927231 42.3902893647987,-71.1776848522251 42.3902896512902))') As geog;

per_metersper_ft
37.3790462565251122.634666195949
SELECT ST_Perimeter(geog) As per_meters, ST_Perimeter(geog,false) As per_sphere_meters, 
ST_Perimeter(geog)/0.3048 As per_ft
FROM ST_GeogFromText('MULTIPOLYGON(((-71.1044543107478 42.340674480411,-71.1044542869917 42.3406744369506,
-71.1044553562977 42.340673886454,-71.1044543107478 42.340674480411)),
((-71.1044543107478 42.340674480411,-71.1044860600303 42.3407237015564,-71.1045215770124 42.3407653385914,
-71.1045498002983 42.3407946553165,-71.1045611902745 42.3408058316308,-71.1046016507427 42.340837442371,
-71.104617893173 42.3408475056957,-71.1048586153981 42.3409875993595,-71.1048736143677 42.3409959528211,
-71.1048878050242 42.3410084812078,-71.1044020965803 42.3414730072048,
-71.1039672113619 42.3412202916693,-71.1037740497748 42.3410666421308,
-71.1044280218456 42.3406894151355,-71.1044543107478 42.340674480411)))') As geog;
per_metersper_sphere_metersper_ft
257.634283683311257.412311446337845.256836231335

48. ST_Perimeter2D

ST_Perimeter2D -返回几何图形的2维周长,如果它是一个多边形或多多边形。 这是当前ST_Perimeter的别名。

48.1. 概要

float ST_Perimeter2D(geometry geomA);

48.2. 描述

返回几何图形的二维周长(如果它是一个多边形或多多边形)。

  • 这是当前ST_Perimeter的别名。 在未来的版本中,ST_Perimeter可能会返回几何图形的最高维度周长。 此事仍在考虑之中

49. ST_3DPerimeter

ST_3DPerimeter -返回几何体的三维周长,如果它是一个多边形或多多边形。

49.1. 概要

float ST_3DPerimeter(geometry geomA);

49.2. 描述

返回几何体的三维周长(如果它是一个多边形或多多边形)。 如果几何图形是二维的,则返回二维周长。

49.3. 样例

  • 周长略高的多边形在空中的马萨诸塞州的飞机脚
SELECT ST_3DPerimeter(the_geom), ST_Perimeter2d(the_geom), ST_Perimeter(the_geom) 
        FROM (SELECT ST_GeomFromEWKT('SRID=2249;POLYGON((743238 2967416 2,743238 2967450 1, 743265.625 2967416 1,743238 2967416 2))') As the_geom) As foo;
ST_3DPerimeterst_perimeter2dst_perimeter
105.465793597674105.432997272188105.432997272188

50. ST_PointOnSurface

ST_PointOnSurface -返回一个保证在表面上的点。

50.1. 概要

geometry ST_PointOnSurface(geometry g1);

50.2. 描述

返回保证与曲面相交的点。

  • 这个函数支持3d,不会删除z-index。

50.3. 样例

SELECT ST_AsText(ST_PointOnSurface('POINT(0 5)'::geometry));
st_astext
POINT(0 5)
SELECT ST_AsText(ST_PointOnSurface('LINESTRING(0 5, 0 10)'::geometry));
st_astext
POINT(0 5)
SELECT ST_AsText(ST_PointOnSurface('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'::geometry));
st_astext
POINT(2.5 2.5)
SELECT ST_AsEWKT(ST_PointOnSurface(ST_GeomFromEWKT('LINESTRING(0 5 1, 0 0 1, 0 10 2)')));
st_asewkt
POINT(0 0 1)

51. ST_Project

ST_Project -返回从起点投影的点,使用米的距离和以弧度为单位的方位(方位)。

51.1. 概要

geography ST_Project(geography g1, float distance, float azimuth);

51.2. 描述

返回从起点使用以弧度测量的方位角(方位)和以米测量的距离沿测地线投影的点。 这也称为直接测地线问题。
方位角在航海中有时称为航向或方位。 它是相对于真北(方位角零)测量的。 东是方位角90 (π/2),南是方位角180 (π),西是方位角270 (3π/2)

51.3. 样例

SELECT ST_AsText(ST_Project('POINT(0 0)'::geography, 100000, radians(45.0)));
st_astext
POINT(0.635231029125537 0.639472334729198)

52. ST_Relate

ST_Relate -如果这个几何体与另一个几何体在空间上相关,则通过测试
由intersectionMatrixPattern中的值指定的两个几何图形的内部、边界和外部。 如果没有传入intersectionMatrixPattern,则返回与两个几何图形相关的最大intersectionMatrixPattern。

52.1. 概要

boolean ST_Relate(geometry geomA, geometry geomB, text intersectionMatrixPattern);
text ST_Relate(geometry geomA, geometry geomB);
text ST_Relate(geometry geomA, geometry geomB, integer BoundaryNodeRule);

52.2. 样例

  • 找到所有相交且不接触多边形的化合物(内部相交)
SELECT l.* , b.name As poly_name FROM polys As b
INNER JOIN compounds As l ON (p.the_geom && b.the_geom
AND ST_Relate(l.the_geom, b.the_geom,'T********'));

SELECT ST_Relate(ST_GeometryFromText(‘POINT(1 2)’), ST_Buffer(ST_GeometryFromText(‘POINT(1 2)’),2));

st_relate
0FFFFF212
SELECT ST_Relate(ST_GeometryFromText('LINESTRING(1 2, 3 4)'), ST_GeometryFromText('LINESTRING(5 6, 7 8)'));
st_relate
FF1FF0102
SELECT ST_Relate(ST_GeometryFromText('POINT(1 2)'), ST_Buffer(ST_GeometryFromText('POINT(1 2)'),2), '0FFFFF212');

st_relate
t
SELECT ST_Relate(ST_GeometryFromText('POINT(1 2)'), ST_Buffer(ST_GeometryFromText('POINT(1 2)'),2), '*FF*FF212');
st_relate
t

53. ST_RelateMatch

ST_RelateMatch -如果intersectionmatrixpattern1暗指intersectionMatrixPattern2则返回true

53.1. 概要

boolean ST_RelateMatch(text intersectionMatrix, text intersectionMatrixPattern);

53.2. 样例

SELECT ST_RelateMatch('101202FFF', 'TTTTTTFFF') ;
result
t
-- 公共交叉矩阵模式的例子和例子矩阵  
-- 比较一个无效几何和(在内部和边界相交的线和多边形)的关系  
SELECT mat.name, pat.name, ST_RelateMatch(mat.val, pat.val) As satisfied
FROM
( VALUES ('Equality', 'T1FF1FFF1'),
('Overlaps', 'T*T***T**'),
('Within', 'T*F**F***'),
('Disjoint', 'FF*FF****') As pat(name,val)
CROSS JOIN
( VALUES ('Self intersections (invalid)', '111111111'),
('IE2_BI1_BB0_BE1_EI1_EE2', 'FF2101102'),
('IB1_IE1_BB0_BE0_EI2_EI1_EE2', 'F11F00212')
) As mat(name,val);

54. ST_ShortestLine

ST_ShortestLine -返回两个几何图形之间的二维最短线

54.1. 概要

geometry ST_ShortestLine(geometry g1, geometry g2);

54.2. 描述

返回两个几何图形之间的二维最短线。 如果多于一行,函数只返回函数找到的最短的一行。 如果g1和g2只相交于一点,函数将返回一条起始点和结束点都在该交点的直线。 如果g1和g2相交于不止一个点,函数将返回一条起始和结束于同一点的直线,但它可以是任意的相交点。 返回的行总是从g1开始到g2结束。 这个函数返回的行长度将始终与g1和g2的ST_Distance返回的相同。

54.3. 样例

  • 点和折线之间最短的线
SELECT ST_AsText(ST_ShortestLine('POINT(100 100) '::geometry,'LINESTRING (20 80, 98 190, 110 180, 50 75 )'::geometry)) As sline;
sline
LINESTRING(100 100,73.0769230769231 115.384615384615)

在这里插入图片描述

  • 多边形与多边形之间的最短线
SELECT ST_AsText(ST_ShortestLine(ST_GeomFromText('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'),ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20))) As slinewkt;

sline
LINESTRING(140.752120669087 125.695053378061,121.111404660392 15

在这里插入图片描述

55. ST_Touches

ST_Touches -如果几何图形至少有一个共同点,但是它们的内部没有相交,返回TRUE。

55.1. 概要

boolean ST_Touches(geometry g1, geometry g2);

55.2. 描述

如果g1和g2之间的唯一共同点位于g1和g2边界的联合中,则返回TRUE。 ST_Touches关系适用于所有Area/Area, Line/Line, Line/Area, Point/Area和Point/Line对的关系,但不适用于Point/Point对。

九交模型公式为:

  • FT*******
  • FT***
  • FT*

55.3. 样例

在这里插入图片描述
在这里插入图片描述

SELECT ST_Touches('LINESTRING(0 0, 1 1, 0 2)'::geometry, 'POINT(1 1)'::geometry);
st_touches
f

56. ST_Within

ST_Within -如果几何图形A完全在几何图形B内部,则返回true

56.1. 概要


56.2. 描述

如果几何图形A完全在几何图形b内部,则返回TRUE。为了使这个函数有意义,源几何图形必须都具有相同的坐标投影,具有相同的SRID。 如果ST_Within(a,B)为真,并且ST_Within(B, a)为真,那么这两个几何图形在空间上是相等的。
由GEOS模块执行

这个函数调用将自动包含一个边界框比较,该边界框比较将利用上可用的任何索引
几何图形。 要避免使用索引,请使用_ST_Within函数。
注意:这是“允许的”版本,返回布尔值,而不是整数。

九交模型公式为:

  • TFF

56.3. 样例

--a circle within a circle
SELECT ST_Within(smallc,smallc) As smallinsmall,
        ST_Within(smallc, bigc) As smallinbig,
        ST_Within(bigc,smallc) As biginsmall,
        ST_Within(ST_Union(smallc, bigc), bigc) as unioninbig,
        ST_Within(bigc, ST_Union(smallc, bigc)) as biginunion,
        ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion
    FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(50 50)'), 20) As smallc,ST_Buffer(ST_GeomFromText('POINT(50 50)'), 40) As bigc) As foo;
smallinsmallsmallinbigbiginsmallunioninbigbiginunionbigisunion

56.1. 概要


56.2. 描述

如果几何图形A完全在几何图形b内部,则返回TRUE。为了使这个函数有意义,源几何图形必须都具有相同的坐标投影,具有相同的SRID。 如果ST_Within(a,B)为真,并且ST_Within(B, a)为真,那么这两个几何图形在空间上是相等的。
由GEOS模块执行

这个函数调用将自动包含一个边界框比较,该边界框比较将利用上可用的任何索引
几何图形。 要避免使用索引,请使用_ST_Within函数。
注意:这是“允许的”版本,返回布尔值,而不是整数。

九交模型公式为:

  • TFF

56.3. 样例

--a circle within a circle
SELECT ST_Within(smallc,smallc) As smallinsmall,
        ST_Within(smallc, bigc) As smallinbig,
        ST_Within(bigc,smallc) As biginsmall,
        ST_Within(ST_Union(smallc, bigc), bigc) as unioninbig,
        ST_Within(bigc, ST_Union(smallc, bigc)) as biginunion,
        ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion
    FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(50 50)'), 20) As smallc,ST_Buffer(ST_GeomFromText('POINT(50 50)'), 40) As bigc) As foo;
smallinsmallsmallinbigbiginsmallunioninbigbiginunionbigisunion
ttfttt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九又四分之三站台Emm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值