0

类似的问题

我想从我现有的两列中制作第三列。假设我当前的表(坐标)如下所示:

(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 Answer Using Edwins answer,这将是完整的命令:

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

2 回答 2

3

point

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

  • point是标准 PostgreSQL 的常规类型。您不需要 PostGis,但它在 PostGis 中也被大量使用,当然。

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

SELECT *, point(x,y) AS coord FROM tbl;

geometry

要构建 PostGisgeometry类型,您需要SRID另外定义一个标识空间参考系统的类型。有几个可用的几何构造函数。由于您从两个数字列开始,我建议:

SELECT ST_SetSRID(ST_Point(x, y), 4326) As wgs84long_lat;

确保不要混淆经度和纬度。手册中有更多详细信息。

于 2013-09-26T22:58:27.373 回答
2
SELECT x, y, '(' || x || ',' || y || ')' AS coord
FROM YourTable
于 2013-09-26T22:36:13.250 回答