He PostGIS tabla con dos columnas de geometría, ambos definidos con SRID 4326. Puedo insertar en la tabla sin problema, utilizando la siguiente INSERT
instrucción (donde lng
y lat
son los valores que se pasan en la programación):
INSERT INTO pad_meta (
uuid, created, updated, name, origin, radius, area, expiry, creator
) VALUES (
$1, now(), now(), $2, ST_GeomFromText('POINT(lng, lat)', 4326), $3,
ST_Buffer(ST_GeomFromText('POINT(lng, lat)', 4326), $4), $5, $6
)
Pero cuando voy a consulta para una intersección con ST_Intersects, dependiendo del valor del punto llego ERROR: Operation on mixed SRID geometries
.
Por ejemplo, esta consulta funciona:
SELECT * FROM pad_meta where ST_Intersects(
'POINT(-122.334172173172 46.602634395263560)'::geometry, area::geometry
) ORDER BY created DESC;
Y este error:
SELECT * FROM pad_meta where ST_Intersects(
'POINT(-122.334172173172 47.602634395263560)'::geometry, area::geometry
) ORDER BY created DESC;
Nota, son consultas idénticas, excepto el valor de la longitud. He experimentado con diferentes valores, pero no se identifica un claro punto de transición entre las consultas que funcionan y las que no.
Creo que estoy fundamentalmente de la incomprensión algo. Por el momento, he resuelto/corregidos/trabajó en el problema de volver a formatear la consulta para utilizar ST_GeomFromText
y se especifica explícitamente el SRID:
SELECT * FROM pad_meta where ST_Intersects(
ST_GeomFromText('POINT(-122.334172173172 47.602634395263560)', 4326), area
) ORDER BY created DESC;
Pero, sinceramente, no entiendo muy bien cuál es la diferencia, o si realmente "la" solución.
Mi pregunta es: ¿por Qué estoy recibiendo un error sólo para valores específicos, y cuál es la forma correcta para dar formato a esta consulta?
Aquí está mi definición de tabla de referencia:
CREATE TABLE IF NOT EXISTS pad_meta (
uuid CHAR(32),
created TIMESTAMP,
updated TIMESTAMP,
name VARCHAR(128),
origin GEOMETRY(Point, 4326),
radius INTEGER,
area GEOMETRY(Polygon, 4326),
expiry TIMESTAMP,
creator CHAR(32),
PRIMARY KEY (uuid)
);
También he comprobado que hay sólo un tipo de SRID en el geometry_columns:
SELECT f_table_name, f_geometry_column, srid FROM geometry_columns;
f_table_name | f_geometry_column | srid
--------------+-------------------+------
pad_meta | origin | 4326
pad_meta | area | 4326
Ayuda/asesoramiento apreciado. Gracias! (Nota: también he visto esta pregunta, pero desde ya estoy definiendo explícitamente mi geometría Srid al insertar en la tabla, parece que eso no es lo que está sucediendo).