Bạn có ba vấn đề với câu lệnh của mình mặc dù thông báo lỗi chỉ gợi ý một phần của nó ... "WHERE phải là kiểu boolean" có nghĩa là thông tin bạn đưa ra WHERE không được đánh giá cho kết quả boolean.
ST_MakeEnvel yêu cầu các tham số của nó theo thứ tự này : xmin, ymin, xmax, ymax, srid
.
Bạn thông qua không chính xác ymax, ymin, xmax, xmin, srid
.
WHERE phải đánh giá để boolean:
Để xác định xem hình học và đường bao có bất kỳ yếu tố chung nào không thì nên xây dựng WHERE như vậy: WHERE geom && envelope_geom
nếu không, bạn có thể sử dụng ST_Contains
Để xác định xem hình học có được chứa trong phong bì không: `WHERE ST_Contains (phong_geom, geom)
Bạn đã không cung cấp bất kỳ phương pháp so sánh cho WHERE
.
Bảng 'hành tinh_osm_ways' không chứa bất kỳ cột hình học nào, mặc dù 'hành tinh_osm_roads' không chứa cột hình học có tên là 'cách'.
Bạn có thể tạo một cột hình học trong bảng 'hành tinh_osm_ways' từ hành tinh liên quan_osm_nodes.lat và hành tinh_osm_nodes.lon.
Sử dụng 'hành tinh_osm_roads', điều này cho thấy cách sử dụng hộp giới hạn đối với bảng có cột hình học:
SELECT *
FROM planet_osm_roads
WHERE planet_osm_roads.way && ST_Transform(
ST_MakeEnvelope(-122.271189, 37.804339, -122.275244, 37.808264,
4326),3857
);
hoặc thay đổi nó thành này:
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);