Más

Usando datos GIS con CGAL

Usando datos GIS con CGAL


Leí algunas publicaciones aquí en GIS.SE que apuntan a algoritmos útiles en CGAL. Me gustaría probar algoritmos en CGAL, como la transformación del eje medial / extracción del esqueleto poligonal, pero los ejemplos en el sitio web de CGAL usan archivos de texto o eps para entrada / salida.

Y me pregunto cuál es la mejor manera de usar shapefiles y otros formatos GIS comunes en CGAL.

Por ejemplo, ¿puedo convertir los shapefiles de polgon a un formato de datos común que CGAL lee / escribe?


Querrá consultar SFCGAL, una biblioteca contenedora para CGAL que expone la funcionalidad CGAL en términos de características simples de OGC. Si carga sus shapefiles en PostGIS, puede llamar a muchas operaciones SFCGAL directamente; hay una lista en los documentos de PostGIS.


Verano de código de Google

CGAL es una biblioteca de software que ofrece una serie de algoritmos y estructuras de datos geométricos fiables. Los componentes CGAL operan en 2D y 3D, y en ocasiones en dimensiones arbitrarias. Ejemplos de componentes incluyen cascos convexos, descomposición convexa, triangulaciones de Delaunay, diagramas de Voronoi, estructuras de datos de malla de superficie poligonal, generación de malla, operaciones booleanas, cálculos de envolvente, detección de intersecciones, reconstrucción de superficies y superficies de subdivisión.

CGAL se utiliza en una variedad de dominios de aplicación como CAD / CAM (diseño y modelado asistido por computadora), GIS (sistemas de información geográfica), geofísica, procesamiento de imágenes, biología molecular, robótica, planificación de movimiento y gráficos.

CGAL está escrito en C ++ y se adhiere rigurosamente al paradigma de programación genérica.

CGAL se convirtió en un proyecto de código abierto en 2003. La mayor parte de CGAL está bajo la licencia GPL v3 +, y algunas partes principales están bajo LGPL v3 +. Los lanzamientos semestrales tienen actualmente alrededor de 10,000 descargas. CGAL cuenta con el apoyo comercial de la empresa derivada GeometryFactory.


Uso de datos GIS con CGAL - Sistemas de información geográfica

El Proyecto de Código Abierto CGAL se complace en anunciar el lanzamiento 5.1 Beta 1 de CGAL, la Biblioteca de Algoritmos de Geometría Computacional.

CGAL versión 5.1 Beta 1 es una versión de prueba pública. Debería proporcionar una base sólida para informar errores que deben abordarse antes del lanzamiento de la versión final de CGAL 5.1 en julio.

Además de las correcciones y mejoras generales de los paquetes existentes, lo siguiente ha cambiado desde CGAL 5.0:

Remallado tetraédrico (paquete nuevo)

  • Este paquete implementa un algoritmo de remallado isotrópico tetraédrico,
    que mejora la calidad de los tetraedros en términos de ángulos diedros,
    mientras apunta a una longitud de borde determinada.

Topología de malla de superficie (paquete nuevo)

Este paquete permite el cálculo de algunas invariantes topológicas de superficies, como:

  • Pruebe si dos curvas (cerradas) en una superficie combinatoria son homotópicas. Los usuarios pueden elegir
    entre homotopía libre y homotopía con puntos finales fijos
  • la prueba es una curva es contráctil
  • Calcule los ciclos no contraíbles más cortos en una superficie, con o sin pesos en los bordes.

Cuadro delimitador óptimo (paquete nuevo)

Este paquete implementa un algoritmo de optimización que tiene como objetivo construir una aproximación cercana
del cuadro delimitador óptimo de una malla o un conjunto de puntos, que se define como el más pequeño
(en términos de volumen) cuadro delimitador que contiene una malla determinada o un conjunto de puntos.


Uso de datos GIS con CGAL - Sistemas de información geográfica

lrineau lanzó este 28 de julio de 2020

El Proyecto de Código Abierto CGAL se complace en anunciar el lanzamiento 5.1 Beta 2 de CGAL, la Biblioteca de Algoritmos de Geometría Computacional.

CGAL versión 5.1 Beta 2 es una versión de prueba pública. Debería proporcionar una base sólida para informar errores que deben abordarse antes del lanzamiento de la versión final de CGAL 5.1 en septiembre.

Además de las correcciones y la mejora general de los paquetes existentes, lo siguiente ha cambiado desde CGAL 5.0:

Remallado tetraédrico (paquete nuevo)

  • Este paquete implementa un algoritmo de remallado isotrópico tetraédrico,
    que mejora la calidad de los tetraedros en términos de ángulos diedros,
    mientras apunta a una longitud de borde determinada.

Topología de malla de superficie (paquete nuevo)

Este paquete permite el cálculo de algunas invariantes topológicas de superficies, como:

  • Pruebe si dos curvas (cerradas) en una superficie combinatoria son homotópicas. Los usuarios pueden elegir
    entre homotopía libre y homotopía con puntos finales fijos
  • la prueba es una curva es contráctil
  • Calcule los ciclos no contraíbles más cortos en una superficie, con o sin pesos en los bordes.

Cuadro delimitador óptimo (paquete nuevo)

Este paquete implementa un algoritmo de optimización que tiene como objetivo construir una aproximación cercana
del cuadro delimitador óptimo de una malla o un conjunto de puntos, que se define como el más pequeño
(en términos de volumen) cuadro delimitador que contiene una malla determinada o un conjunto de puntos.


Uso de datos GIS con CGAL - Sistemas de información geográfica

lrineau lanzó este 8 de septiembre de 2020 y middot 5037 se compromete a dominar desde este lanzamiento

El Proyecto de Código Abierto CGAL se complace en anunciar el lanzamiento 5.1 de CGAL, la Biblioteca de Algoritmos de Geometría Computacional.

Además de las correcciones y la mejora general de los paquetes existentes, lo siguiente ha cambiado desde CGAL 5.0:

Remallado tetraédrico (paquete nuevo)

Este paquete implementa un algoritmo de remallado isotrópico tetraédrico,
que mejora la calidad de los tetraedros en términos de ángulos diedros,
mientras apunta a una longitud de borde determinada.

Topología de malla de superficie (paquete nuevo)

Este paquete permite el cálculo de algunas invariantes topológicas de superficies, como:

  • Pruebe si dos curvas (cerradas) en una superficie combinatoria son homotópicas. Los usuarios pueden elegir
    entre homotopía libre y homotopía con puntos finales fijos
  • la prueba es una curva es contráctil
  • Calcule los ciclos no contraíbles más cortos en una superficie, con o sin pesos en los bordes.

Cuadro delimitador óptimo (paquete nuevo)

Este paquete implementa un algoritmo de optimización que tiene como objetivo construir una aproximación cercana
del cuadro delimitador óptimo de una malla o un conjunto de puntos, que se define como el más pequeño
(en términos de volumen) cuadro delimitador que contiene una malla determinada o un conjunto de puntos.


Con el enfoque moderno en la tecnología LiDAR, la cantidad de datos topográficos, en forma de nubes de puntos masivas, ha aumentado drásticamente. Además, debido a la popularidad de LiDAR, las encuestas repetidas en las mismas áreas son cada vez más comunes. Esta tendencia solo aumentará a medida que los cambios topográficos provoquen levantamientos sobre el terreno ya escaneado, en cuyo caso obtenemos grandes conjuntos de datos espacio-temporales.

En terrenos dinámicos, como las regiones costeras, estos datos espacio-temporales pueden ofrecer una visión interesante de cómo cambia el terreno con el tiempo. Un paso inicial en el análisis de dichos datos es crear un modelo de elevación digital que represente el terreno a lo largo del tiempo. En el caso de conjuntos de datos espacio-temporales, esos modelos a menudo representan la elevación en una cuadrícula volumétrica 3D. Esto implica interpolar la elevación de los puntos LiDAR en estos puntos de la cuadrícula. En este artículo mostramos cómo realizar de manera eficiente la interpolación de vecinos naturales sobre una cuadrícula volumétrica 3D. Usando una unidad de procesamiento de gráficos (GPU), describimos diferentes algoritmos para lograr compensaciones de velocidad y memoria GPU. Nuestro algoritmo se extiende a dimensiones superiores. Nuestros resultados experimentales demuestran que el algoritmo es eficiente y escalable. Categorías y tema.


Verano de código de Google

CGAL es una biblioteca de software que ofrece una serie de algoritmos y estructuras de datos geométricos fiables. Los componentes CGAL operan en 2D y 3D, y en ocasiones en dimensiones arbitrarias. Ejemplos de componentes incluyen cascos convexos, descomposición convexa, triangulaciones de Delaunay, diagramas de Voronoi, estructuras de datos de malla de superficie poligonal, generación de malla, operaciones booleanas, cálculos de envolvente, detección de intersecciones, reconstrucción de superficies y superficies de subdivisión.

CGAL se utiliza en una variedad de dominios de aplicación como CAD / CAM (diseño y modelado asistido por computadora), GIS (sistemas de información geográfica), geofísica, procesamiento de imágenes, biología molecular, robótica, planificación de movimiento y gráficos.

CGAL está escrito en C ++ y se adhiere rigurosamente al paradigma de programación genérica.

CGAL se convirtió en un proyecto de código abierto en 2003. La mayor parte de CGAL está bajo la licencia GPL v3 +, y algunas partes principales están bajo LGPL v3 +. Los lanzamientos semestrales tienen actualmente alrededor de 10,000 descargas. CGAL cuenta con el apoyo comercial de la empresa derivada GeometryFactory.


Sistemas de información geográfica: modelos, cajas de herramientas y sistemas de información geográfica

Los SIG difieren sustancialmente con respecto a su funcionalidad específica, lo que hace que la comparación de los diferentes sistemas sea bastante difícil. Restringimos nuestra evaluación a la funcionalidad principal de un SIG relacionada con la manipulación de datos vectoriales. Además, destacamos los siguientes tres criterios en nuestra comparación:

Datun modelo: El modelo de datos espaciales que ofrece el sistema es muy importante para el usuario, ya que proporciona los tipos de datos geométricos y las operaciones.

EscupióIal indexación: Las estructuras de índices espaciales son importantes para respaldar de manera eficiente las consultas espaciales más importantes. Por tanto, es importante qué tipo de estructuras de índice están realmente disponibles, especialmente para aplicaciones que se ocupan de bases de datos muy grandes.

Escupióial Join: Dado que las combinaciones espaciales son la operación más importante para combinar diferentes mapas, el rendimiento del sistema depende de la eficiencia del algoritmo subyacente.

Estos criterios se encuentran entre los más importantes para el procesamiento de consultas espaciales en un SIG [24].

Aunque ya hemos restringido nuestras consideraciones a aspectos específicos, limitamos nuestra comparación a unos pocos sistemas y bibliotecas importantes. De hecho, comenzamos nuestra discusión con la introducción de dos modelos de datos estandarizados comunes que son implementados por muchos sistemas comerciales. A continuación, analizaremos algunos sistemas comerciales que se utilizan en el contexto de los SIG en la industria. A continuación, presentamos algunos sistemas prototipo que sirven principalmente como plataformas de investigación.

Modelos de datos estandarizados

El estándar más importante para GIS [51] es publicado por el Open GIS Consortium. Proporciona un modelo vectorial orientado a objetos y tipos de datos geométricos básicos. Las implementaciones reales de proveedores comerciales como Oracle están estrechamente relacionadas con el estándar Open GIS. Todos los tipos de datos geométricos son subclases de la clase Geometría que proporciona un atributo que especifica el sistema de referencia espacial. Uno de los métodos de Geometría entrega la denominada envolvente de un objeto que se llama MBR en nuestra terminología. El modelo de datos distingue entre tipos geométricos atómicos como puntos, curvas y superficies y los tipos de colección correspondientes. El tipo atómico más complejo es una superficie poligonal que consta de un anillo poligonal exterior y un conjunto de anillos poligonales internos donde cada uno de ellos representa un agujero en la superficie. Se deben obedecer ciertas afirmaciones para que dicha superficie poligonal esté en un estado consistente.

Las relaciones topológicas de dos objetos espaciales se expresan utilizando el modelo de nueve intersecciones [17]. Este modelo distingue entre el exterior, el interior y el límite de un objeto. Los predicados espaciales, como las superposiciones, se definen especificando cuál de las afirmaciones debe satisfacerse. Además de los predicados, la especificación Open GIS define diferentes métodos constructivos como el que se utiliza para calcular el casco convexo de un objeto espacial. Otra función importante permite calcular el objeto búfer que contiene aquellos puntos que están dentro de la distancia. ε de un objeto dado. Además, existen métodos para calcular la intersección (y otras operaciones de conjuntos) en dos objetos.

El estándar OpenGIS también ha influido en gran medida en otros estándares para datos geográficos como el estándar para almacenar, recuperar y procesar datos espaciales usando SQL [33] y el estándar para Geography Markup Language (GML) que se basa en XML. La versión recientemente publicada del estándar GML [52] proporciona además funcionalidad para soportar objetos tridimensionales y aplicaciones espacio-temporales.

Sistemas comerciales

En esta subsección, brindamos una breve descripción general de las características de procesamiento de consultas geográficas de los sistemas de bases de datos, los sistemas de información geográfica y las bibliotecas de estructuras de datos.

Entre los tres grandes proveedores de bases de datos, Oracle ofrece el soporte más completo para la gestión de datos espaciales. El modelo de datos de Oracle [53] es similar al modelo de características simples del Consorcio OpenGIS. Oracle además ofrece curvas donde los arcos pueden ser circulares. La funcionalidad espacial se implementa sobre el DBMS de Oracle y, por lo tanto, no está completamente integrada. Esto es más notable cuando se usa SQL para especificar consultas espaciales donde el sabor declarativo de SQL contrasta con las llamadas procedimentales imperativas de la funcionalidad espacial.

El procesamiento de consultas espaciales se realiza utilizando el enfoque de refinamiento de filtros. Además, se podrían emplear filtros intermedios cuando se utilice una aproximación de kernel del objeto. Este tipo de procesamiento se aplica a consultas de selección espacial y a combinaciones espaciales.

Hay árboles R y quadtrees en Oracle para indexar datos espaciales. A diferencia de los árboles R-, los cuadrículas (lineales) se basan en una descomposición de cuadrícula del espacio de datos en mosaicos, cada uno de ellos mantiene la lista de objetos que se cruzan. El quadtree lineal se implementa dentro del árbol B + de Oracle. En caso de indexación fija, los mosaicos son todos del mismo tamaño. Oracle proporciona una función que permite a los usuarios determinar una buena configuración del tamaño del mosaico. En el caso de la indexación híbrida, los mosaicos pueden variar en tamaño. Esto se logra aumentando localmente la resolución de la cuadrícula si el número de mosaicos aún está por debajo de un umbral determinado. Una comparación de las estructuras de índices espaciales de Oracle [35] muestra que el rendimiento de las consultas del árbol R es superior al del árbol cuádruple.

EspacialWson

SpatialWare [44] proporciona un conjunto de funciones que permiten administrar datos espaciales dentro de Microsoft SQL Server. La implementación se basa en las características de extensibilidad de SQL Server. Nuevamente, los tipos de datos espaciales son similares a las características simples de OpenGIS.

La funcionalidad de procesamiento de consultas consta de consultas de selección espacial, así como combinaciones espaciales. Lo más notable es el hecho de que SpatialWare proporciona árboles R para la indexación espacial.

LEDA y CGAL

LEDA [45] y CGAL [11] son ​​bibliotecas C ++ (consulte el Capítulo 41 para obtener más información sobre LEDA) que ofrecen una rica colección de estructuras de datos y algoritmos. Entre las estructuras más avanzadas se encuentran los tipos de datos espaciales adecuados para ser utilizados para la implementación de SIG. Lo más interesante para los SIG es la capacidad de LEDA y CGAL para calcular la geometría de forma exacta mediante el llamado núcleo racional, es decir, tipos de datos espaciales cuyas coordenadas son números racionales. LEDA proporciona los tipos de datos bidimensionales más importantes, como puntos, rectángulos iso-orientados, polígonos y subdivisiones planas. Además, LEDA proporciona implementaciones eficientes de importantes algoritmos geométricos como casco convexo, triangulaciones e intersección de líneas. AlgoComs, un producto complementario de LEDA, también proporciona una funcionalidad más rica para polígonos que está estrechamente relacionada con una superposición de mapas. A diferencia de LEDA, el enfoque de CGAL se limita a algoritmos de geometría computacional donde la funcionalidad de CGAL es generalmente más rica en comparación con LEDA. CGAL contiene árboles kd para indexar datos de puntos multidimensionales y admite consultas incrementales de vecinos más cercanos.

Ambos, LEDA y CGAL, no admiten algoritmos externos y estructuras de índices y, por lo tanto, solo cubren parcialmente la funcionalidad requerida para un SIG. Ha habido una extensión de LEDA, llamada LEDA-SM [12], que soporta las estructuras de datos externas más importantes.

JTS Topology Suite (JTS) [76] es una biblioteca de clases Java que proporciona funciones geométricas fundamentales de acuerdo con el modelo de geometría definido por el Consorcio OpenGIS [51]. Por lo tanto, proporciona los tipos de datos espaciales básicos como superficies poligonales y predicados espaciales y operaciones como búfer y casco convexo. La biblioteca también admite un modelo de precisión definido por el usuario y contiene código para un cálculo geométrico robusto. También hay algunas clases disponibles para indexar MBR (sobres). La única estructura es el quadtree MX-CIF [67] que es un quadtree especializado para organizar un conjunto dinámico de rectángulos. La otra estructura es un árbol R estático que se crea utilizando una técnica de carga masiva [39]. Actualmente, no hay soporte para administrar datos en disco de manera eficiente. JTS se publica bajo un acuerdo de licencia de código abierto (GNU LGPL).

Prototipos de investigación

El sistema SAND [18] proporciona el poder de procesamiento de consultas completo de un sistema de base de datos espaciales y, además, contiene un navegador para mostrar los resultados de una consulta espacial. Proporciona el folclore común de tipos de datos espaciales como punto, rectángulo, polígono y superficie poligonal (denominada polirregión). SAND ofrece tres tipos de predicados de consulta que se refieren a predicados topológicos, métricos y de distancia, respectivamente. Un usuario puede solicitar la secuencia de objetos dentro de una región determinada clasificados de acuerdo con su distancia a un punto de consulta determinado. SAND es muy poderoso con respecto a su indexación. SAND ofrece el PMR-quadtree [67] así como el R-tree [26]. Ambas estructuras de índices espaciales admiten consultas de clasificación controlando el recorrido del índice a través de una cola de prioridad. Tenga en cuenta que SAND entrega las respuestas de una consulta como un iterador donde la siguiente respuesta se produce a pedido. SAND ofrece una rica fuente de uniones espaciales que se basan en el principio de recorrido sincronizado de índices espaciales. Una característica especial de SAND es su optimizador de consultas, así como su script.

lenguaje que sirve como pegamento entre los diferentes componentes del sistema.

XXL (Biblioteca extensible y flexible) [10] no es un sistema, sino una biblioteca Java pura que no admite tipos de datos espaciales, sino puntos y rectángulos. XXL proporciona un potente soporte para varios tipos de índices (espaciales). Hay diferentes tipos de implementaciones de árboles R y árboles B que pueden combinarse con curvas de relleno de espacio (p. Ej. z-orden y orden de Hilbert). El concepto de contenedores se introduce en XXL para proporcionar una visión abstracta de la memoria externa. Existen implementaciones de contenedores que se basan en la memoria principal, archivos y discos sin procesar. XXL ofrece una rica fuente de diferentes tipos de uniones espaciales como [14, 56] que se basan en el uso de curvas de relleno de espacio y el paradigma de clasificación y fusión. XXL está equipado con un álgebra relacional de objetos de operadores de consulta y un optimizador de consultas que puede reescribir programas Java. Los operadores de consulta son iteradores que entregan las respuestas de una consulta bajo demanda, una por una. XXL está disponible bajo un acuerdo de licencia de código abierto (GNU LGPL).

El Sistema Dedale [63] es único en el sentido de que su modelo de datos subyacente se basa en restricciones [64]. En lugar de utilizar una representación de límites, un conjunto de restricciones describe objetos espaciales de dimensiones arbitrarias. Esto también permite el uso de lenguajes basados ​​en restricciones para expresar consultas espaciales.

La última versión de Dedale se implementa en BASIS [21] que consiste en el árbol R * como su estructura de índice espacial y diferentes algoritmos de unión espacial que son capaces de explotar índices espaciales [22].


Uso de bucle for basado en rango con tipos CGAL

Considere un CGAL :: Arrangement_2. En este momento, tengo que recorrerlo de esta manera:

Si trato de migrar esto para usar un bucle for basado en rango de estilo C ++ 11 como este:

Recibo el siguiente error (el énfasis es mío):

Error: (1385, 13) expresión de rango no válida de tipo 'CGAL :: Arrangement_2>>, true>, std :: __ 1 :: vector>>, true>>, std :: __ 1 :: asignador>>, true>> >>, CGAL :: Arr_consolidated_curve_data_traits_2>>, verdadero>>, int>>, CGAL :: Arr_extended_dcel>>, verdadero>, estándar :: __ 1 :: vector>>, verdadero>>, estándar :: __ 1 :: asignador> >, true>>>>, CGAL :: Arr_consolidated_curve_data_traits_2>>, true>>, int>>, GIS_vertex_data, GIS_halfedge_data, GIS_face_data, CGAL :: Arr_vertex_base>>, true>>>, CGAL :: Gps_base>>, true_data >, CGAL :: _ Lista_única>>, CGAL :: Gps_face_base>> ' no hay una función de 'inicio' viable disponible

El error es el mismo si cambio el bucle for para usar auto & ampface o const auto & ampface.

¿Alguien tiene una solución para esto, o algún envoltorio agradable para que funcione? Estoy tratando de evitar tener que recurrir al uso de esta monstruosidad con un argumento lambda:


Todo alrededor de GIS

El objetivo del Proyecto de Código Abierto CGAL es proporcionar fácil acceso a algoritmos geométricos eficientes y confiables en forma de biblioteca C ++. CGAL se utiliza en varias áreas que necesitan computación geométrica, tales como: gráficos por computadora, visualización científica, diseño y modelado asistido por computadora, sistemas de información geográfica, biología molecular, imágenes médicas, robótica y planificación de movimiento, generación de mallas, métodos numéricos & # 8230 Más sobre el proyectos utilizando la página web CGAL.

La Biblioteca de algoritmos de geometría computacional (CGAL), ofrece estructuras de datos y algoritmos como triangulaciones (triangulaciones restringidas 2D y triangulaciones de Delaunay y triangulaciones periódicas en 2D y 3D), diagramas de Voronoi (para puntos 2D y 3D, diagramas de Voronoi ponderados aditivamente en 2D y segmentos Diagramas de Voronoi), polígonos (operaciones booleanas, compensaciones, esqueleto recto), poliedros (operaciones booleanas), arreglos de curvas y sus aplicaciones (envolventes 2D y 3D, sumas de Minkowski), generación de mallas (generación de mallas Delaunay en 2D y mallas de superficie y volumen en 3D). generación, superficies de piel), procesamiento de geometría (simplificación, subdivisión y parametrización de la malla de superficie, así como estimación de propiedades diferenciales locales y aproximación de crestas y umbilicales), formas alfa, algoritmos de casco convexo (en 2D, 3D y dD), búsqueda estructuras (árboles kd para la búsqueda de vecinos más cercanos y árboles de rango y segmento), interpolación (interpolación de vecinos naturales y ubicación de st reamlines), análisis de forma, ajuste y distancias (la esfera de puntos o esferas envolvente más pequeña, elipsoide de puntos envolvente más pequeño, análisis de componentes principales) y estructuras de datos cinéticos.

Todas estas estructuras de datos y algoritmos operan en objetos geométricos como puntos y segmentos, y realizan pruebas geométricas sobre ellos. Estos objetos y predicados se reagrupan en núcleos CGAL.

Finalmente, la biblioteca de soporte ofrece generadores de objetos geométricos y funciones de clasificación espacial, así como un marco de búsqueda de matrices y un solucionador para programas lineales y cuadráticos. Además, ofrece interfaces para software de terceros, como las bibliotecas GUI Qt, Geomview y Boost Graph Library.

Licencia

CGAL se distribuye bajo un esquema de licencia dual. CGAL se puede utilizar junto con el software de código abierto de forma gratuita. El uso de CGAL en otros contextos se puede realizar obteniendo una licencia comercial de GeometryFactory. Para obtener más detalles, consulte la página de Licencia.