8 votos

Geografía de PostGIS se cruzan más lento de geometría se cruzan

Tengo una tabla de polígonos grandes (países de alta resolución), con una geometría (4326) y la geografía de la columna. Tanto la geografía y la geometría están indexados con un gist índice espacial.

Una geografía basada en consulta tarda más de 10 minutos:

SELECT DISTINCT g1.iso, g2.iso FROM gadm g1, gadm g2
WHERE  ST_Intersects(g1.geog, g2.geog) AND g1.iso!=g2.iso

El equivalente basado en la geometría de la consulta de tomar 1.8 segundos:

SELECT DISTINCT g1.iso, g2.iso FROM gadm g1, gadm g2
WHERE  ST_Intersects(g1.geom, g2.geom) AND g1.iso!=g2.iso

¿Qué está pasando? La consulta de los planes de EXPLICAR un aspecto idéntico, excepto uno utiliza el índice geom y uno de los geog índice.

Estoy corriendo Postgres 9.5.6 y PostGIS 2.2.1.

8voto

MBCook Puntos 8316

Como @LR1234567 señalado, la geografía de la versión de ST_Intersects es realmente sólo una envoltura alrededor de un cálculo de la distancia. Si su geografías contienen una gran cantidad de vértices, usted puede obtener un mejor rendimiento, obligando PostGIS utilizar un árbol basado en el cálculo de la distancia.

Este algoritmo es mucho más rápido que el de la fuerza bruta cálculo de la distancia, pero PostGIS hace la apuesta que sólo vale la pena usarlo cuando el árbol se puede reutilizar varias veces. Puede anular esta lógica y la fuerza de la utilización de los árboles-base de cálculo como este:

SELECT DISTINCT g1.iso, g2.iso FROM gadm g1, gadm g2
WHERE g1.geog && g2.geog 
  AND g1.iso!=g2.iso
  AND _ST_DistanceTree(g1.geog, g2.geog) < 0.00001

2voto

dlanod Puntos 8661

La geografía funciones son más lentos, ya que hacen un montón más. También no mucho tiempo se ha dedicado a reforzar el rendimiento de la geografía funciones, ya que la mayoría de personas todavía utilizan la geometría.

Esto varía a lo mal que está la diferencia. COMO recuerdo de punto a punto de la distancia de cheques y ST_Dwithin punto a punto son sólo un poco más lento.

los polígonos son realmente malo y de lo malos que son es una función del número de puntos que tienes en tu polígono y la cobertura de la misma. Generalmente es al menos 10 veces peor que la geometría.

ST_Intersects en la geometría, por ejemplo, utiliza una gran cantidad de atajos que se basan en la intersección de la matriz que la geografía no puede. Para una mejor comparación sería ST_DWithin geometría / ST_Intersects geografía desde la geografía ST_Intersects es realmente una envoltura alrededor de la geografía ST_DWithin de plomería que se basa en la distancia de fontanería.

Incluso entonces usted encontrará la geometría es mucho más rápido. Creo que algunos de los más rápidos de piezas en la geometría de la distancia de fontanería son algo que puede ser añadido a la geografía. No sólo no ha sido suficiente y la demanda de financiamiento para ese tipo de trabajo para hacer que suceda.

Una cosa más. ¿Me puede hacer un favor y comparar el rendimiento de

&& (usando la geografía y la geometría)

de lo que recuerdo, el cuadro delimitador de rendimiento está más cerca en el rendimiento, pero realmente pierde si se tiene que dar en el núcleo de las funciones.

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