Построить тип геометрии из двух чисел

Похожий вопрос

Я хочу сделать третий столбец из двух существующих столбцов. Скажем, моя текущая таблица (координаты) выглядит так:

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

Редактировать: из ответа Эдвина Используя ответ Эдвина, это будет полная команда:

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;

person smaccoun    schedule 26.09.2013    source источник
comment
Если вы действительно собираетесь создать таблицу, содержащую эти три столбца, не делайте этого. Сохраните x и y или сохраните point, но не оба.   -  person Erwin Brandstetter    schedule 27.09.2013
comment
Хорошая точка зрения. На самом деле это всего лишь пример, который я придумал, чтобы понять, что я делаю для своего реального стола. Кроме того, пытаясь подчеркнуть, что мне нужна точка типа геометрии   -  person smaccoun    schedule 27.09.2013
comment
Здесь показаны различные методы   -  person Mike T    schedule 30.09.2013


Ответы (2)


point

  • Не существует такой вещи, как «Postgre GIS», вы имеете в виду PostGis.

  • point — это обычный тип стандартного PostgreSQL. Для этого вам не нужен PostGis, но, конечно, он также часто используется в PostGis.

  • Самый простой и эффективный способ создать точку из двух чисел — это point()функция. Он принимает два числа double precision, но также принимает integer или numeric:

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

geometry

Для построения типа PostGis geometry вам необходимо дополнительно определить SRID, который идентифицирует пространственную систему отсчета. Доступно несколько геометрических конструкторов. Поскольку вы начинаете с двух числовых столбцов, я предлагаю:

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

Не путайте долготу и широту. Подробнее в руководстве.

person Erwin Brandstetter    schedule 26.09.2013
comment
Отредактировано для ясности. Я имел в виду тип геометрии в PostGis - person smaccoun; 27.09.2013
comment
Возможно, что-то вроде: ВЫБЕРИТЕ CO.x, CO.y, геометрию ('POINT (CO.x CO.y)') AS p FROM coords AS CO; - person smaccoun; 27.09.2013
comment
@smaccoun: рассмотрите возможность добавления типа geometry. - person Erwin Brandstetter; 27.09.2013

person    schedule
comment
Кажется, здесь не распознаются двойные кавычки или, возможно, знак + (ошибка: столбец ( + x + , + y + ) не существует) - person smaccoun; 27.09.2013
comment
ой мой плохой не выспался - person tofutim; 27.09.2013
comment
Вы объединяете строковый литерал, который еще не является column of type POINT. Вы должны были бы произнести: ('(' || x || ',' || y || ')')::point, но есть более простой путь к этому месту назначения... - person Erwin Brandstetter; 27.09.2013
comment
Верно. Я также отредактировал для ясности, ища ТОЧКУ геометрии типа из PostGIS - person smaccoun; 27.09.2013