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

时间:2017-07-26 20:19:00

标签: python database postgresql postgis knn

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

  1. 使用地理或几何图形会更好吗?因为人们可以来自世界各地,我在这些情况下阅读最好使用地理,但无论如何我不需要任何精确的数据,只知道谁是最亲近的用户和他们之间的距离(也大约只是在匹配时显示为附加信息)。我希望查询能够快速运行(我的意思是不到1秒)。我正在考虑使用KNN在列上创建索引并使用< - >命令。这是一个不错的选择吗?你会为此做些什么?几何或地理?我的想法很好吗?

  2. 因为,正如我所说,该字段也可以是NULL是用户不希望提供的位置我想给予指定位置的用户更好的优先级,如果有的话没有指定位置我从NULL值用户中取一个随机数。这可以通过查询吗?

  3. 我的机器人是用python编写的,如果有帮助的话。

    非常感谢

1 个答案:

答案 0 :(得分: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

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