Insertar punto en PostGIS?

49

He creado una tabla en mi tuerca PostGIS. No puedo insertar puntos.

¿Qué hay de malo 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 verifico mi versión de PostGIS.

SELECT PostGIS_full_version();

Obtuve el siguiente resultado ...

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

Respuestas:

84

Está confundiendo SQL y WKT ( texto conocido ). WKT es como un lenguaje de geometría 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 estar mezclado con el SQL.

Su consulta funciona si formatea correctamente el WKT (elimine ",") y establezca 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 POINT:

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

Echa un vistazo a los otros constructores de geometría en el manual .


Para la solicitud de @ vik86, the_geomse puede actualizar en la tabla appdesde columnas numéricas longy latutilizando:

UPDATE app SET
  the_geom = ST_SetSRID(ST_MakePoint(long, lat), 4326);
Mike T
fuente
¿Podría dar más detalles sobre el uso de esta función? "Si tiene columnas con latitud de longitud numérica, puede hacer directamente una geometría POINT: ST_SetSRID (ST_MakePoint (long, lat), 4326);" En este momento tengo una tabla con lat y long, para usar la API PostGIS, la necesito en formato de punto. Por lo tanto, quería saber cómo actualizo la columna de puntos con esta función. Gracias Vikram
Vik86
@ Vik86 ver respuesta actualizada
Mike T
1

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

Sargento
fuente