Вставити крапку в 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"

Відповіді:


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 (довга, lat), 4326);" Зараз у мене є таблиця з lat і long, для використання api PostGIS мені це потрібно в точковому форматі. Звідси хотілося знати, як я можу оновити стовпчик точки за допомогою цієї функції. Дякую Vikram
Vik86

@ Vik86 дивіться оновлену відповідь
Майк Т

1

Якщо ви працюєте з клієнтом Java, то моя порада - використовувати двійкові типи для передачі даних. З пам’яті я зафіксував підвищення продуктивності на 10%, коли я змінив метод ST_AsEWKT.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.