Respostas:
Para os documentos de osmose, vejo a opção de comando :
--bounding-box top=49.5138 left=10.9351 bottom=49.3866 right=11.201
para PostGIS, você pode usar ST_MakeEnvelope (esquerda, inferior, direita, superior, srid) para criar uma caixa delimitadora e, em seguida, o &&
operador da caixa delimitadora para descobrir onde as caixas delimitadoras se cruzam:
SELECT *
FROM mytable
WHERE mytable.geom && ST_MakeEnvelope(10.9351, 49.3866, 11.201, 49.5138, 4326);
O SRID 4326 é para WGS84 Lat / Long e é necessário apenas para PostGIS 1.5; pode ser omitido para versões posteriores.
Eu acho que vai ser algo assim: A caixa delimitadora no PostGIS é criada por
ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))', <srid>)
A consulta usará ST_Intersection com uma subconsulta.
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;
Aprendi mais ou menos isso nas páginas de ajuda do PostGIS.
Uma segunda consulta, na tabela de caminhos, projetada de maneira semelhante à anterior (mas com ST_Dimension () = 1) deve ser o caminho.
Micha HTH
existe um tópico aqui semelhante à sua pergunta aqui ...
ST_Intersection - (T) Retorna uma geometria que representa a parte compartilhada de geomA e geomB. A implementação da geografia faz uma transformação em geometria para fazer a interseção e depois volta para WGS84.
1. você também pode obter algumas informações aqui sobre funções de construção de geometria.
SELECT ST_AsText(ST_Intersection(
ST_Buffer('POINT(0 0)', 2),
ST_Buffer('POINT(3 0)', 2)
));
2.Outras informações aqui sobre Intersects Intersection: PostGIS - ST_Intersects, ST_Intersection ...
SELECT b.the_geom As bgeom, p.the_geom As pgeom,
ST_Intersection(b.the_geom, p.the_geom) As intersect_bp
FROM buildings b INNER JOIN parcels p ON ST_Intersection(b,p)
WHERE ST_Overlaps(b.the_geom, p.the_geom)
LIMIT 1;
espero que ajude você ...
Este é um comentário no código de @ Micha.
Os pares de coordenadas POLYGON
devem seguir uma ordem no sentido horário (ou no sentido anti-horário): superior esquerdo, superior direito, inferior direito, inferior esquerdo, superior esquerdo novamente.
Portanto, no sentido horário, a chamada de função deve ser:
ST_GeomFromText('POLYGON((ulx uly, urx ury, lrx lry, llx llr, ulx uly))', <srid>)
Ou no sentido anti-horário:
ST_GeomFromText('POLYGON((ulx uly, llx llr, lrx lry, urx ury, ulx uly))', <srid>)