我想从两个现有列中创建第三列。说我当前的表(坐标)看起来像这样:
(table: coords)
+----------------+------+
| x | y |
+----------------+------+
| 1 | 0 |
+----------------+------+
| 1 | 1 |
+----------------+------+
我想从其他两个中创建第三列类型几何(来自PostGIS),并将此列添加到该表中。决赛桌应该如下:
(table: pointsT)
+-----+----------+------+----+-----
| x | y | coord |
+----------------+------+----------
| 1 | 0 | (1, 0) |
+----------------+------+----------
| 1 | 1 | (1, 1) |
+----------------+------+----------
我想从中创建一个表。类似的东西:
CREATE TABLE pointsT(x text, y text, point geometry);
INSERT INTO points(x, y, point)
SELECT CO.x, CO.y, CO.'POINT(CO.x CO.y)' AS p FROM coords AS CO;
编辑:来自Edwins的回答 使用Edwins回答,这将是完整的命令:
CREATE TABLE pointsT(x text, y text, point geometry);
INSERT INTO points(x, y, point)
SELECT CO.x, CO.y, ST_AsText(ST_SetSRID(ST_Point(CO.x CO.y), 4326) AS wgs84long_la FROM coords AS CO;
答案 0 :(得分:4)
point
没有“Postgre GIS”这样的东西,你的意思是PostGis。
point
是标准PostgreSQL的常规类型。你不需要PostGis,但它当然也在PostGis中使用了很多。
从两个数字创建点的最简单,最有效的方法是point()
function。它需要两个double precision
个数字,但也会接受integer
或numeric
:
SELECT *, point(x,y) AS coord FROM tbl;
geometry
要构建PostGis geometry
类型,您需要另外定义SRID
,以标识空间参照系。有几个geometry constructors可用。由于您从两个数字列开始,我建议:
SELECT ST_SetSRID(ST_Point(x, y), 4326) As wgs84long_lat;
请务必不要混淆经度和纬度。 More details in the manual.
答案 1 :(得分:2)
SELECT x, y, '(' || x || ',' || y || ')' AS coord
FROM YourTable