60 votos

¿Cómo insertar un punto en el postgis?

He creado una mesa en mi Postgis. Pero no puedo insertar el punto. No sé qué es lo que está mal en mi 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));

Después de la última consulta muestra algún error

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

Ya revisé mi versión PostGIS.

SELECT PostGIS_full_version();

Tengo la siguiente salida

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

No sé cómo resolver esto.

102voto

hernan43 Puntos 566

Estás confundiendo SQL y WKT (conocido texto ). WKT es un lenguaje geométrico para describir formas, pero no es SQL, que es un lenguaje para consultar y manipular bases de datos. Cuando se trabaja con WKT en una consulta SQL, debe ser texto y no mezclado con el SQL.

La consulta funciona si se formatea correctamente el WKT (se elimina el ",") y se establece un SRID. Para este método, ST_GeomFromText(wkt, srid) funciona bien:

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

Si tiene columnas con longitud/latitud numérica, puede hacer directamente una geometría de PUNTO:

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

Consulta los otros constructores de geometría en el manual .


Para la petición de @vik86, the_geom se puede actualizar en la tabla app de las columnas numéricas long y lat utilizando:

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

1 votos

¿Podría explicar con más detalle el uso de esta función? "Si tiene columnas con latitud de longitud numérica, puede hacer directamente una geometría de PUNTO: ST_SetSRID(ST_MakePoint(long, lat), 4326); " Ahora mismo tengo una tabla con latitud y longitud, para usar las api's de PostGIS la necesito en formato punto. Por lo tanto, quería saber cómo puedo actualizar la columna de puntos utilizando esta función. Gracias Vikram

0 votos

@Vik86 ver respuesta actualizada

2voto

Mike Puntos 1113

Si Si está trabajando con un cliente Java, mi consejo es que utilice los tipos binarios para transferir los datos. De memoria, registré una mejora de rendimiento del 10% cuando hice este cambio sobre el método ST_AsEWKT.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X