2017-07-26 190 views
0

我开发了一个电报机器人,它可以匹配2个用户使用相同的语言,当他们都在寻找一个具有postgres查询的合作伙伴时。 我想添加可选的能力来匹配用户也取决于位置(最接近的用户)。 因为这是一个选项,我想我会保持列默认情况下,如果用户发送他的位置我添加它。 我打算用postigs来实现这个。 我有两个问题:postgis在地理和几何之间的精度和性能方面的差异

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

  2. 因为,正如我所说的,该字段也可以是NULL,用户不希望提供位置,我想优先考虑在排序的位置指定的用户,如果没有与一个指定的位置,我从NULL值的用户中随机抽取一个。这可能与查询?

我的机器人是用Python编写的,如果它可以提供帮助。

非常感谢你

回答

0

据1点我想,这篇文章将会回答你的问题的最佳

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

关于速度 - 只要你的GEOM /的GeOG列创建要点指数使用st_Dwithin(geom1,geom2,100)并按st_distance(geom1,geom2)排序结果,它将会足够快,直到您拥有数千万用户。

点2:是的,它是例如只是工会 选择,st_distance(u1.geom,u2.geom)DIST从 (选择U2从用户U1 ,用户U2 其中u1.id = 1 和u1.id从用户 <> u2.id 和st_dwithin(u1.geom,u2.geom,5000) UNION 选择*,空DIST 其中id <> 1 和的geom为null LIMIT 1) a order by dist

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

相关问题