tengo la siguiente tabla sencilla:consulta SQL para el punto en el polígono usando PostgreSQL
CREATE TABLE tbl_test
(
id serial NOT NULL,
poly polygon NOT NULL
)
WITH (OIDS=FALSE);
entonces intenta insertar una fila con un polígono:
insert into tbl_test values(1, PolyFromText('POLYGON((0 0, 10 10, 10 0, 0 0))'))
Y se encuentra con este error :
column "poly" is of type polygon but expression is of type geometry
Cual es lame. Así que mi primera pregunta es:
- ¿De verdad tengo que elegir?
De todos modos, después de la fundición funciona. Y ahora que estoy tratando de hacer una simple consulta ST_Contains:
select id, poly from tbl_test where ST_Contains(poly, Point(GeomFromText('POINT(9 2)')))
que da el error:
ERROR: function st_contains(polygon, point) does not exist
LINE 1: select id, poly from tbl_test where ST_Contains(poly, Point(...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
¿Qué se supone que haga?
las siguientes obras:
select st_contains(st_geomfromtext('POLYGON((0 0, 10 10, 10 0, 0 0))'), st_geomfromtext('POINT(0 0)'))
pero eso es probablemente porque ambos argumentos son del tipo de geometría. La consulta real contra los datos de la tabla no funciona.
Respuesta:
Doi! El problema era que el DB que creé no estaba basado en la plantilla DB postgis (y por lo tanto no tenía las funciones relevantes y las tablas de columnas de geometría, etc.). Debo comentar, en conclusión, que la forma en que PostGIS requiere que usted agregue cientos de funciones, filas y algunas tablas a su base de datos para que tenga compatibilidad GIS es completamente coja. Hace la copia de seguridad del esquema mucho más compleja y es muy propensa a errores (no lo permita el cielo si omite llamar a AddGeometryColumn y simplemente agrega una columna de geometría).
Si funciona poly in poly, ¿por qué no hacer un polígono de "1 gon" con el punto que está tratando de encontrar? –
No estoy seguro de que los polígonos de 1 punto sean compatibles con postgres. Además, es una solución para un problema del que no estoy seguro. –