如何使用Postgis配置PostgreSQL以计算距离

时间:2018-09-21 14:09:47

标签: postgresql gis postgis

我知道这可能是愚蠢的问题,但我正在寻找一段时间,找不到合适的答案。 我安装了PostGIS的PostgreSQL数据库。在一个表中,我有带有lon lat的条目(假设列分别是place,lon,lat)。

我应该在此表中添加什么内容和/或可以使用什么程序,以便能够以米为单位计算这些位置之间的距离。

我读到有必要知道一个地方的SRID才能计算距离。是否有可能不知道/使用它,但仍然只能基于lon来计算以米为单位的距离?

1 个答案:

答案 0 :(得分:1)

简短答案:

只需使用ST_MakePoint快速转换您的 x,y 值(注意开销!)并计算到给定点的距离,默认SRS将为{{3} }:

SELECT ST_Distance(ST_MakePoint(lon,lat)::GEOGRAPHY,
                   ST_MakePoint(23.73,37.99)::GEOGRAPHY) FROM places;

使用GEOGRAPHY可以得到以米为单位的结果,而使用GEOMETRY可以得到以度为单位的结果。当然,了解坐标对的SRS对于计算距离是必不可少的,但是,如果您可以控制数据质量并且坐标是一致的(在这种情况下,请忽略SRS),就无需担心。如果您打算使用外部数据执行操作,这将变得很棘手,您也从中不了解SRS,并且它可能与您的SRS不同。

长答案:

好吧,如果您使用的是PostGIS,则首先不要在单独的列中使用 x,y 。您可以轻松地添加“ geometry / geography”列,执行以下操作。

这是你的桌子...

CREATE TABLE places (place TEXT, lon NUMERIC, lat NUMERIC);

包含以下数据..

INSERT INTO places VALUES ('Budva',18.84,42.92),
                          ('Ohrid',20.80,41.14);

以下是您添加地理位置类型列的方法:

ALTER TABLE places ADD COLUMN geo GEOGRAPHY;

添加列之后,这就是将坐标转换为地理/几何并更新表格的方式:

UPDATE places SET geo = ST_MakePoint(lon,lat);

要计算距离,您只需要使用函数WGS84,如下所示(距离以米为单位):

SELECT ST_Distance(geo,ST_MakePoint(23.73,37.99)) FROM places;

   st_distance   
-----------------
 686560.16822422
 430876.07368955
(2 Zeilen)

如果您在ST_Distance中有location参数,则还可以使用:

SELECT ST_Distance(geo,'POINT(23.73 37.99)') FROM places;
   st_distance   
-----------------
 686560.16822422
 430876.07368955
(2 Zeilen)