Tiene tres problemas con su declaración, aunque el mensaje de error está insinuando solo una parte de ella ... "DÓNDE debe ser de tipo booleano" significa que la información que proporcionó DONDE no está evaluando un resultado booleano.
ST_MakeEnvelope le pregunta por sus parámetros en este orden: xmin, ymin, xmax, ymax, srid
.
Pasaste incorrectamente ymax, ymin, xmax, xmin, srid
.
DONDE debe evaluar a booleano:
Para determinar si una geometría y la envoltura tienen algún elemento en común, el DÓNDE debe construirse así: de lo WHERE geom && envelope_geom
contrario, puede usar ST_Contains
Para determinar si la geometría está contenida dentro de la envolvente: `WHERE ST_Contains (envoltura_geom, geom)
No proporcionó ningún método de comparación para el WHERE
.
La tabla 'planet_osm_ways' no contiene ninguna columna de geometría, aunque 'planet_osm_roads' sí contiene una columna de geometría llamada 'way'.
Puede crear una columna de geometría en la tabla 'planet_osm_ways' a partir de los correspondientes planet_osm_nodes.lat y planet_osm_nodes.lon.
Usando 'planet_osm_roads', esto muestra cómo usar un cuadro delimitador contra una tabla con una columna de geometría:
SELECT *
FROM planet_osm_roads
WHERE planet_osm_roads.way && ST_Transform(
ST_MakeEnvelope(-122.271189, 37.804339, -122.275244, 37.808264,
4326),3857
);
o cámbielo a esto:
SELECT *
FROM planet_osm_roads
WHERE ST_Contains(
ST_Transform(
ST_MakeEnvelope(-122.271189, 37.804339, -122.275244, 37.808264,
4326)
,3857)
,planet_osm_roads.way);