6 votos

¿Cómo puedo hacer una Postgres/PostGIS ST_Distance_sphere consulta más eficiente?

Dentro de Postgres/PostGIS he escrito una consulta SQL para obtener la distancia más cercana para cada elemento dentro de un punto de coordenadas tabla a partir de una polilínea de la tabla. La consulta viene de nuevo y funciona correctamente, pero se tarda aproximadamente 1 minuto por cada registro (véase la instrucción SQL siguiente nota: me he limitado a los 10 primeros registros para que yo pueda derivar cuánto tiempo tomaría por registro, de lo contrario, se podría tomar días para procesar todos los 366,681 registros). He creado un GIST índice tanto en la "the_geom" campos de la tabla.

La otra tabla que es polilínea ha 369,962 registros.

¿Cómo puedo hacer una Postgres/PostGIS ST_Distance_sphere consulta más eficiente?

select "ParAdd", "ParZip", min(distance) from 
(SELECT a."ParAdd", a."ParZip", ST_Distance_sphere(a.the_geom, b.the_geom) distance
FROM 
(
select "ParAdd", "ParZip", the_geom
from reflux_blue_06_21_2012_15147_va_md_premise_res_prosp_filtered_t limit 10) a,
(
select the_geom
from reflux_blue_06_21_2012_15147_va_md_premise_gis_main_pipe_4326) b
) as testing group by "ParAdd", "ParZip" ORDER BY "ParAdd", "ParZip"

1voto

Lars Mæhlum Puntos 4569

trate de fundición a la geografía, el tipo de cambio. Creo que el más rápido de la geografía cálculo de la distancia se libera. Pero tal vez es en el tronco.

select "ParAdd", "ParZip", min(distance) from 
(SELECT a."ParAdd", a."ParZip", ST_Distance(a.the_geom::geography, b.the_geom::geography) distance
FROM 
(
select "ParAdd", "ParZip", the_geom
from reflux_blue_06_21_2012_15147_va_md_premise_res_prosp_filtered_t limit 10) a,
(
select the_geom
from reflux_blue_06_21_2012_15147_va_md_premise_gis_main_pipe_4326) b
) as testing group by "ParAdd", "ParZip" ORDER BY "ParAdd", "ParZip"

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