Esta sección recoge el conocimiento operativo que las cargas de trabajo de producción necesitan además de la referencia de funciones: cuándo trgeometry es el tipo adecuado en relación con sus vecinos (tpose y tgeometry), las convenciones de marco que la implementación impone y los riesgos numéricos que las cargas de trabajo reales de cuerpos rígidos encuentran. La mayoría de estos se exponen por separado a lo largo del capítulo; el objetivo aquí es disponer de un único lugar donde un nuevo contribuyente pueda leer de principio a fin antes de instrumentar una aplicación.
Tres tipos temporales abarcan el espacio de diseño de cuerpo rígido / forma arbitraria. Elija el tipo más estrecho que se ajuste a la carga de trabajo: los tipos más estrechos pagan menos almacenamiento y producen cajas delimitadoras más nítidas para el índice espacial.
tpose — solo posición y orientación temporal; el cuerpo se trata como un punto con un rumbo. Úselo cuando la forma sea irrelevante para la consulta (seguimiento cinemático, sustitutos de colisión basados solo en el rumbo).
trgeometry — una única forma de referencia estática que se traslada y rota a lo largo del tiempo según una pose temporal. Úselo cuando la forma importa pero es rígida: barcos, vehículos, drones con geometría fija, zonas de exclusión que se ajustan al cuerpo. La geometría de referencia se almacena una vez por fila, no por instante, de modo que el almacenamiento está dominado por la tpose subyacente.
tgeometry — geometría arbitraria temporal cuya forma misma varía a lo largo del tiempo. Úselo cuando la forma no sea rígida: franjas de viento de tormentas, plumas en expansión, polígonos en evolución.
Una trgeometry se puede proyectar a su tpose subyacente (trayectoria del centroide) o a una tgeometry totalmente materializada mediante las conversiones de “Conversión de tipos”. La dirección inversa (elevar una tgeometry de vuelta a una trgeometry) no está en general bien definida, ya que los cambios de forma arbitrarios no se factorizan limpiamente en rotación + traslación de una referencia fija.
Geometría de referencia solo 2D. La forma de referencia es un polígono 2D o una superficie poliédrica; el componente de rotación de la pose es el ángulo de guiñada (yaw) 2D de Capítulo 11, Poses temporales. No hay representación de cuerpo rígido 3D en este tipo; las cargas de trabajo que necesiten orientación 3D completa (cuaternión) sobre una forma 3D deben componer tpose con el paso de materialización de forma explícita.
Geometría de referencia única compartida. Cada instante de una trgeometry comparte la misma forma de referencia; solo varía la pose. La forma se almacena una vez por fila, no por instante.
Requisito de mismo SRID. La geometría de referencia y la pose temporal deben compartir un SRID; el constructor rechaza las discrepancias con el error estándar de MEOS ensure_same_srid. La geometría materializada hereda este SRID.
Semántica de restricción espacial basada en el centroide. atGeometry, minusGeometry, atStbox y minusStbox prueban el centroide de la forma materializada contra la región, no la forma materializada en sí. Una trgeometry cuyo centroide se encuentra fuera de una región pero cuyo cuerpo se extiende dentro de la región se excluye. Esto refleja la semántica subyacente de tpose (una pose es un punto) y es una decisión de diseño deliberada; las cargas de trabajo que necesiten contención de la forma completa deben materializar primero a tgeometry.
Cuatro riesgos afectan de forma fiable a las cargas de trabajo reales de cuerpos rígidos. La implementación mitiga cada uno de la siguiente manera:
Entradas con SRID mixtos. Construir una trgeometry a partir de una geometría de referencia y una tpose en SRID diferentes produciría silenciosamente posiciones materializadas erróneas si los SRID no se comprobaran.
Mitigación: el constructor y cada operador entre tipos pasan por ensure_same_srid, que genera un error que nombra ambos SRID. La ruta de error es ruidosa y explícita; no hay transformación implícita.
Advertencia de muestreo de traversedArea. La función traversedArea muestrea en los instantes de entrada y los conecta con la envolvente convexa de los dos polígonos extremos. Los segmentos de traslación pura son exactos, pero las rotaciones entre instantes se aproximan: para una rotación de 90° entre dos instantes, la cinta barrida es más ancha de lo que captura la envolvente convexa.
Mitigación: documentado en “Área recorrida”. Las cargas de trabajo que necesiten cotas ajustadas del área barrida deben sobremuestrear la tpose de entrada antes de construir la trgeometry; el patrón de setInterp + inserción de subinstantes del capítulo de tpose es el enfoque estándar. El submuestreo adaptativo dentro de traversedArea es un refinamiento futuro documentado.
Tolerancia de submuestreo adaptativo en la distancia materializada. Los núcleos de distancia continua (tDistance, nearestApproachDistance) materializan la forma rígida por cada intervalo entre instantes y emiten marcas intermedias donde la trayectoria de distancia se desvía de una línea recta. El tope de profundidad es de 32 marcas por intervalo y la aproximación interpolada LINEAL entre marcas está acotada por 1e-3 (en unidades del CRS).
Mitigación: la cota de 1e-3 es una decisión de diseño documentada. Los segmentos de traslación pura convergen en profundidad 0; los segmentos con mucha rotación usan el presupuesto completo de 32 marcas. Las cargas de trabajo que necesiten una precisión más nítida en un operador específico deben preprocesar las poses de entrada a instantes más densos en lugar de confiar en una recursión más ajustada.
Sorpresa de la restricción espacial basada en el centroide. atGeometry(trgeometry, geometry) prueba el centroide de la pose contra la región, no la forma materializada. Un barco largo cuya popa está en un puerto pero cuya proa ha cruzado el límite del puerto se informará como dentro del puerto mientras su centroide esté dentro.
Mitigación: documentado como una decisión de diseño de nivel D en “Restricciones espaciales”. Las cargas de trabajo que necesiten semántica de forma completa deben convertir mediante trgeometry::tgeometry antes de aplicar la restricción espacial. La conversión materializa un polígono por instante y es, en consecuencia, más costosa.
La representación en disco de una trgeometry es el GSERIALIZED de referencia seguido de la carga útil de la pose temporal. La disposición de bytes es estable: asBinary(trgeometry) / trgeometryFromBinary(bytea) realiza un ciclo de ida y vuelta que preserva el valor bit a bit (incluido el SRID de la forma de referencia, las banderas Z y M, y el subtipo de la tpose subyacente), y las serializaciones WKB / EWKB / HexEWKB siguen el patrón estándar de PostGIS de bandera de endianidad seguida de carga útil.
El par asMFJSON(trgeometry) / trgeometryFromMFJSON(text) es bidireccional. Cada instante se representa como {"geometry":<reference-geojson>,"values":[<pose-payload>]}: la geometría de referencia usa la forma GeoJSON estándar de PostGIS y la carga útil de la pose sigue la disposición de la clase de conformidad OGC GeoPose Basic-YPR ({"position":...,"quaternion":...} para 3D / {"position":...,"rotation":...} para 2D). La geometría de referencia se emite una vez por instante en el esquema actual; un trabajo futuro de esquema podría elevarla a un encabezado a nivel de capítulo para evitar la repetición por instante en secuencias largas.
La salida de pg_dump de una tabla que contiene columnas trgeometry usa la representación WKT de forma predeterminada; pg_dump --binary-upgrade usa la representación WKB. Ambas son estables en el ciclo de ida y vuelta entre actualizaciones de versión mayor de PostgreSQL.