У вас є три проблеми з вашим твердженням, хоча повідомлення про помилку натякає лише на його частину ... "WHERE повинно бути тип булевим" означає, що інформація, яку ви надали WHERE, не оцінює для булевого результату.
ST_MakeEnvelope просить його параметри в наступному порядку: xmin, ymin, xmax, ymax, srid
.
Ви неправильно подали номер ymax, ymin, xmax, xmin, srid
.
ДЕ слід оцінювати як булева:
Щоб визначити, чи має геометрія та конверт будь-які спільні елементи, WHERE має бути побудовано так: WHERE geom && envelope_geom
інакше можна використовувати ST_Contains
Щоб визначити, чи міститься геометрія в конверті: `WHERE ST_Contains (envelope_geom, geom)
Ви не надали жодного методу порівняння для WHERE
.
Таблиця "planet_osm_ways" не містить жодного стовпця з геометрією, хоча "planet_osm_roads" містить стовпчик геометрії з назвою "шлях".
Ви можете створити стовпчик геометрії в таблиці 'planet_osm_ways' з пов’язаних planet_osm_nodes.lat та planet_osm_nodes.lon.
Використовуючи "planet_osm_roads", це показує, як використовувати обмежувальне поле проти таблиці з стовпцем геометрії:
SELECT *
FROM planet_osm_roads
WHERE planet_osm_roads.way && ST_Transform(
ST_MakeEnvelope(-122.271189, 37.804339, -122.275244, 37.808264,
4326),3857
);
або змінити це на це:
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);