我如何 select PostGIS/PostgreSQL 中排名最高的几何?

How do I select geometry of highest rank in PostGIS/PostgreSQL?

我的 PostgreSQL 9.5 数据库中有两个 table,即 ptlines。 Table pt 包含 point geometry 和 table lines 包含 line geometryvalues (numeric)。以下查询,对于每个 pt 在 50 米搜索距离内选择 lines,并将新点投射到值 > 500 的线上。

Select distinct on (pt_id)
pt.gid as pt_id,
case when lines.value > 500
then st_closestpoint(lines.geom, pt.geom)
else null
end as new_pt
from
pt
left join lines on
st_dwithin(pt.geom, lines.geom, 50)
order by pt_id;

示例场景如下图所示:

我需要修改上面的查询以添加 rank/priority 条件,以便具有最高值的行应具有最高排名,并且 new_pt 应投影到该排名最高的行。我如何修改上面的代码,以便查询大数据集时,应该首先为每一行分配排名,然后项目指向具有最高值的行?

ORDER BY 列表应该比 DISTINCT ON 有更多的表达式。 DISTINCT ON 用于告知新数据集的主键,ORDER BY 决定源 table(s) 中的哪一行进入数据集。

自然地,两个列表应该有一个共同的头部。

你的情况我认为应该是

SELECT DISTINCT ON (pt_id)
  pt.gid AS pt_id,
  CASE
    WHEN lines.value > 500
      THEN st_closestpoint(lines.geom, pt.geom)
    ELSE NULL
  END AS new_pt
FROM
  pt
LEFT JOIN lines
  ON st_dwithin(pt.geom, lines.geom, 50)
ORDER BY pt_id, lines.value DESC;