的 简短回答: 强>
只需转换你的 X,Y 即时使用的价值观 ST_MakePoint (注意开销!)并计算距离给定点的距离,默认SRS将是 WGS84 :
ST_MakePoint
WGS84
SELECT ST_Distance(ST_MakePoint(lon,lat)::GEOGRAPHY, ST_MakePoint(23.73,37.99)::GEOGRAPHY) FROM places;
运用 GEOGRAPHY 你会得到米的结果,同时使用 GEOMETRY 将以度数给予它。当然,了解坐标对的SRS对于计算距离是必不可少的,但是如果您可以控制数据质量并且坐标是一致的(在这种情况下,省略SRS),则没有太多担心。如果您计划使用外部数据执行操作,它将开始变得棘手,您也不知道SRS,它可能与您的不同。
GEOGRAPHY
GEOMETRY
的 答案很长: 强>
好吧,如果您使用的是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 ,如下(以米为单位的距离):
ST_Distance
SELECT ST_Distance(geo,ST_MakePoint(23.73,37.99)) FROM places; st_distance ----------------- 686560.16822422 430876.07368955 (2 Zeilen)
如果您有位置参数 WKT ,你也可以使用:
WKT
SELECT ST_Distance(geo,'POINT(23.73 37.99)') FROM places; st_distance ----------------- 686560.16822422 430876.07368955 (2 Zeilen)