Penso che sarà qualcosa del genere: il riquadro di selezione in PostGIS è stato creato da
ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))', <srid>)
La query utilizzerà ST_Intersection con una sottoquery.
SELECT bbox_nodes.id, bbox_nodes.tag, nodes_geom
FROM (SELECT nodes.id, nodes.tag,
ST_Intersection(nodes.the_geom,
ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))', <srid> )).geom AS nodes_geom
FROM nodes
WHERE ST_Intersects(nodes.the_geom,
ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))', <srid> )) AS bbox_nodes
WHERE ST_Dimension(bbox_nodes.nodes_geom)=0;
Ho più o meno preso questo dalle pagine di aiuto di PostGIS.
Una seconda query, sulla tabella dei modi, progettata in modo simile a quanto sopra (ma con ST_Dimension () = 1) dovrebbe trovare la soluzione.
HTH, Micha