Anda memiliki tiga masalah dengan pernyataan Anda meskipun pesan kesalahan hanya mengisyaratkan sebagian saja ... "WHERE must be type boolean" berarti bahwa informasi yang Anda berikan WHERE tidak mengevaluasi hasil boolean.
ST_MakeEnvelope meminta parameter dalam urutan ini: xmin, ymin, xmax, ymax, srid
.
Anda salah masuk ymax, ymin, xmax, xmin, srid
.
DIMANA harus mengevaluasi ke boolean:
Untuk menentukan apakah geometri dan amplop memiliki elemen yang sama , WHERE harus dibuat seperti: WHERE geom && envelope_geom
jika tidak, Anda dapat menggunakan ST_Contains
Untuk menentukan apakah geometri terdapat di dalam amplop: `WHERE ST_Contains (envelope_geom, geom)
Anda tidak memberikan metode perbandingan apa pun untuk WHERE
.
Tabel 'planet_osm_ways' tidak mengandung kolom geometri apa pun, meskipun 'planet_osm_roads' memang mengandung kolom geometri bernama 'way'.
Anda dapat membuat kolom geometri di tabel 'planet_osm_ways' dari planet_osm_nodes.lat dan planet_osm_nodes.lon yang terkait.
Menggunakan 'planet_osm_roads', ini menunjukkan cara menggunakan kotak pembatas pada tabel dengan kolom geometri:
SELECT *
FROM planet_osm_roads
WHERE planet_osm_roads.way && ST_Transform(
ST_MakeEnvelope(-122.271189, 37.804339, -122.275244, 37.808264,
4326),3857
);
atau ubah ke ini:
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);