Mais

Como criar uma caixa delimitadora em torno de um ponto usando postgis

Como criar uma caixa delimitadora em torno de um ponto usando postgis


Como criar uma caixa delimitadora em torno de um geom (POINT) e encontrar todos os geoms que se cruzam (POINTS) dentro dessa caixa delimitadora?


A caixa delimitadora é retangular e, portanto, ST_DWithin fornece um resultado incorreto ao usar um círculo para fazer a seleção. Seu fluxo de trabalho pode ser:

  1. Defina um ponto
  2. Tampe o ponto e crie um círculo
  3. Faça uma caixa delimitadora mínima ao redor do círculo
  4. Use esta caixa recém-construída para selecionar os recursos

Assim, se esquecermos o problema com as coordenadas geométricas, a consulta SQL seria assim:

SELECT * de sua_tabela AS a onde ST_Intersects (a.geom, ST_Envelope (ST_Buffer (ST_GeomFromText ('POINT (-108 43)', 4326), 10)));

O buffer de 10 graus com EPSG: 4326 pode não fazer sentido, mas o SQL por si só dá uma resposta à sua pergunta conforme você a coloca. Se seus dados e o envelope que você construiu estiverem em algum SRS projetado como alguma zona UTM, o resultado deve ser bom.


SELECT pt.id FROM points_table pt WHERE ST_DWithin (ST_GeomFromText ('POINT 0 0', 3857), pt.geom, 500);

Essa pode ser uma maneira de resolver seu problema.