postgis重新格式化字符串坐标为st_PointFromText()的格式

时间:2015-12-29 21:34:00

标签: postgresql postgis

我在postgresql表中有一个列loc_coords,其中包含纬度和经度数据。该列中的数据如下所示:

(34.0539, -118.463)

为了使用Postgis函数ST_PointFromText(),我必须重新格式化此文本以删除逗号和parens,这意味着:

34.0539 -118.463

我一直试图找到一种方法来一次性完成这些替换,但不断出现错误。以下是我在SQL中尝试做的事情:

WITH comma_repl as (
SELECT replace(loc_coords,',', '') FROM t_active_bus),
rparen as (
SELECT replace(loc_coords, '(','') FROM comma_repl),
lparen as (
SELECT replace(loc_coords, ')', '') FROM rparen)

UPDATE t_active_bus
SET st_loc = st_pointfromtext('POINT(||lparen||)',4326);

但我一直收到loc_coords没有退出的错误。我想在loc_coordsrparen的一个子查询中错误是lparen不存在。

有关如何解决此问题的任何建议甚至更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您是否尝试过创建功能来实现这一目标?

create or replace function process_coords() returns text as $$
begin;
return replace(replace(replace($1,'(',''),')',''),',','');
end;
$$ language 'plpgsql';


UPDATE t_active_bus
SET st_loc = st_pointfromtext('POINT(' || process_coords(loc_coords) || ')',4326);