Já vi essa pergunta antes, mas as respostas que estou tentando não estão funcionando.
Eu estou olhando para consultar todas as maneiras OSM que estão dentro de uma caixa delimitadora. Os dados do OSM foram importados com o mercator esférico padrão. Estou consultando usando LAT / LON, portanto, a transformação
SELECT *
FROM planet_osm_ways
WHERE ST_Transform(
ST_MakeEnvelope(37.808264, 37.804339, -122.275244, -122.271189,
4326),3857
);
Quando executo isso, recebo o seguinte erro:
ERRO: o argumento WHERE deve ser do tipo booleano, não do tipo geometria LINE 3: WHERE ST_Transform (ST_MakeEnvelope (37.808264, 37.804339, -12 ...
Respostas:
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_ContainsPara 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:
ou altere para:
fonte