Você tem três problemas com a sua declaração, embora a mensagem de erro esteja indicando apenas parte dela ... "WHERE deve ser do tipo booleano" significa que as informações que você forneceu ao WHERE não estão avaliando um resultado booleano.
ST_MakeEnvelope pede para seus parâmetros, nesta ordem: xmin, ymin, xmax, ymax, srid
.
Você passou incorretamente ymax, ymin, xmax, xmin, srid
.
ONDE deve avaliar para booleano:
Para determinar se uma geometria e o envelope têm algum elemento em comum, WHERE deve ser construído da seguinte maneira: WHERE geom && envelope_geom
caso contrário, você pode usar ST_Contains
Para determinar se a geometria está contida no envelope: `WHERE ST_Contains (envelope_geom, geom)
Você não forneceu nenhum método de comparação para o WHERE
.
A tabela 'planet_osm_ways' não contém nenhuma coluna geométrica, embora 'planet_osm_roads' contenha uma coluna geométrica denominada 'way'.
Você pode criar uma coluna de geometria na tabela 'planet_osm_ways' a partir de planet_osm_nodes.lat e planet_osm_nodes.lon relacionados.
Usando 'planet_osm_roads', isso mostra como usar uma caixa delimitadora em uma tabela com uma coluna de geometria:
SELECT *
FROM planet_osm_roads
WHERE planet_osm_roads.way && ST_Transform(
ST_MakeEnvelope(-122.271189, 37.804339, -122.275244, 37.808264,
4326),3857
);
ou altere para:
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);