计算两张桌子之间的距离

弗拉德·盖辛

我的PostgreSQL数据库触发器有问题。

我正在尝试使用PostGIS工具计算两个地理位置之间的距离。这两个点位于单独的表中,这两个表之间的KEY是site_id列。

sites表结构为:

CREATE TABLE sites(
  site_id INT,
  site_name text,
  latitude float ( 6 ),
  longitude float ( 6 ),
  geom geometry

);

dots表结构为:

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;
);

目标是创建一个触发器,在添加新的点时自动计算距离。

我创建的触发器是:

CREATE TRIGGER dots_insert_site_dist_trigger
  AFTER UPDATE OF "geom"
  ON "dots"
  FOR EACH ROW
  EXECUTE PROCEDURE dots_insert_site_dist_update();``

函数本身:

  RETURNS trigger 
  AS
$$
BEGIN
        UPDATE dots SET dist_from_site =
  (SELECT ROUND(100*ST_Distance(NEW.geom, sites.geom))
  FROM
  dots,
  sites
  WHERE sites.site_id = NEW.site_id);
  RETURN NEW;
END;
$$
 LANGUAGE 'plpgsql';

错误:

错误:由用作表达式的子查询返回的一行以上上下文:SQL语句“ UPDATE点SET dist_from_site =(SELECT ROUND(100 * ST_Distance(NEW.geom,sites.geom)))来自点,站点WHERE sites.site_id = NEW.site_id)“ PL / pgSQL函数dot_insert_site_dist_update()SQL语句的第3行

表格网站: 1个

点表: 2

scaisEdge

乍一看似乎您错过了子查询中的加入条件

SELECT ROUND(100*ST_Distance(NEW.geom, sites.geom))
FROM  dots
INNER JOIN sites on dots site_id = sites.site_id
WHERE sites.site_id = NEW.site_id

并且这应该生成笛卡尔乘积(表之间的mxn行..并且建议您避免使用基于逗号分隔的表名称和where条件的旧联接语法,并使用带on子句的显式联接语法

您可以尝试使用查询作为更新的子查询

  UPDATE dots 
  SET dist_from_site = t.my_dist
  FROM (
      SELECT dots.site_id, ROUND(100*ST_Distance(dots.geom, sites.geom)) my_dist
      FROM  dots 
      INNER JOIN sites on dots.site_id = sites.site_id 
      WHERE sites.site_id = dots.site_id
  ) t 
  WHERE dots.site_id = t.site_id

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

计算两张桌子之间的距离

来自分类Dev

计算两张桌子之间的距离

来自分类Dev

计算两张桌子之间的距离

来自分类Dev

在两张桌子上重复计算

来自分类Dev

两张桌子之间的左联接

来自分类Dev

在两张桌子之间移动整行

来自分类Dev

两张桌子之间的区别

来自分类Dev

如何在两张桌子之间获得最高收益?

来自分类Dev

两张桌子的垂直对齐

来自分类Dev

两张桌子合而为一?

来自分类Dev

两张桌子上的累积余额

来自分类Dev

在两张桌子上获得今天的出席人数

来自分类Dev

两张桌子并排,填充剩余宽度

来自分类Dev

两张桌子-如果年龄小于,那么做

来自分类Dev

像一张桌子一样使用两张桌子

来自分类Dev

我应该使用一张桌子还是分成两张桌子?

来自分类Dev

Matplotlib两张图片之间的区别

来自分类Dev

两张图像之间的重叠区域

来自分类Dev

对齐两张桌子上的列,其中一张桌子固定在位置上

来自分类Dev

两张纸之间的Excel VLOOKUP失败

来自分类Dev

两张表之间的SQL查询效率

来自分类Dev

在Excel中使用两张纸之间的索引匹配

来自分类Dev

两张卡之间的差异。Radeon和技嘉

来自分类Dev

在Excel中使用两张纸之间的索引匹配

来自分类Dev

将文字放在两张图片之间

来自分类Dev

使用索引,在两张纸之间匹配vba?

来自分类Dev

如何在CodeIgniter中选择免费房间进行预订-两张桌子?

来自分类Dev

从两张桌子中获得最贵和最便宜的物品

来自分类Dev

当前垂直放置在顶部和底部的两张桌子,希望它们并排放置