程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用 PostGIS 查找最小距离和更新列大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用 PostgIS 查找最小距离和更新列?

开发过程中遇到使用 PostgIS 查找最小距离和更新列的问题如何解决?下面主要结合日常开发的经验,给出你关于使用 PostgIS 查找最小距离和更新列的解决方法建议,希望对你解决使用 PostgIS 查找最小距离和更新列有所启发或帮助;

我需要 PostgIS 数据库的帮助来计算两点之间的距离。 目标是为“Dots”表中的每一行找到与“reflayer”点表中最近点的距离,并将其以米为单位保存在“dist_from_ref”列中。

点@R_379_9284@

create table dots
(
    dot_ID INT,site_ID INT,latitude float ( 6 ),longitude float ( 6 ),rsrp float ( 6 ),dist INT,project_ID INT,dist_from_sitE int,geom geometry,dist_from_ref INT;
);

relayer 结构为:

create table reflayers 
(
    layer_name varchar,geom geometry
);

点表

使用 PostGIS 查找最小距离和更新列

转发器表

使用 PostGIS 查找最小距离和更新列

有没有人可以用查询可以找到的最小距离更新“dist_from_ref”列的解决方案?

编辑:

updatE dots d
SET dist_from_ref = 100 * ROUND (1000 * ST_distance(d.geom,r.geom))
FROM reflayers r 
WHERE d.dist_from_ref IS NulL 
  AND r.geom = (SELECT r.geom
                FROM reflayers r 
                ORDER BY ST_distance(d.geom,r.geom) ASC liMIT 1);

此查询根据我的需要更新列,但它卡在我的 PostgIS 服务器上,有 60K 行。

我在 70 行上使用了它,我工作得很好,有什么改进的建议吗?

之前和之后

之前的点表

使用 PostGIS 查找最小距离和更新列

点表之后

使用 PostGIS 查找最小距离和更新列

文本表格

dot_ID | site_ID | latitude  | longitude |  rsrp  | project_ID | dist_from_site | dist_from_ref |                        geom
--------+---------+-----------+-----------+--------+------------+----------------+---------------+----------------------------------------------------
      1 |   42047 | 31.902857 | 34.919445 |  -90.9 |          1 |             21 |          7200 | 0101000020E6100000F5F6E7A221E73F4041BCAE5FB0754140
      2 |   42047 | 31.902857 | 34.919445 |  -89.5 |          1 |             21 |          7200 | 0101000020E6100000F5F6E7A221E73F4041BCAE5FB0754140
      3 |   42047 | 31.902857 | 34.919445 |  -89.5 |          1 |             21 |          7200 | 0101000020E6100000F5F6E7A221E73F4041BCAE5FB0754140

解决方法

将子查询放在 SELECT 子句中,并将其引用到外部查询的每一行,例如

SELECT *,(
  SELECT min(ST_Distance(d.geom,r.geom))
  FROM reflayers r) as distance
FROM dots d;

要更新只是做同样的..

updatE dots SET dist_from_ref = (
  SELECT min(ST_Distance(dots.geom,r.geom))
  FROM reflayers r)

注意:此操作可能会变得非常耗时,具体取决于表的大小。由于您无法连接这两个表,因此您让查询在 refLayers 的每条记录中对 dots 上的每条记录运行一次完整扫描,以找到最近的距离。

大佬总结

以上是大佬教程为你收集整理的使用 PostGIS 查找最小距离和更新列全部内容,希望文章能够帮你解决使用 PostGIS 查找最小距离和更新列所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:使用