Inserindo ponto no PostGIS?


49

Eu criei uma tabela na minha porca PostGIS. Não consigo inserir ponto.

O que há de errado com minha consulta?

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

Após a última consulta, ele mostra algum erro.

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

Eu já verifiquei minha versão do PostGIS.

SELECT PostGIS_full_version();

Eu tenho a seguinte saída ..

"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"

Respostas:


84

Você está confundindo SQL e WKT ( texto conhecido ). O WKT é como uma linguagem de geometria para descrever formas, mas não é SQL, que é uma linguagem para consultar e manipular bancos de dados. Ao trabalhar com o WKT em uma consulta SQL, ele deve ser texto e não estar misturado ao SQL.

Sua consulta funcionará se você formatar corretamente o WKT (remova o ",") e defina um SRID. Para este método, ST_GeomFromText(wkt, srid)funciona bem:

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

Se você possui colunas com longitude / latitude numérica, é possível criar diretamente uma geometria POINT:

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

Confira os outros construtores de geometria no manual .


Para a solicitação do @ vik86, the_geompode ser atualizado na tabela a apppartir de colunas numéricas longe latusando:

UPDATE app SET
  the_geom = ST_SetSRID(ST_MakePoint(long, lat), 4326);

Você poderia elaborar o uso desse recurso: "Se você tiver colunas com latitude de longitude numérica, poderá criar diretamente uma geometria POINT: ST_SetSRID (ST_MakePoint (long, lat), 4326);" No momento, tenho uma tabela com lat e long, Para usar as APIs do PostGIS, preciso no formato de ponto. Por isso, queria saber como atualizo a coluna do ponto usando esse recurso. Obrigado Vikram
Vik86

@ Vik86 ver resposta atualizada
Mike T

1

Se você estiver trabalhando com um cliente Java, meu conselho é usar os tipos binários para transferir os dados. De memória, registrei uma melhoria de desempenho de 10% quando fiz essa alteração no método ST_AsEWKT.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.