我知道这可能是愚蠢的问题,但我正在寻找一段时间,找不到合适的答案。 我安装了PostGIS的PostgreSQL数据库。在一个表中,我有带有lon lat的条目(假设列分别是place,lon,lat)。
我应该在此表中添加什么内容和/或可以使用什么程序,以便能够以米为单位计算这些位置之间的距离。
我读到有必要知道一个地方的SRID才能计算距离。是否有可能不知道/使用它,但仍然只能基于lon来计算以米为单位的距离?
答案 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)