¿Puedo usar las funciones de Postgres para encontrar puntos dentro de un rectángulo giratorio de tamaño fijo?
Estoy usando Postgres 9.5 y acabo de instalar PostGIS para algunas funciones extendidas. Tengo una tabla con (x, y) puntos y quiero encontrar el rectángulo que se ajuste al número máximo de puntos. La restricción es que las longitudes laterales del rectángulo son fijas. Hasta ahora estoy contando cuántos puntos hay en la caja sin rotación. Mis puntos se centran en el origen,(0,0).
SELECT Sum(CASE
WHEN x > -5
AND x < 5
AND y > -10
AND y < 10 THEN 1
ELSE 0
END) AS inside_points,
Count(1) AS total_points
FROM track_t;
Esta consulta me da el recuento de puntos dentro de un rectángulo con origen(0,0) y longitudesx = 10 yy = 20.
A partir de aquí, crearía una tabla auxiliar de puntos de esquina de rectángulo rotados (ángulo, x1, y1, x2, y2), luego uniría en cruz a mis datos y contaría sobre los puntos por ángulo, mientras que GRUPO POR ángulo. Luego puedo seleccionar qué ángulo me da más puntos dentro del rectángulo.
Pero esto parece un poco pasado de moda, y tal vez no sea eficaz. Además, contar puntos dentro de un rectángulo girado no es uncálculo trivial.
¿Hay formas más eficientes y elegantes?, quizás usando PostgresTipos de datos geométricos o PostGISBox2D, rotar un rectángulo con longitudes laterales fijas y luego contar el número de puntos en el interior? Las funciones geométricas se ven bien, pero parecen proporcionar cuadros de límite mínimos y no al revés.
Además de Postgresql, estoy usando un marco de Python que podría usarse en caso de que SQL no pueda hacer que esto funcione.
Actualización: una cosa que probé es usarTipos Geometricos, específicamente BOX
SELECT deg, Box(Point(-5, -10), Point(5, 10)) * Point(1, Radians(deg))
FROM Generate_series(0, 360, 90) AS deg
Desafortunadamente, elFunción de rotación por un puntono funciona para polígonos.