He visto esta pregunta antes, pero las respuestas que intento no funcionan.
Estoy buscando consultar todas las formas OSM que están dentro de un cuadro delimitador. Los datos OSM se importaron con mercator esférico predeterminado. Estoy consultando usando LAT / LON, por lo tanto, la transformación
SELECT *
FROM planet_osm_ways
WHERE ST_Transform(
ST_MakeEnvelope(37.808264, 37.804339, -122.275244, -122.271189,
4326),3857
);
Cuando ejecuto esto me sale el siguiente error:
ERROR: el argumento de DONDE debe ser de tipo booleano, no de geometría de tipo LÍNEA 3: DONDE ST_Transform (ST_MakeEnvelope (37.808264, 37.804339, -12 ...
Respuestas:
Tiene tres problemas con su declaración, aunque el mensaje de error está insinuando solo una parte de ella ... "DÓNDE debe ser de tipo booleano" significa que la información que proporcionó DONDE no está evaluando un resultado booleano.
ST_MakeEnvelope le pregunta por sus parámetros en este orden:
xmin, ymin, xmax, ymax, srid
.Pasaste incorrectamente
ymax, ymin, xmax, xmin, srid
.DONDE debe evaluar a booleano:
Para determinar si una geometría y la envoltura tienen algún elemento en común, el DÓNDE debe construirse así: de lo
WHERE geom && envelope_geom
contrario, puede usar ST_ContainsPara determinar si la geometría está contenida dentro de la envolvente: `WHERE ST_Contains (envoltura_geom, geom)
No proporcionó ningún método de comparación para el
WHERE
.La tabla 'planet_osm_ways' no contiene ninguna columna de geometría, aunque 'planet_osm_roads' sí contiene una columna de geometría llamada 'way'.
Puede crear una columna de geometría en la tabla 'planet_osm_ways' a partir de los correspondientes planet_osm_nodes.lat y planet_osm_nodes.lon.
Usando 'planet_osm_roads', esto muestra cómo usar un cuadro delimitador contra una tabla con una columna de geometría:
o cámbielo a esto:
fuente