gpt4 book ai didi

postgresql - 如何使用 Postgis 配置 PostgreSQL 来计算距离

转载 作者:行者123 更新时间:2023-11-29 13:13:04 27 4
gpt4 key购买 nike

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

我应该向该表添加什么或/和我可以使用什么程序,以便能够计算这些地方之间的距离(以米为单位)。

我读到有必要知道一个地方的 SRID 才能计算距离。是否有可能不知道/不使用它并且仍然能够仅基于经纬度来计算以米为单位的距离?

最佳答案

简答:

只需使用 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。你可以很容易地添加一个几何/地理列来做这样的事情。

这是你的 table ......

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)

关于postgresql - 如何使用 Postgis 配置 PostgreSQL 来计算距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52445534/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com