2009-06-21 16 views
28

PostgreSQL admite una variedad de geometric types fuera de la caja, junto con muchos elementos geométricos operators y GiST indexes que parecen ofrecer una indexación espacial de los datos. También hay PostGIS, que es una extensión de PG.Datos espaciales en PostgreSQL

¿Cuál es la diferencia entre el soporte espacial incorporado en PG y PostGIS?

Si mi aplicación necesita almacenar coordenadas geográficas (puntos, áreas, polígonos) y luego hacer consultas de manera eficiente (como punto-en-polígono, intersección de polígonos), ¿necesito PostGIS o puedo usar el (posiblemente) más tipos de datos integrados y más simples/sintaxis?

Respuesta

31

Primero me gustaría aclarar los índices GiST: GiST es en realidad un marco para crear índices para nuevos tipos de datos, no cualquier esquema de indización en sí. Este marco se usa para los tipos geométricos que vienen con Postgres, pero también se usa para un índice de similitud de texto de trigrama en columnas de texto estándar, y por supuesto es utilizado por los esquemas de indexación de muchos paquetes externos, entre los cuales podemos número PostGIS.

Si los tipos de datos geométricos estándar funcionarán para usted o si necesita PostGIS depende completamente de su aplicación.

PostGIS almacena datos geométricos en una columna de tipo "geometría"; en esto puedes almacenar más o menos datos arbitrarios (puntos, círculos, polígonos, qué-tienes-tú). La indexación es rápida y bastante sofisticada: puede hacer cosas como la indexación con pérdida usando cuadros delimitadores para formas complejas que no son indexables de ninguna otra manera razonable. Se admiten diferentes sistemas de referencias espaciales, con conversión automática de los resultados de las consultas. PostGIS también es compatible con los formatos OpenGIS estándar de la industria, que pueden ayudar a compartir datos con otros sistemas.

En contraste, el conjunto de tipos geométricos internos y sus índices es mucho menos sofisticado. No hay un tipo de geometría "genérica" ​​real; en su lugar, debe elegir que el tipo de una columna sea un punto, una línea, un círculo, un polígono o cualquier otra cosa; para combinaciones, probablemente tendrá que usar varias columnas. La indexación no es tan buena; no se pueden indexar tantos tipos diferentes de formas (aunque podría agregar soporte de cuadro delimitador al usar una columna separada para ellos y generar los cuadros delimitadores manualmente) y los índices probablemente no sean tan rápidos en algunas situaciones. Por otro lado, si los tipos geométricos internos satisfacen tus necesidades, obtienes la ventaja de que tu aplicación es más fácil de transportar a otros sistemas que tienen Postgres pero no PostGIS instalado.

Mi consejo sería jugar con los tipos geométricos internos y ver qué tan bien funciona para usted; si comienzas a tener problemas, prueba PostGIS.

+0

gracias. hey, ¿te importaría echar un vistazo a esto: http://stackoverflow.com/questions/1012504/sql-query-for-point-in-polygon-using-postgres –

+0

En eso parece que ya tienes tu respuesta: estás mezclando tipos de geometría Postgres estándar y tipos PostGIS. Estas son dos cosas separadas; Te sugiero que uses uno u otro, a menos que encuentres algún caso extraño en el que los tipos estándar de Postgres sean más eficientes o funcionen mejor que los tipos de PostGIS. –

Cuestiones relacionadas