【问题标题】:postgis difference in terms of precision and performance between geography and geometry地理和几何之间在精度和性能方面的postgis差异
【发布时间】:2017-07-26 20:19:00
【问题描述】:

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

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

  2. 1234563没有指定位置的我从 NULL 值用户中随机抽取一个。这可以通过查询实现吗?

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

非常感谢

【问题讨论】:

    标签: python database postgresql postgis knn


    【解决方案1】:

    根据第 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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 2020-08-09
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      相关资源
      最近更新 更多