postgis 在地理和几何之间的精度和性能方面的差异
postgis difference in terms of precision and performance between geography and geometry
我开发了一个电报机器人,可以匹配 2 个使用相同语言的用户,当他们都在寻找具有 postgres 查询的合作伙伴时。
我想添加 optional 功能以根据位置(最近的用户)匹配用户。
因为这是一个选项,我想我会默认保留该列为空,如果用户发送他的位置,我会添加它。
我将使用 postigs 来实现它。
我有两个问题:
地理好还是几何好?因为人们可以来自世界各地,我在这些情况下阅读,最好使用地理,但无论如何我不需要任何精确的数据,只是为了知道谁是最近的用户以及他们之间的距离(也大约只是在匹配时作为附加信息指示)。我希望查询速度 运行 快(我的意思是少于 1 秒)。我正在考虑使用 KNN 在列上创建索引并使用 <-> 排序。这是一个好的选择吗?你会为此做什么?几何还是地理学?我的想法可以吗?
因为,正如我所说,该字段也可以为 NULL 是用户不想提供位置我想更好地优先考虑在 ordered by 中指定位置的用户,如果指定位置有 none,我会从 NULL 值用户中随机取一个。这可以通过查询实现吗?
我的机器人是用 python 编写的,如果有帮助的话。
非常感谢
根据第 1 点,我认为本文将最好地回答您的问题
http://postgis.net/docs/manual-1.5/ch04.html#PostGIS_Geography
关于速度 - 只需在 geom/geog 列上创建要点索引并使用 st_Dwithin(geom1, geom2,100) 并按 st_distance(geom1,geom2) 排序结果将足够快,直到您拥有数千万用户。
第 2 点:是的,例如联合
select *, st_distance(u1.geom, u2.geom) dist from
(Select u2.*
from users u1, users u2
where u1.id=1
and u1.id<>u2.id
and st_dwithin(u1.geom, u2.geom, 5000)
UNION
Select * , null dist
from users
where id<>1
and geom is null
LIMIT 1) a
order by dist
我错过了性别、年龄等其他标准,但当然在两个选择中都使用它
我开发了一个电报机器人,可以匹配 2 个使用相同语言的用户,当他们都在寻找具有 postgres 查询的合作伙伴时。 我想添加 optional 功能以根据位置(最近的用户)匹配用户。 因为这是一个选项,我想我会默认保留该列为空,如果用户发送他的位置,我会添加它。 我将使用 postigs 来实现它。 我有两个问题:
地理好还是几何好?因为人们可以来自世界各地,我在这些情况下阅读,最好使用地理,但无论如何我不需要任何精确的数据,只是为了知道谁是最近的用户以及他们之间的距离(也大约只是在匹配时作为附加信息指示)。我希望查询速度 运行 快(我的意思是少于 1 秒)。我正在考虑使用 KNN 在列上创建索引并使用 <-> 排序。这是一个好的选择吗?你会为此做什么?几何还是地理学?我的想法可以吗?
因为,正如我所说,该字段也可以为 NULL 是用户不想提供位置我想更好地优先考虑在 ordered by 中指定位置的用户,如果指定位置有 none,我会从 NULL 值用户中随机取一个。这可以通过查询实现吗?
我的机器人是用 python 编写的,如果有帮助的话。
非常感谢
根据第 1 点,我认为本文将最好地回答您的问题
http://postgis.net/docs/manual-1.5/ch04.html#PostGIS_Geography
关于速度 - 只需在 geom/geog 列上创建要点索引并使用 st_Dwithin(geom1, geom2,100) 并按 st_distance(geom1,geom2) 排序结果将足够快,直到您拥有数千万用户。
第 2 点:是的,例如联合
select *, st_distance(u1.geom, u2.geom) dist from
(Select u2.*
from users u1, users u2
where u1.id=1
and u1.id<>u2.id
and st_dwithin(u1.geom, u2.geom, 5000)
UNION
Select * , null dist
from users
where id<>1
and geom is null
LIMIT 1) a
order by dist
我错过了性别、年龄等其他标准,但当然在两个选择中都使用它