无法使用 ST_GeomFromText 在表之间插入
Unable to INSERT between tables using ST_GeomFromText
我正在尝试将点几何值和其他数据从一个 table 插入到另一个 table。
-- create tables
create table bh_tmp (bh_id integer, bh_name varchar
, easting decimal, northing decimal, ground_mod decimal);
create table bh (name varchar);
SELECT AddGeometryColumn('bh', 'bh_geom', 27700, 'POINT',3);
-- popualte bh_tmp
insert into bh_tmp values
(1,'C5',542945.0,180846.0,3.947),
(3,'B24',542850.0,180850.0,4.020),
(4,'B26',543020.0,180850.0,4.020);
-- populate bh from bh_tmp
insert into bh(name, bh_geom) SELECT
bh_name,
CONCAT($$ST_GeomFromText('POINT($$, Easting, ' ', Northing, ' '
, Ground_mOD, $$)', 27700)$$);
FROM bh_tmp;
出现此错误:
ERROR: parse error - invalid geometry
SQL state: XX000
Hint: "ST" <-- parse error at position 2 within geometry
我看不出我指定的 ST_GeomFromText
字符串有什么问题。但是如果我插入行 'manually',我可以填充 table bh
,例如:
INSERT INTO bh (name, bh_geom)
VALUES ('C5' ST_GeomFromText('POINT(542945.0 180846.0 3.947)', 27700));
我做错了什么?
您收到该错误是因为 CONCAT 函数的输出是文本,而您的 bh_geom 列是几何图形,因此您试图将文本插入到几何图形中。这将起作用:
INSERT INTO bh(name, bh_geom) SELECT
bh_name,
ST_GeomFromText('POINT('
|| easting|| ' '
|| Northing
|| ' '
|| Ground_mOD
|| ')', 27700)
FROM bh_tmp;
首先,CONCAT(...)
;
后面有个分号错位了
而且您不能将函数名称本身连接到字符串中:
INSERT INTO bh(name, bh_geom)
SELECT bh_name
, ST_GeomFromText('POINT(' || concat_ws(' ', easting, northing, ground_mod) || ')'
, 27700)
FROM bh_tmp;
或者,因为您已经有了值(不是 text
),您可以使用 ST_MakePoint()
和 ST_SetSRID()
:
ST_SetSRID(ST_MakePoint(easting, northing, ground_mod), 27700)
应该会更快。
- Npgsql parameterized query output incompatible with PostGIS
我正在尝试将点几何值和其他数据从一个 table 插入到另一个 table。
-- create tables
create table bh_tmp (bh_id integer, bh_name varchar
, easting decimal, northing decimal, ground_mod decimal);
create table bh (name varchar);
SELECT AddGeometryColumn('bh', 'bh_geom', 27700, 'POINT',3);
-- popualte bh_tmp
insert into bh_tmp values
(1,'C5',542945.0,180846.0,3.947),
(3,'B24',542850.0,180850.0,4.020),
(4,'B26',543020.0,180850.0,4.020);
-- populate bh from bh_tmp
insert into bh(name, bh_geom) SELECT
bh_name,
CONCAT($$ST_GeomFromText('POINT($$, Easting, ' ', Northing, ' '
, Ground_mOD, $$)', 27700)$$);
FROM bh_tmp;
出现此错误:
ERROR: parse error - invalid geometry SQL state: XX000 Hint: "ST" <-- parse error at position 2 within geometry
我看不出我指定的 ST_GeomFromText
字符串有什么问题。但是如果我插入行 'manually',我可以填充 table bh
,例如:
INSERT INTO bh (name, bh_geom)
VALUES ('C5' ST_GeomFromText('POINT(542945.0 180846.0 3.947)', 27700));
我做错了什么?
您收到该错误是因为 CONCAT 函数的输出是文本,而您的 bh_geom 列是几何图形,因此您试图将文本插入到几何图形中。这将起作用:
INSERT INTO bh(name, bh_geom) SELECT
bh_name,
ST_GeomFromText('POINT('
|| easting|| ' '
|| Northing
|| ' '
|| Ground_mOD
|| ')', 27700)
FROM bh_tmp;
首先,CONCAT(...)
;
而且您不能将函数名称本身连接到字符串中:
INSERT INTO bh(name, bh_geom)
SELECT bh_name
, ST_GeomFromText('POINT(' || concat_ws(' ', easting, northing, ground_mod) || ')'
, 27700)
FROM bh_tmp;
或者,因为您已经有了值(不是 text
),您可以使用 ST_MakePoint()
和 ST_SetSRID()
:
ST_SetSRID(ST_MakePoint(easting, northing, ground_mod), 27700)
应该会更快。
- Npgsql parameterized query output incompatible with PostGIS