postgis在地理和几何之间的精度和性能方面的差异

问题描述 投票:0回答:1

我开发了一个电报机器人,它匹配2个用户使用相同的语言,当他们都在寻找带有postgres查询的合作伙伴时。我想根据位置(最近的用户)添加可选的匹配用户的能力。因为它是一个选项,我认为我将默认保持列为null,如果用户发送他的位置,我添加它。我将使用postigs实现这一点。我有两个问题:

  1. 使用地理或几何更好吗?因为人们可以来自世界各地,我在这些情况下阅读最好使用地理,但无论如何我不需要任何精确的数据,只知道谁是最亲近的用户和他们之间的距离(也大约只是在匹配时显示为附加信息)。我希望查询能够快速运行(我的意思是不到1秒)。我正在考虑使用KNN在列上创建索引并使用< - >排序。这是一个不错的选择吗?你会为此做些什么?几何或地理?我的想法很好吗?
  2. 因为,正如我所说,字段也可以是NULL是用户不希望提供的位置我想为指定了order by中的位置的用户提供更好的优先级,如果没有指定的位置我从NULL值用户中随机取一个。查询可以实现吗?

如果它可以帮助我的机器人是用python编写的。

非常感谢你

python database postgresql postgis knn
1个回答
0
投票

根据第1点,我认为本文将最好地回答您的问题

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

关于速度 - 只需在你的geom / geog列上创建gist索引并使用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

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

© www.soinside.com 2019 - 2024. All rights reserved.