从两个数字构造几何类型

时间:2013-09-26 22:33:40

标签: sql postgresql types casting postgis

Similar question

我想从两个现有列中创建第三列。说我当前的表(坐标)看起来像这样:

(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;

2 个答案:

答案 0 :(得分:4)

point

  • 没有“Postgre GIS”这样的东西,你的意思是PostGis

  • point是标准PostgreSQL的常规类型。你不需要PostGis,但它当然也在PostGis中使用了很多。

  • 从两个数字创建点的最简单,最有效的方法是point() function。它需要两个double precision个数字,但也会接受integernumeric

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