Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

225
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!