简答:
只需使用ST_MakePoint 即时转换您的 x,y 值(注意开销!)并计算与给定点的距离,默认 SRS 将为WGS84:
SELECT ST_Distance(ST_MakePoint(lon,lat)::GEOGRAPHY,
ST_MakePoint(23.73,37.99)::GEOGRAPHY) FROM places;
使用GEOGRAPHY 会得到以米为单位的结果,而使用GEOMETRY 会得到以度为单位的结果。当然,知道坐标对的 SRS 是计算距离的必要条件,但是如果你能控制数据质量并且坐标是一致的(在这种情况下,省略 SRS),那就不用担心了。如果您计划使用外部数据执行操作,这将开始变得棘手,您也不知道 SRS 并且它可能与您的不同。
长答案:
好吧,如果您使用的是 PostGIS,那么您首先不应该在分隔列中使用 x,y。你可以很容易地添加一个几何/地理列做这样的事情。
这是你的桌子...
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);
要计算距离,您只需要使用函数ST_Distance,如下(距离以米为单位):
SELECT ST_Distance(geo,ST_MakePoint(23.73,37.99)) FROM places;
st_distance
-----------------
686560.16822422
430876.07368955
(2 Zeilen)
如果你的位置参数在WKT,你也可以使用:
SELECT ST_Distance(geo,'POINT(23.73 37.99)') FROM places;
st_distance
-----------------
686560.16822422
430876.07368955
(2 Zeilen)