Я видел этот вопрос, заданный ранее, но ответы, которые я пытаюсь, не работают.
Я ищу, чтобы запросить все способы OSM, которые находятся в ограничивающей рамке. Данные OSM были импортированы со сферическим меркатором по умолчанию. Я запрашиваю, используя LAT / LON, следовательно, преобразование
SELECT *
FROM planet_osm_ways
WHERE ST_Transform(
ST_MakeEnvelope(37.808264, 37.804339, -122.275244, -122.271189,
4326),3857
);
Когда я запускаю это, я получаю следующую ошибку:
ОШИБКА: аргумент WHERE должен иметь тип логический, а не тип геометрии LINE 3: WHERE ST_Transform (ST_MakeEnvelope (37.808264, 37.804339, -12 ...
Ответы:
У вас три проблемы с вашим утверждением, хотя сообщение об ошибке намекает только на его часть ... «WHERE должно иметь тип boolean» означает, что информация, которую вы передали 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' содержит столбец геометрии с именем 'way'.
Вы можете создать столбец геометрии в таблице 'planet_osm_ways' из связанных с planet_osm_nodes.lat и planet_osm_nodes.lon.
Используя 'planet_osm_roads', это показывает, как использовать ограничивающий прямоугольник для таблицы с геометрическим столбцом:
или измените это на это:
источник