1 votos

Cálculo de la distancia mínima entre puntos con PostGIS

Tengo una tabla (tab_Cities con ciudades que poseen más de 50000 habitantes. La tabla también contiene lat, long y the_geom como columnas. Ya puedo ver los puntos a través de QGIS.

Ahora quiero escribir una consulta en postgresql que me dé la distancia mínima de los puntos pero sólo sé cómo obtener la distancia de dos puntos. Pero ahora tengo alrededor de 60 puntos y quiero tener la menor distancia de TODOS los puntos.

¿Cómo puedo hacerlo?

Encontré algunas preguntas similares pero utilizaban dos tablas. Yo estoy usando una sola tabla.

3voto

erikvold Puntos 244

Puede utilizar las siguientes consultas (estas operaciones utilizan una tabla temporal):

-- add distance_min and nearest_id columns
alter table tab_Cities add column distance_min float;
alter table tab_Cities add column nearest_idpoint varchar(10);

--create temp table
DROP TABLE IF EXISTS table_temp;
select a1.gid as id_1, a2.gid as id_2, ST_Distance(a1.geom, a2.geom) as distance
INTO table_temp
    from tab_Cities a1 , tab_Cities a2
    where ST_DWithin(a1.geom, a2.geom, 5000)
    -- 5000 is like a buffer of 5000 meters around your point
    -- You can use a suitable radius for your points
    and a1.gid <> a2.gid ;

--update distance_min
update tab_Cities set distance_min = 
(
select distance 
from table_temp 
where tab_Cities.gid = table_temp.id_1 
order by distance limit 1
),
                      nearest_idpoint = 
(
select id_2 
from table_temp 
where tab_Cities.gid = table_temp.id_1 
order by distance limit 1
);
--DROP TABLE temp
DROP TABLE IF EXISTS table_temp;

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X