PostGIS批量更新多记录:计算城市到Stockholm的距离并更新字段
解决PostGIS批量更新城市到Stockholm距离的问题
你的错误集中在这两点:
- 子查询返回了
b.name和距离两个字段,无法直接赋值给dist字段 - 错误引用了不存在的
distance列作为WHERE条件
下面是两种可行的批量更新写法:
方法1:使用关联子查询
UPDATE cities2 SET dist = ( SELECT ST_DistanceSphere(a.geom, cities2.geom)/1000 FROM cities2 a WHERE a.name = 'Stockholm' ) WHERE EXISTS ( SELECT 1 FROM cities2 a WHERE a.name = 'Stockholm' );
方法2:使用UPDATE...FROM(大表更高效)
UPDATE cities2 c SET dist = ST_DistanceSphere(s.geom, c.geom)/1000 FROM cities2 s WHERE s.name = 'Stockholm';
补充说明
ST_DistanceSphere计算球面距离(单位米),除以1000转换为千米- 如果想让Stockholm自身的
dist字段设为0,可以修改方法2的语句:
UPDATE cities2 c SET dist = CASE WHEN c.name = 'Stockholm' THEN 0 ELSE ST_DistanceSphere(s.geom, c.geom)/1000 END FROM cities2 s WHERE s.name = 'Stockholm';
内容的提问来源于stack exchange,提问作者Piet Klaassen
相关产品推荐
相关产品推荐

