Quero criar uma consulta para selecionar todas as formas e seus nós existentes em uma caixa delimitadora usando o postGIS. A caixa delimitadora deve incluir todos os detalhes, à medida que o comando osmose "--bounding-box" for recuperado.
Obrigado. a função ST_MakeEnvelope precisa de mais um parâmetro, srid. Eu não sei o que colocar lá .. alguma idéia?
uriel
1
Parece que você está usando o PostGIS 1.5, que requer esse parâmetro. Eu acho que o SRID é ignorado, então qualquer valor pode produzir os mesmos resultados. Se você tiver dados latitude / longitude, geralmente usam um SRID de 4326.
Mike T
1
Atualmente, a maioria das ferramentas permite escolher o SRID para dados OSM quando você o carrega. O OSM SRID padrão é 3857 (comerciante esférico). O SRID padrão para a maioria dos dados lat / lon é SRID 4326 (Lat / Lon AKA WGS84). Se você carregar os dados com o SRID 3857, por exemplo, precisará fazer uma conversão de LAT / LON WGS84 para 3857: ST_Transform (ST_MakeEnvelope (LON1, LAT1, LON2, LAT2, 4326), 3857) Algumas ferramentas (como imposm3) Atualmente, apenas o suporte SRID 3857
Justin Swanhart
Observe que o operador && não transforma SRIDs para você. Certifique-se de que o envelope que você criou esteja no mesmo SRID da geometria de teste, ou então transforme-o você mesmo. trac.osgeo.org/postgis/ticket/2320
Nelson
1
&& operador é computacionalmente mais lento do que ST_Intersects
caiohamamura
8
Eu acho que vai ser algo assim: A caixa delimitadora no PostGIS é criada por
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.
Oi, obrigado! o que o srid? que shoul eu preciso inserir em <srid>? e ".geom" (linha 4) parece inválido, deveria estar lá?
2113 uriel
Desculpe, perdi seu comentário da semana passada. O srid é o código do sistema de referência de coordenadas. ou seja, 2039 para Israel. A adição .geom extrai a parte Geometry de um "GeometryCollection Você pode estar certo de que ele não é necessário aqui..
Micha
5
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 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;
Os pares de coordenadas POLYGONdevem 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:
Eu acho que vai ser algo assim: A caixa delimitadora no PostGIS é criada por
A consulta usará ST_Intersection com uma subconsulta.
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
fonte
existe um tópico aqui semelhante à sua pergunta aqui ...
1. você também pode obter algumas informações aqui sobre funções de construção de geometria.
2.Outras informações aqui sobre Intersects Intersection: PostGIS - ST_Intersects, ST_Intersection ...
espero que ajude você ...
fonte
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:
Ou no sentido anti-horário:
fonte