Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

228
Visualizações
Consulta espacial de Postgis

Estoy tratando de crear una consulta que devolverá una lista de puntos que no se cruzan con una línea. En su mayor parte, funciona muy bien y muy rápido. Sin embargo, me gustaría saber a qué distancia está la línea más cercana.

He intentado usar la función st_distance pero devuelve nulo. ¿Alguien tiene algún consejo o guía para ayudarme a resolver esto?

Esta es mi declaración SQL hasta ahora:

 SELECT p.objectid, p.voidentifier, p.featuretypecd, p.heightagl, st_distance(p.geom::geography, l.geom::geography), p.geom FROM vo_point p LEFT JOIN vo_line l ON ST_Intersects(p.geom, l.geom) WHERE l.featureid IS NULL and p.featuretypecd in ('537','538','540','541','542','543','544');
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Creo que una subconsulta es lo que estás buscando:

 SELECT p.objectid, p.voidentifier, p.featuretypecd, p.heightagl, p.geom, (SELECT min(ST_Distance(p.geom::geography, l2.geom::geography)) FROM vo_line l2) FROM vo_point p LEFT JOIN vo_line l ON ST_Intersects(p.geom, l.geom) WHERE l.featureid IS NULL AND p.featuretypecd IN ('537','538','540','541','542','543','544');

Esta consulta debe devolver todos los registros donde los puntos y las líneas se cruzan, y también devolverá la distancia a la línea más cercana.

over 4 years ago · Santiago Trujillo Relatório

0

Entonces, después de más de una hora, decidí abortar e intentar un enfoque diferente. En su lugar, creé dos vistas:

 create view pylon_temp as SELECT p.objectid, p.voidentifier, p.featuretypecd, p.heightagl, p.geom FROM vo_point p LEFT JOIN vo_line l ON ST_Intersects(p.geom, l.geom) WHERE l.featureid IS NULL and p.featuretypecd in ('537','538','540','541','542','543','544');
 create view pylon_errors as select p.objectid, p.voidentifier, p.featuretypecd, p.heightagl, min(st_distance(p.geom::geography, l.geom::geography))as distance, p.geom from pylon_temp p, vo_line l where st_dwithin(p.geom,l.geom,0.001) group by p.objectid, p.voidentifier, p.featuretypecd, p.heightagl, p.geom order by distance desc;

Puede que no sea la forma más elegante de hacer esto, pero es muy rápido y puedo usar la vista en mi aplicación web/aplicaciones GIS.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda