Вставить точку в PostGIS?

49

Я создал одну таблицу в своем гайке PostGIS, я не могу вставить точку.

Что не так с моим запросом?

CREATE TABLE app ( 
  p_id INTEGER PRIMARY KEY

);

SELECT AddGeometryColumn('app','the_geom','4326','POINT',2);

INSERT INTO app(p_id, the_geom) VALUES(2, POINT(-71.060316, 48.432044));

После последнего запроса показывается какая-то ошибка.

ERROR:  column "the_geom" is of type geometry but expression is of type point
LINE 1: ...SERT INTO app(p_id, the_geom) VALUES(2, POINT(-71....
                                                             ^
HINT:  You will need to rewrite or cast the expression.


********** Error **********

ERROR: column "the_geom" is of type geometry but expression is of type point
SQL state: 42804
Hint: You will need to rewrite or cast the expression.
Character: 53

Я уже проверяю свою версию PostGIS.

SELECT PostGIS_full_version();

Я получил следующий вывод ..

"POSTGIS="1.5.3" GEOS="3.3.1-CAPI-1.7.1" PROJ="Rel. 4.7.1, 23 September 2009" LIBXML="2.7.3" USE_STATS"
Shahjalal
источник

Ответы:

84

Вы путаете SQL и WKT (известный текст ). WKT похож на язык геометрии для описания фигур, но это не SQL, это язык для запросов и манипулирования базами данных. При работе с WKT в запросе SQL он должен быть текстовым , а не смешиваться с SQL.

Ваш запрос работает, если вы правильно отформатируете WKT (удалите «,») и установите SRID. Для этого метода ST_GeomFromText(wkt, srid)хорошо работает:

INSERT INTO app(p_id, the_geom)
VALUES(2, ST_GeomFromText('POINT(-71.060316 48.432044)', 4326));

Если у вас есть столбцы с числовой долготой / широтой, вы можете напрямую сделать геометрию POINT:

ST_SetSRID(ST_MakePoint(long, lat), 4326);

Проверьте другие конструкторы геометрии в руководстве .


Для запроса @ vik86, the_geomможет быть обновлен в таблице appиз числовых столбцов longи latс использованием:

UPDATE app SET
  the_geom = ST_SetSRID(ST_MakePoint(long, lat), 4326);
Майк Т
источник
Не могли бы вы подробнее рассказать об использовании этой функции: «Если у вас есть столбцы с числовой долготой и широтой, вы можете напрямую создать геометрию POINT: ST_SetSRID (ST_MakePoint (long, lat), 4326);« Сейчас у меня есть таблица с широтой и долготой, чтобы использовать API PostGIS мне нужно в формате точек. Следовательно хотел знать, как я могу обновить столбец точки, используя эту функцию. Спасибо Викрам
Vik86
@ Vik86 смотри обновленный ответ
Mike T
1

Если вы работаете с клиентом Java, то я советую использовать двоичные типы для передачи данных. По памяти я записал улучшение производительности на 10%, когда сделал это изменение по сравнению с методом ST_AsEWKT.

сержант
источник