postgis 将字符串坐标重新格式化为 st_PointFromText() 的格式
postgis reformat string coordinates into format for st_PointFromText()
我在 postgresql table 中只有一个列 loc_coords
,其中包含经纬度组合数据。该列中的数据如下所示:
(34.0539, -118.463)
为了使用 Postgis
函数 ST_PointFromText()
我必须重新格式化此文本以删除逗号和括号,意思是:
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_coords
不存在于 rparen
和 lparen
的子查询之一中。
关于如何更好地解决这个问题有什么建议吗?
您是否尝试过创建函数来实现此目的?
create or replace function process_coords() returns text as $$
begin;
return replace(replace(replace(,'(',''),')',''),',','');
end;
$$ language 'plpgsql';
UPDATE t_active_bus
SET st_loc = st_pointfromtext('POINT(' || process_coords(loc_coords) || ')',4326);
我在 postgresql table 中只有一个列 loc_coords
,其中包含经纬度组合数据。该列中的数据如下所示:
(34.0539, -118.463)
为了使用 Postgis
函数 ST_PointFromText()
我必须重新格式化此文本以删除逗号和括号,意思是:
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_coords
不存在于 rparen
和 lparen
的子查询之一中。
关于如何更好地解决这个问题有什么建议吗?
您是否尝试过创建函数来实现此目的?
create or replace function process_coords() returns text as $$
begin;
return replace(replace(replace(,'(',''),')',''),',','');
end;
$$ language 'plpgsql';
UPDATE t_active_bus
SET st_loc = st_pointfromtext('POINT(' || process_coords(loc_coords) || ')',4326);