J'ai déjà vu cette question posée, mais les réponses que j'essaie ne fonctionnent pas.
Je cherche à interroger toutes les voies OSM qui se trouvent dans une zone de délimitation. Les données OSM ont été importées avec mercator sphérique par défaut. J'interroge en utilisant LAT / LON d'où la transformation
SELECT *
FROM planet_osm_ways
WHERE ST_Transform(
ST_MakeEnvelope(37.808264, 37.804339, -122.275244, -122.271189,
4326),3857
);
Lorsque j'exécute cela, j'obtiens l'erreur suivante:
ERREUR: l'argument de WHERE doit être de type booléen, pas de type geometry LINE 3: WHERE ST_Transform (ST_MakeEnvelope (37.808264, 37.804339, -12 ...
Réponses:
Vous avez trois problèmes avec votre instruction, bien que le message d'erreur n'indique qu'une partie de celle-ci ... "WHERE doit être de type booléen" signifie que les informations que vous avez fournies à WHERE n'évaluent pas un résultat booléen.
ST_MakeEnvelope demande ses paramètres dans cet ordre:
xmin, ymin, xmax, ymax, srid
.Vous avez mal passé
ymax, ymin, xmax, xmin, srid
.O must doit évaluer à booléen:
Pour déterminer si une géométrie et l'enveloppe ont des éléments en commun, le WHERE doit être construit comme ceci:
WHERE geom && envelope_geom
sinon vous pouvez utiliser ST_ContainsPour déterminer si la géométrie est contenue dans l'enveloppe: `WHERE ST_Contains (enveloppe_geom, geom)
Vous n'avez fourni aucune méthode de comparaison pour le
WHERE
.La table 'planet_osm_ways' ne contient aucune colonne de géométrie, bien que 'planet_osm_roads' contienne une colonne de géométrie nommée 'way'.
Vous pouvez créer une colonne de géométrie dans le tableau 'planet_osm_ways' à partir des fichiers planet_osm_nodes.lat et planet_osm_nodes.lon associés.
En utilisant 'planet_osm_roads', cela montre comment utiliser une boîte englobante contre une table avec une colonne de géométrie:
ou changez-le en ceci:
la source