Saya telah melihat pertanyaan ini diajukan sebelumnya, tetapi jawaban yang saya coba tidak berfungsi.
Saya mencari untuk menanyakan semua Cara OSM yang ada di dalam kotak pembatas. Data OSM diimpor dengan mercator bola standar. Saya meminta menggunakan LAT / LON karenanya transformasi
SELECT *
FROM planet_osm_ways
WHERE ST_Transform(
ST_MakeEnvelope(37.808264, 37.804339, -122.275244, -122.271189,
4326),3857
);
Ketika saya menjalankan ini saya mendapatkan kesalahan berikut:
GALAT: argumen WHERE harus berupa tipe boolean, bukan tipe geometri LINE 3: WHERE ST_Transform (ST_MakeEnvelope (37.808264, 37.804339, -12 ...
Jawaban:
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_ContainsUntuk 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:
atau ubah ke ini:
sumber