Name

ST_Distance — 返回两个几何图形或地理值之间的距离。

Synopsis

float ST_Distance(geometry g1, geometry g2);

float ST_Distance(geography geog1, geography geog2, boolean use_spheroid=true);

描述

几何体 TYPE以投影单位(空间参考单位)返回两个几何图形之间的最小二维笛卡尔(平面)距离。

地理学 类型默认为返回两个地理位置之间的最小测地线距离(以米为单位),并根据SRID确定的椭球体进行计算。如果 use_spheroid 为False,则使用更快的球面计算。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3:5.1.23

This method supports Circular Strings and Curves

可用性:1.5.0地理支持是在1.5中引入的。改进了平面的速度,以便更好地处理大型或多个顶点几何图形

增强:2.1.0提高了地理位置的速度。看见 让地理操作更快捷 有关详细信息,请参阅。

增强:2.1.0-引入了对曲线几何图形的支持。

增强版:2.2.0-使用GeogicLib对椭球体进行测量,以提高精度和稳健性。需要项目 > =4.9.0以利用新功能。

更改:3.0.0-不再依赖SFCGAL。

几何图形示例

几何图形示例-以平面度4326表示的单位是WGS 84经度,单位是度。

SELECT ST_Distance(
    'SRID=4326;POINT(-72.1235 42.3521)'::geometry,
    'SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)'::geometry );
-----------------
0.00150567726382282

几何图形示例-单位为米(SRID:3857,与流行的Web地图上的像素成比例)。虽然它的值是OFF,但可以正确地比较附近的值,这使得它成为KNN或KMeans等算法的良好选择。

SELECT ST_Distance(
    ST_Transform('SRID=4326;POINT(-72.1235 42.3521)'::geometry, 3857),
    ST_Transform('SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)'::geometry, 3857) );
-----------------
167.441410065196

几何图形示例-以米为单位(SRID:3857,如上所述,但已由cos(稍后)更正以考虑变形)

SELECT ST_Distance(
    ST_Transform('SRID=4326;POINT(-72.1235 42.3521)'::geometry, 3857),
    ST_Transform('SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)'::geometry, 3857)
                ) * cosd(42.3521);
-----------------
123.742351254151

几何图形示例-单位为米(SRID:26986马萨诸塞州平面米)(马萨诸塞州最准确)

SELECT ST_Distance(
    ST_Transform('SRID=4326;POINT(-72.1235 42.3521)'::geometry, 26986),
    ST_Transform('SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)'::geometry, 26986) );
-----------------
123.797937878454

几何图形示例-单位为米(SRID:2163美国国家地图集等面积)(最不精确)

SELECT ST_Distance(
    ST_Transform('SRID=4326;POINT(-72.1235 42.3521)'::geometry, 2163),
    ST_Transform('SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)'::geometry, 2163) );
------------------
126.664256056812

地理例子

与几何体示例相同,但以米为单位-使用球体可以稍微加快计算速度,但不太准确。

SELECT ST_Distance(gg1, gg2) As spheroid_dist, ST_Distance(gg1, gg2, false) As sphere_dist
FROM (SELECT
    'SRID=4326;POINT(-72.1235 42.3521)'::geography as gg1,
    'SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)'::geography as gg2
        ) As foo  ;

  spheroid_dist   |   sphere_dist
------------------+------------------
 123.802076746848 | 123.475736916397

另请参阅

ST_3DDistance, ST_DWithin, ST_DistanceSphere, ST_DistanceSpheroid, ST_MaxDistance, ST_HausdorffDistance, ST_FrechetDistance, ST_Transform