大佬教程收集整理的这篇文章主要介绍了使用 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
);
点表
转发器表
有没有人可以用查询可以找到的最小距离更新“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 行上使用了它,我工作得很好,有什么改进的建议吗?
之前和之后
之前的点表
点表之后
文本表格
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,请注明来意。