地理与几何在精度和性能上的差异

2024-10-01 15:35:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我开发了一个telegrambot,当两个用户都在用postgres查询寻找合作伙伴时,它可以匹配两个用户。 我想添加可选的功能,根据位置匹配用户(最近的用户)。 因为这是一个选项,所以我想我会在默认情况下保持列为null,如果用户发送了他的位置,我会添加它。 我将使用postigs来实现这一点。 我有两个问题:

  1. 用地理还是几何学更好?因为人们可能来自世界各地,我读到在这些情况下,最好使用地理位置,但无论如何,我不需要任何精确的数据,只是为了知道谁是最接近的用户以及他们之间的距离(也大致只是在匹配时作为附加信息显示)。我希望查询运行得快(我的意思是少于1秒)。我在考虑使用KNN在列上创建索引,并使用ordered by<;->;。这是一个好的选择吗?你会怎么做?几何还是地理?我的主意行吗?

  2. 因为,正如我所说的,字段也可以是空的,因为用户不想提供我想给在ordered by中指定位置的用户更好的优先级,如果没有指定位置的用户,我从空值中随机抽取一个。有没有可能通过查询?

我的bot是用python编写的,如果可以的话。在

非常感谢


Tags: 数据用户功能by选项情况合作伙伴postgres
1条回答
网友
1楼 · 发布于 2024-10-01 15:35:03

根据第一点,我认为这篇文章将最好地回答你的问题

http://postgis.net/docs/manual-1.5/ch04.html#PostGIS_Geography

关于速度-只需在geom/geog列上创建gist索引,并使用st_Dwithin(geom1,geom2100)和按st_distance排序结果(geom1,geom2),它将足够快,直到你将拥有数千万用户。在

第二点:是的,它只是一个联合

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

我错过了其他的标准,如性别,年龄等,但当然在两个选择中使用它

相关问题 更多 >

    热门问题